gpt4 book ai didi

centos - 在 CentOS 7 中使用更改的 API 构建内核模块

转载 作者:行者123 更新时间:2023-12-04 19:35:18 25 4
gpt4 key购买 nike

我编写 NIC 模块驱动程序并实现它的基本功能,如 ndo_open , ndo_stop , ndo_start_xmit ...
有时 Linux Kernel API 在最近的版本中会发生变化。像 LINUX_VERSION_CODE 这样的宏帮助将模块的代码采用到最新的 Linux 内核版本。在 CentOS(RHEL) 中,我遇到了更改 MTU 的函数名称NIC 与普通 Linux 内核不同。在普通 Linux 内核中 v.3.10.0它的原型(prototype)是:

int         (*ndo_change_mtu)(struct net_device *dev,
int new_mtu);
但在 CentOS 7.6.1810 3.10.0-957.el7.x86_64这是:
RH_KABI_RENAME(int      (*ndo_change_mtu),
int (*ndo_change_mtu_rh74))(struct net_device *dev,
int new_mtu);
所以我必须使用 ndo_change_mtu_rh74而不是 ndo_change_mtu正如我预期的那样工作。
是否可以使用一些宏在不同的 Linux Kernel 版本之间采用模块的代码而无需修补代码以防止针对 CentOS(RHEL) Linux Kernels 的编译错误?

最佳答案

感谢@omajid,他向我提供了有关 kni: Fix build on RHEL 8 的主题.下一个宏解决了我的问题:

#if (defined(RHEL_RELEASE_CODE) && \
(RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7, 5)))
(RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(7, 5)) && \
(RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(8, 0)))
#define ndo_change_mtu ndo_change_mtu_rh74
#endif

关于centos - 在 CentOS 7 中使用更改的 API 构建内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70937968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com