我正在冲洗内核模块,发现再次测试centos 7的LKM时出现问题。
uname -print 3.10.0-123.13.2.el7.x86_64,我正在使用此内核头文件/usr/src/kernels/3.10.0-123.13.2.el7.x86_64/并使用LINUX_VERSION_CODE来编译我的KM定义我的代码段。
我的问题是,编译失败,因为内核头文件包含在更多新内核版本中添加的代码,但LINUX_VERSION_CODE返回3.10。
例如,nf_hookfn是在内核3.13中修改的,我的 header 中已经有此修改。
我能做些什么?
最佳答案
LINUX_VERSION_CODE
返回CentOS Linux版本3.10.0-123.13.2.el7的Linux版本3.10和而不是。从理论上讲,他们不应该使用API更改来应用补丁...您刚刚发现了原因:)
如果可以在CentOS上更改稳定的API,则它们应该为CentOS提供类似于LINUX_VERSION_CODE
的内容。
您可以定义自己的预处理器变量,并在编译时根据要使用的内核版本(标准3.10或CentOS 3.10)声明或取消声明该变量。
#ifdef CENTOS_PATCH /* CentOS 3.10 */
....
#else /* Standard 3.10 */
....
#endif
但是然后您必须管理两个不同的二进制文件