C 预处理器 KERNEL_VERSION 引用错误修复

标签 c linux compilation linux-kernel

我正在尝试修复在内核 3.16.0-69 中引用 d_alias 或 d_u.d_alias 的驱动程序。该宏查找内核版本并使用合适的版本。

#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_VERSION(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>. 

一个缺点是补丁级别对于发行版是唯一的。即本例中的 Ubuntu

关于C 预处理器 KERNEL_VERSION 引用错误修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36676670/

相关文章:

c - MPIR 编码错误

linux - 有没有办法在任何 SSH 连接/断开连接上运行脚本?

c - 如何创建一个函数以返回 C 中的下一行输入

c 编程 : need fresh eyes to look at this [demo code ! = 作业]

php - 执行 gethostbyname 最多 1 秒

c++ - Buildroot 包需要一个带 C++ 的工具链,大文件错误

c - 解决对 'xmlNewTextWriterFilename' 的 undefined reference

java - 将 multidex apk 部署到 Fabric Beta 时出现 android ART NoClassDefFoundError

c++ - g++ 找不到已安装的库

比较整数函数 SIGSEGV