insmod: 插入 DPDK igb_uio.ko 模块时出错

insmod: error when inserting DPDK igb_uio.ko module

我用的是centos 7.3。当我 运行 insmod igb_uio.ko 时,我在 /var/logs/message 中收到此错误:

这发生在我对 OS 和内核做了一些补丁之后。打补丁后内核版本为:3.10.0.957.21.3.e17.x86_64

补丁之前,效果很好。该补丁针对某些 TCP 严重漏洞。我更喜欢 运行 补丁。

我用的是DPDK 17.08.1,我也试过18.11.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 编译没有错误。