Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C预处理器内核版本参考错误修复_C_Linux_Compilation_Linux Kernel - Fatal编程技术网

C预处理器内核版本参考错误修复

C预处理器内核版本参考错误修复,c,linux,compilation,linux-kernel,C,Linux,Compilation,Linux Kernel,我正在尝试修复内核3.16.0-69中引用d_别名或d_.d_别名的驱动程序。宏查找内核版本并使用适当的版本 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) || LINUX_VERSION_CODE == KERNEL_VERSION(3,12,49) || LINUX_VERSION_CODE == KERNEL_VERSION(3,16,67) //946e51f2bf37f1656916eb75bd0742ba33983c2

我正在尝试修复内核3.16.0-69中引用d_别名或d_.d_别名的驱动程序。宏查找内核版本并使用适当的版本

#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) || LINUX_VERSION_CODE == KERNEL_VERSION(3,12,49) || LINUX_VERSION_CODE == KERNEL_VERSION(3,16,67)
    //946e51f2bf37f1656916eb75bd0742ba33983c28, move d_rcu from overlapping d_child to overlapping d_alias;
    //SLES 12.1 (3.12.49) back port it too
    dentry = hlist_entry(p, struct dentry, d_u.d_alias);
#else
    dentry = hlist_entry(p, struct dentry, d_alias);
#endif
我遇到的问题是,如果我使用KERNEL_版本(3,16,0),它适用于3.16.0-69,但在3.16.0-30时中断。如何引用内核的错误修复部分,本例中的69或30。我试过这个,但它不起作用

#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,16,0-31) || LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) || LINUX_VERSION_CODE == KERNEL_VERSION(3,12,49) || LINUX_VERSION_CODE == KERNEL_VERSION(3,16,67)
我正在尝试正确地修复它,因为我必须维护它,直到供应商修复它。

根据评论

(LINUX_VERSION_CODE == KERNEL_VERSION(3,16,0) && UTS_UBUNTU_RELEASE_ABI > 30) 
我会回答我的问题

我还要补充一点

#include <generated/utsrelease.h>. 
#包括。

一个缺点是补丁级别对于发行版是唯一的。i、 在这个例子中,Ubuntu的值是整数。你不能将这么小的版本与这个宏进行比较,这让我做了以下工作<代码>(LINUX版本代码>=内核版本(3,16,0)和UTS UBUNTU版本ABI>30)。不确定这是否是最好的方法是否必须在编译时完成?如果需要在编译时完成(而不是像@stephenc01所提到的那样,进行一些特定于发行版的测试)。据我所知,内核版本>=3.18.1 | |版本>=3.12.37&&version<3.13.0 | |版本>=3.14.40&&version<3.15.0 | |版本==3.16.7&&UTS|UBUNTU u|u发行版| ABI>=31中包含了修复程序。