在本知识库文章中,我们以 X710 NIC 为例。所有其他 linux 源代码都类似。
安装所需的软件包进行编译。
[root@rhel87 ~]# yum groupinstall "Development Tools"
[root@rhel87 ~]# yum install kernel-devel-$(uname -r)
1.从戴尔支持门户下载驱动程序。
2.提取并获取源代码。
[root@rhel87 i40e]# tar xf Intel_LAN_21.5.0_Linux_Source_A02.tar.gz
[root@rhel87 i40e]# cd Source/base_driver/
[root@rhel87 base_driver]# tar xf i40e-2.20.12.tar.gz
[root@rhel87 base_driver]# cd i40e-2.20.12/
[root@rhel87 i40e-2.20.12]# ls
COPYING i40e.7 i40e.spec pci.updates README scripts src SUMS
root@rhel87 i40e-2.20.12]# cd src/
[root@rhel87 src]# ls
auxiliary.c i40e_client.h i40e_diag.c i40e_hmc.c i40e_ptp.c i40e_virtchnl_pf.c kcompat_impl.h linux
auxiliary_compat.h i40e_common.c i40e_diag.h i40e_hmc.h i40e_register.h i40e_virtchnl_pf.h kcompat_overflow.h Makefile
common.mk i40e_dcb.c i40e_ethtool.c i40e_lan_hmc.c i40e_status.h i40e_xsk.c kcompat_rhel_defs.h Module.supported
i40e_adminq.c i40e_dcb.h i40e_ethtool_stats.h i40e_lan_hmc.h i40e_trace.h i40e_xsk.h kcompat_sles_defs.h virtchnl.h
i40e_adminq_cmd.h i40e_dcb_nl.c i40e_filters.c i40e_main.c i40e_txrx.c kcompat.c kcompat_std_defs.h
i40e_adminq.h i40e_ddp.c i40e_filters.h i40e_nvm.c i40e_txrx_common.h kcompat_defs.h kcompat_ubuntu_defs.h
i40e_alloc.h i40e_debugfs.c i40e.h i40e_osdep.h i40e_txrx.h kcompat_gcc.h kcompat_vfd.c
i40e_client.c i40e_devids.h i40e_helper.h i40e_prototype.h i40e_type.h kcompat.h kcompat_vfd.h
3.编译驱动程序。
[root@rhel87 src]# make
*** The target kernel has CONFIG_MODULE_SIG_ALL enabled, but
*** the signing key cannot be found. Module signing has been
*** disabled for this build.
make[1]: Entering directory '/usr/src/kernels/4.18.0-80.el8.x86_64'
/root/i40e/Source/base_driver/i40e-2.20.12/src/Makefile:38: 2
CC [M] /root/i40e/Source/base_driver/i40e-2.20.12/src/i40e_main.o
...skipped...
LD [M] /root/i40e/Source/base_driver/i40e-2.20.12/src/i40e.o
CC [M] /root/i40e/Source/base_driver/i40e-2.20.12/src/auxiliary.o
Building modules, stage 2.
/root/i40e/Source/base_driver/i40e-2.20.12/src/Makefile:38: 2
MODPOST 2 modules
CC /root/i40e/Source/base_driver/i40e-2.20.12/src/auxiliary.mod.o
LD [M] /root/i40e/Source/base_driver/i40e-2.20.12/src/auxiliary.ko
CC /root/i40e/Source/base_driver/i40e-2.20.12/src/i40e.mod.o
LD [M] /root/i40e/Source/base_driver/i40e-2.20.12/src/i40e.ko
make[1]: Leaving directory '/usr/src/kernels/4.18.0-80.el8.x86_64'
[root@rhel87 src]# echo $?
0
[root@rhel87 src]# modinfo ./i40e.ko
filename: /root/i40e/Source/base_driver/i40e-2.20.12/src/./i40e.ko
version: 2.20.12
license: GPL
description: Intel(R) 40-10 Gigabit Ethernet Connection Network Driver
author: Intel Corporation, <e1000-devel@lists.sourceforge.net>
rhelversion: 8.0
srcversion: A92CB6A1AD515E14A84C283
alias: pci:v00008086d0000158Bsv*sd*bc*sc*i*
...skipped...
alias: pci:v00008086d00001572sv*sd*bc*sc*i*
depends: auxiliary
name: i40e
vermagic: 4.18.0-80.el8.x86_64 SMP mod_unload modversions
parm: debug:Debug level (0=none,...,16=all) (int)
parm: l4mode:L4 cloud filter mode: 0=UDP,1=TCP,2=Both,-1=Disabled(default) (int)
[root@rhel87 src]#
3a.问题:如果您在运行命令“make”时看到以下错误
common.mk:82: *** Kernel header files not in any of the expected locations.
common.mk:83: *** Install the appropriate kernel development package, e.g.
common.mk:84: *** kernel-devel, for building kernel modules and try again. Stop.
确保软件包“kernel-devel”已安装相同的内核版本。(第一步)
[root@rhel87 ~]# yum install kernel-devel-$(uname -r)
3b。问题:在安装之前测试驱动程序。如果收到以下错误“Required key not available”,则表示服务器已启用“Secure Boot”,不允许加载自编译驱动程序。您可以引导至 BIOS 以禁用“安全引导”。
[root@rhel87 src]# modprobe -r i40e
[root@rhel87 src]# insmod ./i40e.ko
insmod: ERROR: could not insert module ./i40e.ko: Required key not available
4.将驱动程序安装到此服务器。
[root@rhel87 src]# make install
5.重新启动服务器,新驱动程序将在引导后自动加载。
额外:
如果您想要基于此驱动程序创建 RPM 以安装到其他服务器(必须在目标服务器上为相同的内核版本),请运行以下命令以创建 rpm。
[root@rhel87 src]# cd ../..
[root@rhel87 base_driver]# ls -lh i40e-2.20.12.tar.gz
-rw-r--r-- 1 5714316 1049089 673K Jul 11 2022 i40e-2.20.12.tar.gz
[root@rhel87 base_driver]# rpmbuild -tb i40e-2.20.12.tar.gz
...skipped...
[root@rhel87 base_driver]# ls /root/rpmbuild/RPMS/x86_64/
将 rpm 复制到要安装的目标服务器。