You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在CentOS 7.4上编译旧版Intel i40e-1.5.23驱动遇错误求助

我之前在CentOS 7.4环境下折腾过i40e-1.5.23驱动的编译,正好和你的场景完全匹配——当时也是因为新版驱动砍了我需要的某个功能,不得不回退旧版本,踩了不少坑,给你分享下解决步骤:

解决CentOS 7.4(3.10.0-693内核)编译i40e-1.5.23驱动的问题

第一步:确认依赖完全匹配

虽然你已经装了Development Tools套件,但一定要确保kernel-devel版本和当前运行的内核完全一致,这是很多编译失败的根源:

  • 先核对版本:
    uname -r
    rpm -q kernel-devel
    
  • 如果输出不一致,立刻安装对应版本的内核头文件:
    yum install kernel-devel-$(uname -r)
    
  • CentOS 7.4默认的gcc 4.8.5完全适配i40e-1.5.23,不需要更换版本。

第二步:打内核兼容补丁(关键)

i40e-1.5.23是2016年的版本,而3.10.0-693是2018年的内核,两者之间有几处API调用的变化,必须修改后才能编译通过:

  1. 先解压驱动包进入源码目录:
    tar xzf i40e-1.5.23.tar.gz
    cd i40e-1.5.23/src
    
  2. 修改i40e_main.c中的锁API:
    搜索netif_tx_lock_bh,找到类似下面的代码:
    netif_tx_lock_bh(adapter->vsi->netdev);
    
    把它替换成:
    netif_tx_lock(adapter->vsi->netdev);
    
    原因是3.10内核后期版本废弃了netif_tx_lock_bh,统一使用netif_tx_lock。
  3. 检查i40e_sysfs.c中的设备文件移除调用:
    搜索device_remove_file,确保第二个参数是struct device_attribute *类型,比如如果看到:
    device_remove_file(&pdev->dev, &dev_attr_max_vfs);
    
    要改成:
    device_remove_file(&pdev->dev, &dev_attr_max_vfs.attr);
    
    新内核要求这里传入的是属性结构体里的attr成员。

第三步:编译安装驱动

完成补丁后,正常执行编译流程:

make clean  # 务必清理旧编译残留
make
make install

然后加载新驱动:

rmmod i40e  # 先卸载旧驱动(如果已加载)
modprobe i40e

如果加载时提示依赖错误,执行depmod -a更新模块依赖后再重试。

验证驱动版本

安装完成后可以确认驱动版本是否正确:

modinfo i40e | grep version

输出应该显示version: 1.5.23。

内容的提问来源于stack exchange,提问作者VolCoM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:28:32