如何在 Ubuntu 或 Debian 上下载并安装 ixgbe 驱动程序
问题:我想为我的 Intel 10 Gigabit 以太网卡下载并安装最新的
ixgbe
驱动程序。如何在 Ubuntu(或 Debian)上安装 ixgbe 驱动程序?
ixgbe
驱动程序支持 Intel 的 PCI Express 10 Gigabit (10G) 网络接口卡(例如 82598
、82599
、x540
)。现代 Linux 发行版的标准内核已经附带了 ixgbe 驱动程序作为可加载模块。但是,在某些情况下,您可能需要自行编译和安装 ixgbe 驱动程序。例如,您可能想尝试最新 ixgbe
驱动程序的新功能。此外,库存内核中默认 ixgbe 驱动程序的问题是它不允许您自定义许多驱动程序参数。如果您想要完全自定义版本的 ixgbe 设备驱动程序(例如 RSS、多队列、中断限制、SR-IOV 等),则需要从源代码手动编译 ixgbe 驱动程序。
以下是如何在 Ubuntu、Debian 或其衍生版本上下载并安装 ixgbe 驱动程序。对于基于 RHEL/CentOS 的系统,请参阅此指南。
第一步:安装先决条件
作为先决条件,安装匹配的内核头文件和开发包。
$ sudo apt-get install linux-headers-$(uname -r)
$ sudo apt-get install gcc make
第二步:编译Ixgbe驱动
下载最新 ixgbe
驱动程序的源代码。
$ wget http://sourceforge.net/projects/e1000/files/ixgbe%20stable/3.23.2/ixgbe-3.23.2.tar.gz
编译ixgbe
驱动程序如下。
$ tar xvfvz ixgbe-3.23.2.tar.gz
$ cd ixgbe-3.23.2/src
$ make
第三步:检查 Ixgbe 驱动程序
编译完成后,您将在 ixgbe-3.23.2/src
目录中看到创建的 ixgbe.ko
。这是将被加载到内核中的 ixgbe 设备驱动程序。
使用modinfo
命令查看该内核模块的信息。请注意,您需要指定模块的(相对/绝对)路径(例如,./ixgbe.ko
或 /home/linux教程/ixgbe/ixgbe-3.23.2/src/ixgbe.ko
)。输出将显示 ixgbe 驱动程序的版本。
$ modinfo ./ixgbe.ko
filename: /home/linux教程/ixgbe/ixgbe-3.23.2/src/ixgbe.ko
version: 3.23.2
license: GPL
description: Intel(R) 10 Gigabit PCI Express Network Driver
author: Intel Corporation,
srcversion: 2ADA5E537923E983FA9DAE2
alias: pci:v00008086d00001560sv*sd*bc*sc*i*
alias: pci:v00008086d00001558sv*sd*bc*sc*i*
alias: pci:v00008086d0000154Asv*sd*bc*sc*i*
alias: pci:v00008086d00001557sv*sd*bc*sc*i*
alias: pci:v00008086d0000154Fsv*sd*bc*sc*i*
alias: pci:v00008086d0000154Dsv*sd*bc*sc*i*
alias: pci:v00008086d00001528sv*sd*bc*sc*i*
alias: pci:v00008086d000010F8sv*sd*bc*sc*i*
alias: pci:v00008086d0000151Csv*sd*bc*sc*i*
alias: pci:v00008086d00001529sv*sd*bc*sc*i*
alias: pci:v00008086d0000152Asv*sd*bc*sc*i*
alias: pci:v00008086d000010F9sv*sd*bc*sc*i*
alias: pci:v00008086d00001514sv*sd*bc*sc*i*
alias: pci:v00008086d00001507sv*sd*bc*sc*i*
alias: pci:v00008086d000010FBsv*sd*bc*sc*i*
alias: pci:v00008086d00001517sv*sd*bc*sc*i*
alias: pci:v00008086d000010FCsv*sd*bc*sc*i*
alias: pci:v00008086d000010F7sv*sd*bc*sc*i*
alias: pci:v00008086d00001508sv*sd*bc*sc*i*
alias: pci:v00008086d000010DBsv*sd*bc*sc*i*
alias: pci:v00008086d000010F4sv*sd*bc*sc*i*
alias: pci:v00008086d000010E1sv*sd*bc*sc*i*
alias: pci:v00008086d000010F1sv*sd*bc*sc*i*
alias: pci:v00008086d000010ECsv*sd*bc*sc*i*
alias: pci:v00008086d000010DDsv*sd*bc*sc*i*
alias: pci:v00008086d0000150Bsv*sd*bc*sc*i*
alias: pci:v00008086d000010C8sv*sd*bc*sc*i*
alias: pci:v00008086d000010C7sv*sd*bc*sc*i*
alias: pci:v00008086d000010C6sv*sd*bc*sc*i*
alias: pci:v00008086d000010B6sv*sd*bc*sc*i*
depends: ptp,dca,vxlan
vermagic: 3.11.0-19-generic SMP mod_unload modversions
parm: InterruptType:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default IntMode (deprecated) (array of int)
parm: IntMode:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default 2 (array of int)
parm: MQ:Disable or enable Multiple Queues, default 1 (array of int)
parm: DCA:Disable or enable Direct Cache Access, 0=disabled, 1=descriptor only, 2=descriptor and data (array of int)
parm: RSS:Number of Receive-Side Scaling Descriptor Queues, default 0=number of cpus (array of int)
parm: VMDQ:Number of Virtual Machine Device Queues: 0/1 = disable, 2-16 enable (default=8) (array of int)
parm: max_vfs:Number of Virtual Functions: 0 = disable (default), 1-63 = enable this many VFs (array of int)
parm: VEPA:VEPA Bridge Mode: 0 = VEB (default), 1 = VEPA (array of int)
parm: InterruptThrottleRate:Maximum interrupts per second, per vector, (0,1,956-488281), default 1 (array of int)
parm: LLIPort:Low Latency Interrupt TCP Port (0-65535) (array of int)
parm: LLIPush:Low Latency Interrupt on TCP Push flag (0,1) (array of int)
parm: LLISize:Low Latency Interrupt on Packet Size (0-1500) (array of int)
parm: LLIEType:Low Latency Interrupt Ethernet Protocol Type (array of int)
parm: LLIVLANP:Low Latency Interrupt on VLAN priority threshold (array of int)
parm: FdirPballoc:Flow Director packet buffer allocation level:
1 = 8k hash filters or 2k perfect filters
2 = 16k hash filters or 4k perfect filters
3 = 32k hash filters or 8k perfect filters (array of int)
parm: AtrSampleRate:Software ATR Tx packet sample rate (array of int)
parm: FCoE:Disable or enable FCoE Offload, default 1 (array of int)
parm: LRO:Large Receive Offload (0,1), default 1 = on (array of int)
parm: allow_unsupported_sfp:Allow unsupported and untested SFP+ modules on 82599 based adapters, default 0 = Disable (array of int)
第四步:测试 Ixgbe 驱动程序
在测试新模块之前,您需要删除旧版本的 ixgbe 模块(如果内核中存在):
$ sudo rmmod ixgbe
此外,最新的 ixgbe 模块可能依赖于其他模块(例如,ptp、dca、vxlan),因此请确保首先加载上述 modinfo 输出中的 depends:
部分中列出的所有模块。
$ sudo modprobe ptp
$ sudo modprobe dca
$ sudo modprobe vxlan
现在继续使用 insmod
命令将新构建的 ixgbe
模块插入内核中。确保指定模块的路径。
$ sudo insmod ./ixgbe.ko
如果上述命令成功运行,则不会显示任何消息。
如果需要,您可以尝试传递其他参数。例如,将 RSS 队列数设置为 16:
$ sudo insmod ./ixgbe.ko RSS=16
查看/var/log/kern.log
以查看ixgbe
驱动程序是否已成功激活。在日志中查找 Intel(R) 10 Gigabit PCI Express Network Driver
。 ixgbe
版本应与前面显示的 modinfo
的输出匹配。
Sep 18 14:48:52 spongebob kernel: [684717.906254] Intel(R) 10 Gigabit PCI Express Network Driver - version 3.22.3

第五步:安装 Ixgbe 驱动程序
验证新的 ixgbe 驱动程序已成功加载后,最后一步就是在系统上安装该驱动程序。
$ sudo make install
然后,ixgbe.ko
将安装在 /lib/modules/
下。
从此时起,您可以使用 modprobe
命令加载 ixgbe
驱动程序,如下所示。请注意,您不再需要指定模块的路径,而只需使用模块的名称 ixgbe
而不带 .ko
。
$ sudo modprobe ixgbe
如果您希望启动时自动加载ixgbe
驱动程序,可以将ixgbe
添加到/etc/modules
末尾。
请注意,如果升级到新内核,则需要针对新内核重新构建已安装的 ixgbe 驱动程序。您可以使用 DKMS 自动重新构建 ixgbe 驱动程序。有关更多详细信息,请参阅 DKMS 教程。