Compile and install the ixgbe driver tutorial in Debian Linux

  • 2020-05-13 04:08:52
  • OfStack

Intel's 10G network CARDS (e.g., 82598, 82599, x540) are supported by ixgbe drivers. Modern Linux distributions already come with the ixgbe driver, which is used through loadable modules. However, there are situations where you want to install the ixgbe driver on your own machine, such as when you want to experience the latest features of the ixbge driver. Also, one of the problems with the ixgbe driver that comes with the kernel by default is that you are not allowed to customize the driver's parameters. If you want a fully customized ixgbe driver (such as RSS, multiple queues, interrupt thresholds, etc.), you need to manually compile the ixgbe driver from the source.

Here's how to download a tutorial to install ixgbe drivers in Ubuntu, Debian, or a derivative of them.
Step 1: installation requirements

Before installing, you need to install the matching kernel header file and development kit.


  $ sudo apt-get install linux-headers-$(uname -r)
  $ sudo apt-get install gcc make

Step 2: compile the Ixgbe driver

Download the source from the latest ixgbe driver.


  $ wget http://sourceforge.net/projects/e1000/files/ixgbe%20stable/3.23.2/ixgbe-3.23.2.tar.gz

Compile the ixgbe driver as follows.


  $ tar xvfvz ixgbe-3.23.2.tar.gz
  $ cd ixgbe-3.23.2/src
  $ make

Step 3: check the Ixgbe driver

After compiling, you will see that ixgbe.ko has been created in the ixgbe-3.23.2 /src directory. This is the ixgbe driver that will be loaded into the kernel.

Check the kernel module information with the modinfo command. Pay attention to what you need to specify the absolute path module files (for example. / ixgbe. ko or/home/xmodulo/ixgbe/ixgbe - 3.23.2 / src/ixgbe ko). The version of the ixgbe kernel is displayed in the output.


  $ modinfo ./ixgbe.ko


filename: /home/xmodulo/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
  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)

Step 4: test the Ixgbe driver

Before testing the new module, you need to remove the old version of the ixgbe module if it already exists in your kernel.


  $ sudo rmmod ixgbe

The newly compiled ixgbe module is then inserted using the insmod command. Be sure to specify the absolute path of a module.


  $ sudo insmod ./ixgbe.ko

If the above command runs successfully, no information will be displayed.

If you need to, you can try adding extra parameters. For example, set the number of queues of RSS to 16:


  $ sudo insmod ./ixgbe.ko RSS=16

Check/var log/kern log to see if ixgbe drive successful activation. See "Intel(R) 10 Gigabit PCI Express Network Network Driver" in the log. The version information of ixgbe should be the same as the previous modinfo display.

Sep 18 14:48:52 spongebob kernel: [684717.906254] Intel(R) 10 Gigabit PCI Express Network Driver - version 3.22.3

Step 5: install the Ixgbe driver

Once you have verified that the new ixgbe driver can be loaded successfully, the last step is to install the driver on your system.


  $ sudo make install

ixgbe. ko will be installed in the/lib modules / / kernel/drivers/net/ethernet/intel/ixgbe.

From this step, you can load the ixgbe driver with the modprobe command below. Note that you no longer have to specify an absolute path.


  $ sudo modprobe ixgbe

If you want to load the ixgbe driver at startup, you can add "ixgbe" at the end of /etc/modules.


Related articles: