我们有一个内核模块,可以很好地为 RedHat 系列 Linux 发行版构建,直到最近的 RHEL7.5。
当尝试在 RHEL7.5 上构建时,我们遇到以下错误:
...错误:“GENL_ID_GENERATE”未声明...
读了一下,似乎这是自内核 4.11+ 以来的变化,但 RHEL7.5 是基于内核 3.10+ 的。发生了什么?
无论如何,我知道GENL_ID_GENERATE的值只是0。但是我可以使用use 0来替换宏吗?用户模式模块与该内核模块通信会出现问题吗?
或者,解决问题的正确方法应该是什么?有什么建议吗?
谢谢和问候, 维山
答案1
看着git 提交对于 netlink,4.11 版本中的结构似乎发生了一些变化:
首先,您可以.id
从初始化程序中完全省略该字段,genl_family
因为 Linux 已删除静态系列 ID。
同样,该genl_register_family_with_ops
功能不再使用。相反,作为Linux HOWTO 文档中提到了 netlink:
在 Linux 4.10 之前,请使用
genl_register_family_with_ops()
.在 4.10 及更高版本中,包括对结构的引用genl_ops
作为结构中的元素genl_family
(element.ops
),以及命令的数量 (element.n_ops
)。