【问题标题】:insmod: error when inserting DPDK igb_uio.ko moduleinsmod:插入 DPDK igb_uio.ko 模块时出错
【发布时间】:2019-08-28 14:31:57
【问题描述】:

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

  • igb_uio:加载树外模块会污染内核。
  • 警告:在没有启用 retpoline 的编译器的情况下构建的模块“igb_uio”可能会影响 Spectre v2 缓解
  • igb_uio:模块验证失败:签名和/或 缺少所需的密钥 - 污染内核。
  • igb_uio:不同意 符号版本 __uio_register_device
  • igb_uio:未知符号 __uio_register_device (err -22) ...

这发生在我对操作系统和内核做了一些补丁之后。补丁后内核版本为: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

【问题讨论】:

  • 当我使用 CentOS 7.6 时,也有同样的问题。

标签: dpdk


【解决方案1】:

要插入igb_uio 模块,您必须先插入uio 模块。然后,插入igb_uio 就可以正常工作了。

无论如何,我建议使用 VFIO 而不是 igb_uio,除非您特别需要 igb_uio。

另外,如果您正在构建自定义内核,您应该添加相关的头文件/模块路径,以确保针对此自定义内核构建模块有效。 (意思是编译器做/usr/src/linux-headers-$(uname -r)/时,路径必须存在)

【讨论】:

  • 当我使用 igb_uio 时,我确实添加了:modprobe uio, insmod .../igb_uio.ko。对于 VFIO,我试了一下,文件 vfio-pci.ko 位于 /lib/modules/$(uname -r)/kenel/drivers/vfio/pci 文件夹中。我叫 modprobe vfio-pci。从状态中,我可以看到:0000:01:00.2 'Ethernet Controller X710 for 10GbE SFP+ 1572' if=ens11f2 drv=i40e used=igb_uio,vfio-pci。然后我绑定vfio-pci:./bind.py --bind=vfio-pci 0000:01:00.2。它未能绑定。从/var/log/message,我得到这个错误:Sep 19 17:38:48 r2 kernel: vfio-pci: probe of 0000:01:00.2 failed with error -22
  • 如果您在插入 VFIO 模块时收到 -22 错误,则说明您没有启用虚拟化。
【解决方案2】:

您需要针对正确的内核头文件构建 igb_uio 模块。如果您修补/更新了内核,那么您应该对标头执行相同的操作。如果您的标头已修补但仍然出现错误,请尝试像这样编译它:

RTE_KERNELDIR=/path/to/headers make -j

【讨论】:

    【解决方案3】:

    据我所知,

    此错误源于内核开发包与当前内核的不匹配或不足。

    如果当前内核版本与kernel-devel不一致, /lib/modules/$(uname -r)/ 无法正确生成。 在我的例子中,我工作的内核是 4.13.12-1.el7.elrepo.x86_64,但 kernel-devel 数据包属于 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 编译没有错误。

    【讨论】:

      猜你喜欢
      • 2013-03-28
      • 1970-01-01
      • 2016-03-26
      • 2016-06-27
      • 2015-01-15
      • 1970-01-01
      • 2022-12-30
      • 2013-07-07
      • 1970-01-01
      相关资源
      最近更新 更多