Intel has done a great job at releasing new and improving hardware every year, but new technology is not always compatible with older technology. In this blog post we will show you how to get the Intel i219 Ethernet controller to work with CentOS 6.

The Problem

After a clean installation, the first thing any user would do is to connect to the internet. With the X11SAE motherboard which comes with both Intel i210 and i219 Ethernet controllers, only the i210 controller was detected by CentOS 6.5.

[root@localhost ~]# lspci | grep net
00:1f.6 Ethernet controller: Intel Corporation Device 15b7 (rev 31)
06:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)

When we use the command “ifconfig” to check the possible network connections, we get:

eth0 Link encap:Ethernet HWaddr 0C:C4:7A:B3:F1:6B
inet6 addr: fe80::ec4:7aff:feb3:f16b/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:2233 errors:0 dropped:0 overruns:0 frame:0
TX packets:109 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:190202 (185.7 KiB) TX bytes:9896 (9.6 KiB)
Memory:df100000-df17ffff

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:64 errors:0 dropped:0 overruns:0 frame:0
TX packets:64 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4190 (4.0 KiB) TX bytes:4190 (4.0 KiB)

Basically the system is not seeing the i219 controller and only shows one controller which is the i210.

 

Prerequisites

The first thing we have to do is to update our kernel drivers.

Warning, this step may damage your OS and/or any other configurations you have!

You can update your kernel drivers by using the following command:

yum install make gcc kernel-devel

and confirming the installation.

After restarting the OS you can validate the kernel installation by using the command:

ls /usr/src/kernels/$(uname -r)

You should get a list of files shown. If you do not then your kernel installation most likely failed.

We also need to download the actual drivers which are on this page:

https://downloadcenter.intel.com/product/71307/Intel-Ethernet-Connection-I218-LM

Ignore the fact that the drivers are technically for the i218 controller.

 

Installation

Now that we have the setup finished we can install the drivers. You should have downloaded a file that is named something like e1000e.x.x.x. We use the following commands to extract and compile:

[root@localhost Downloads]# rm e1000e-3.3.3 -rf
[root@localhost Downloads]# tar -xf e1000e-3.3.3.tar

And go into the src folder:

[root@localhost Downloads]# cd e1000e-3.3.3/src/

and then install with make:

[root@localhost src]# make install

If you get an error saying you do not have make or cannot find make, then you will need to install it using the command:

yum install make

However, this should not be an issue unless you skipped steps as the kernel-devel step installs make.

We will end up with results similar to the following:

[root@localhost src]# make install
make -C /lib/modules/2.6.32-573.22.1.el6.x86_64/build SUBDIRS=/root/Downloads/e1000e-3.3.3/src modules
make[1]: Entering directory `/usr/src/kernels/2.6.32-573.22.1.el6.x86_64′
CC [M] /root/Downloads/e1000e-3.3.3/src/netdev.o
CC [M] /root/Downloads/e1000e-3.3.3/src/ethtool.o
CC [M] /root/Downloads/e1000e-3.3.3/src/param.o
CC [M] /root/Downloads/e1000e-3.3.3/src/82571.o
CC [M] /root/Downloads/e1000e-3.3.3/src/ich8lan.o
CC [M] /root/Downloads/e1000e-3.3.3/src/80003es2lan.o
CC [M] /root/Downloads/e1000e-3.3.3/src/mac.o
CC [M] /root/Downloads/e1000e-3.3.3/src/nvm.o
CC [M] /root/Downloads/e1000e-3.3.3/src/phy.o
CC [M] /root/Downloads/e1000e-3.3.3/src/manage.o
CC [M] /root/Downloads/e1000e-3.3.3/src/kcompat.o
CC [M] /root/Downloads/e1000e-3.3.3/src/ptp.o
LD [M] /root/Downloads/e1000e-3.3.3/src/e1000e.o
Building modules, stage 2.
MODPOST 1 modules
CC /root/Downloads/e1000e-3.3.3/src/e1000e.mod.o
LD [M] /root/Downloads/e1000e-3.3.3/src/e1000e.ko.unsigned
NO SIGN [M] /root/Downloads/e1000e-3.3.3/src/e1000e.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.32-573.22.1.el6.x86_64′
gzip -c ../e1000e.7 > e1000e.7.gz
# remove all old versions of the driver
find /lib/modules/2.6.32-573.22.1.el6.x86_64 -name e1000e.ko -exec rm -f {} \; || true
find /lib/modules/2.6.32-573.22.1.el6.x86_64 -name e1000e.ko.gz -exec rm -f {} \; || true
install -D -m 644 e1000e.ko /lib/modules/2.6.32-573.22.1.el6.x86_64/updates/drivers/net/e1000e/e1000e.ko
/sbin/depmod -a 2.6.32-573.22.1.el6.x86_64 || true
install -D -m 644 e1000e.7.gz /usr/share/man/man7/e1000e.7.gz
man -c -P’cat > /dev/null’ e1000e || true
Formatting page, please wait…

Confirmation

Use the following command to show the kernel module:

[root@localhost Desktop]# lsmod | grep -i e1000e
e1000e 230782 0
ptp 9614 2 e1000e,igb

If you have similar results then you are almost done. We want to load the new module, which you can do by restarting the OS or using the “init 5” command. We then use the following command to see if the system detects the controller:

[root@localhost Desktop]# dmesg | grep -i e1000e

With results such as:

e1000e: Intel(R) PRO/1000 Network Driver – 3.2.5-k
e1000e: Copyright(c) 1999 – 2015 Intel Corporation.
e1000e 0000:00:1f.6: PCI INT A -> GSI 16 (level, low) -> IRQ 16
e1000e 0000:00:1f.6: setting latency timer to 64
e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
e1000e 0000:00:1f.6: irq 53 for MSI/MSI-X
e1000e 0000:00:1f.6: eth1: registered PHC clock
e1000e 0000:00:1f.6: eth1: (PCI Express:2.5GT/s:Width x1) 0c:c4:7a:b3:f1:6a
e1000e 0000:00:1f.6: eth1: Intel(R) PRO/1000 Network Connection
e1000e 0000:00:1f.6: eth1: MAC: 12, PHY: 12, PBA No: 010AFF-0FF
e1000e 0000:00:1f.6: irq 53 for MSI/MSI-X
e1000e 0000:00:1f.6: irq 53 for MSI/MSI-X

At this point the system will start detecting the Ethernet controller and you can use the commands at the start of this post to see any changes.

eth0 Link encap:Ethernet HWaddr 0C:C4:7A:B3:F1:6B
inet6 addr: fe80::ec4:7aff:feb3:f16b/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:2233 errors:0 dropped:0 overruns:0 frame:0
TX packets:109 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:190202 (185.7 KiB) TX bytes:9896 (9.6 KiB)
Memory:df100000-df17ffff

eth1 Link encap:Ethernet HWaddr 0C:C4:7A:B3:F1:6A
inet addr:192.168.0.97 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::ec4:7aff:feb3:f16a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:355 errors:0 dropped:0 overruns:0 frame:0
TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:35562 (34.7 KiB) TX bytes:3213 (3.1 KiB)
Interrupt:16 Memory:df400000-df420000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:64 errors:0 dropped:0 overruns:0 frame:0
TX packets:64 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4190 (4.0 KiB) TX bytes:4190 (4.0 KiB)

Your i219 Ethernet controller should now be active.