在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调用的变化,必须修改后才能编译通过:
- 先解压驱动包进入源码目录:
tar xzf i40e-1.5.23.tar.gz cd i40e-1.5.23/src - 修改
i40e_main.c中的锁API:
搜索netif_tx_lock_bh,找到类似下面的代码:
把它替换成:netif_tx_lock_bh(adapter->vsi->netdev);
原因是3.10内核后期版本废弃了netif_tx_lock(adapter->vsi->netdev);netif_tx_lock_bh,统一使用netif_tx_lock。 - 检查
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
相关产品推荐
相关产品推荐

