insmod: 插入 DPDK igb_uio.ko 模块时出错
insmod: error when inserting DPDK igb_uio.ko module
我用的是centos 7.3。当我 运行 insmod igb_uio.ko 时,我在 /var/logs/message 中收到此错误:
- igb_uio:加载树外模块污染内核。
- 警告:模块“igb_uio”构建时未启用 retpoline 编译器,可能会影响 Spectre v2 缓解措施
- igb_uio:模块验证失败:签名and/or
缺少必需的密钥 - 污染内核。
- igb_uio: 不同意
symol 的版本 __uio_register_device
- igb_uio: 未知符号
__uio_register_device(错误-22)...
这发生在我对 OS 和内核做了一些补丁之后。打补丁后内核版本为:3.10.0.957.21.3.e17.x86_64
补丁之前,效果很好。该补丁针对某些 TCP 严重漏洞。我更喜欢 运行 补丁。
我用的是DPDK 17.08.1,我也试过18.11.2。两者都得到相同的错误。
我尝试在打补丁后从源代码重建。重建得到错误:(在补丁之前,构建成功。):
- make: *** /lib/modules/3.10.0-957.21.3.el7.x86_64/build: 没有那个文件
或目录。停止。
- make[6]: *** [igb_uio.ko] 错误 2
- 制作[5]:***
[igb_uio] 错误 2
- make[4]: *** [linux] 错误 2
- 制作[3]:***
[内核] > 错误 2
- make[2]: *** [all] 错误 2
- 制作[1]:***
[pre_install]错误 2
- 制作:
*** [安装] 错误 2
要插入igb_uio
模块,您必须先插入uio
模块。然后,插入 igb_uio
将正常工作。
无论如何,我建议使用 VFIO 而不是 igb_uio
,除非您特别需要 igb_uio
。
此外,如果您正在构建自定义内核,您应该添加相关的 header/module 路径,以确保针对此自定义内核构建模块的工作正常。 (意思是,当编译器执行 /usr/src/linux-headers-$(uname -r)/
时,路径必须存在)
您需要针对正确的内核 headers 构建 igb_uio 模块。如果你 patched/updated 内核那么你应该对 headers 做同样的事情。如果您的 headers 已打补丁,但您仍然遇到错误,请尝试像这样编译它:
RTE_KERNELDIR=/path/to/headers make -j
据我所知,
此错误是由于内核开发包与当前内核不匹配或不足造成的。
如果当前内核版本与kernel-devel不一致,
/lib/modules/$(uname -r)/
无法正确生成。
就我而言,我使用的内核是 4.13.12-1.el7.elrepo.x86_64,但是内核开发包属于 3.10.0-1160.31.1.el7.x86_64.
我的解决方案是通过
安装与当前内核一致的kernel-devel
yum update
yum install "kernel-devel-uname-r == $(uname -r)"
如果找不到数据包,可能需要使用 rpm 手动安装。就我而言,我 wget kernel-ml-devel-4.14.13-1.el7.elrepo.x86_64.rpm 数据包和
通过
删除旧的内核开发
yum remove kernel-headers-3.10.0-1160.31.1.el7.x86_64
yum remove kernel-devel-3.10.0-1160.31.1.el7.x86_64
并且我通过
安装了正确的开发包
sudo rpm -i kernel-ml-devel-4.13.12-1.el7.elrepo.x86_64.rpm
最后,在我的例子中,dpdk 编译没有错误。
我用的是centos 7.3。当我 运行 insmod igb_uio.ko 时,我在 /var/logs/message 中收到此错误:
- igb_uio:加载树外模块污染内核。
- 警告:模块“igb_uio”构建时未启用 retpoline 编译器,可能会影响 Spectre v2 缓解措施
- igb_uio:模块验证失败:签名and/or 缺少必需的密钥 - 污染内核。
- igb_uio: 不同意 symol 的版本 __uio_register_device
- igb_uio: 未知符号 __uio_register_device(错误-22)...
这发生在我对 OS 和内核做了一些补丁之后。打补丁后内核版本为:3.10.0.957.21.3.e17.x86_64
补丁之前,效果很好。该补丁针对某些 TCP 严重漏洞。我更喜欢 运行 补丁。
我用的是DPDK 17.08.1,我也试过18.11.2。两者都得到相同的错误。
我尝试在打补丁后从源代码重建。重建得到错误:(在补丁之前,构建成功。):
- make: *** /lib/modules/3.10.0-957.21.3.el7.x86_64/build: 没有那个文件 或目录。停止。
- make[6]: *** [igb_uio.ko] 错误 2
- 制作[5]:*** [igb_uio] 错误 2
- make[4]: *** [linux] 错误 2
- 制作[3]:*** [内核] > 错误 2
- make[2]: *** [all] 错误 2
- 制作[1]:*** [pre_install]错误 2
- 制作: *** [安装] 错误 2
要插入igb_uio
模块,您必须先插入uio
模块。然后,插入 igb_uio
将正常工作。
无论如何,我建议使用 VFIO 而不是 igb_uio
,除非您特别需要 igb_uio
。
此外,如果您正在构建自定义内核,您应该添加相关的 header/module 路径,以确保针对此自定义内核构建模块的工作正常。 (意思是,当编译器执行 /usr/src/linux-headers-$(uname -r)/
时,路径必须存在)
您需要针对正确的内核 headers 构建 igb_uio 模块。如果你 patched/updated 内核那么你应该对 headers 做同样的事情。如果您的 headers 已打补丁,但您仍然遇到错误,请尝试像这样编译它:
RTE_KERNELDIR=/path/to/headers make -j
据我所知,
此错误是由于内核开发包与当前内核不匹配或不足造成的。
如果当前内核版本与kernel-devel不一致,
/lib/modules/$(uname -r)/
无法正确生成。
就我而言,我使用的内核是 4.13.12-1.el7.elrepo.x86_64,但是内核开发包属于 3.10.0-1160.31.1.el7.x86_64.
我的解决方案是通过
安装与当前内核一致的kernel-develyum update
yum install "kernel-devel-uname-r == $(uname -r)"
如果找不到数据包,可能需要使用 rpm 手动安装。就我而言,我 wget kernel-ml-devel-4.14.13-1.el7.elrepo.x86_64.rpm 数据包和 通过
删除旧的内核开发yum remove kernel-headers-3.10.0-1160.31.1.el7.x86_64
yum remove kernel-devel-3.10.0-1160.31.1.el7.x86_64
并且我通过
安装了正确的开发包sudo rpm -i kernel-ml-devel-4.13.12-1.el7.elrepo.x86_64.rpm
最后,在我的例子中,dpdk 编译没有错误。