我正在编写一个内核模块,我再次测试我的LKM时发现了一个问题。
uname kernels print 3.10.0-123.13.2.el7.x86_64,我正在使用这个-a -headers /usr/src/kernels/3.10.0-123.13.2.el7.x86_64/编译我的KM,并使用LINUX_VERSION_CODE来定义我的代码节。
我的问题是,编译失败是因为内核头包含了在更多新内核版本中添加的代码,但LINUX_VERSION_CODE返回3.10。
例如,nf_hookfn在内核3.13中被修改了,而我的头文件中已经有了这个修改。
我能做什么?
发布于 2015-01-04 17:17:11
LINUX_VERSION_CODE返回Linux版本3.10, CentOS Linux版本3.10.0-123.13.2.el7。从理论上讲,他们不应该应用API更改的补丁...您刚刚发现了原因:)
如果在CentOS上可以更改稳定的API,他们应该提供类似于CentOS的LINUX_VERSION_CODE的东西。
您可以定义自己的预处理器变量,并在编译时根据要使用的内核版本(标准3.10或CentOS 3.10)断言或取消断言它。
#ifdef CENTOS_PATCH /* CentOS 3.10 */
....
#else /* Standard 3.10 */
....
#endif但是,您必须管理两个不同的二进制文件
发布于 2019-06-08 00:22:16
Centos为此提供了一些有用的宏:
#if RHEL_RELEASE_CODE > RHEL_RELEASE_VERSION(7,2)
//
#else
//
#endif是的,Centos定制内核从最近的Linux内核中拉出了一些变化。
https://stackoverflow.com/questions/27761061
复制相似问题