netlink:GNEL_ID_GENERATE 定义已从 RHEL7.5 内核库中删除

netlink:GNEL_ID_GENERATE 定义已从 RHEL7.5 内核库中删除

我们有一个内核模块,可以很好地为 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)。

相关内容