I recently built a brand new Kaby Lake PC with an Asus Strix Z270F motherboard.
I'm running Mageia 5 with all updates, and the Ethernet port was not recognized (network icon with red cross).
With the original motherboard BIOS v222, the Ethernet port could be made functional with the latest drivers from Intel.
With the latest (as of Feb. 10th, 2017) BIOS from Asus, v701, I actually had to recompile the Intel driver after disabling the NVM checksum check to make it work.
If anyone has the same issue and is interested by the procedure, here it is:
1) General info about the Ethernet adapter:
# lspci | grep Ethernet
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-V
2) Example of failed e1000e module startup with the latest Z270F motherboard BIOS v701 from Asus:
# dmesg | grep e1000e
[ 2.497809] e1000e: Intel(R) PRO/1000 Network Driver - 3.3.4-NAPI
[ 2.497810] e1000e: Copyright(c) 1999 - 2016 Intel Corporation.
[ 2.497931] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[ 2.715677] e1000e 0000:00:1f.6: The NVM Checksum Is Not Valid
If I remember correctly, there is a single line logged with the older BIOS v222, as the e1000e module doesn't even attempt to start (it doesn't recognize the hardware as supported).
3) Example of the successful e1000e module startup after commenting out the exit command following the NVM checksum check (note the error message, which I left on purpose - it has no effect anymore):
[ 84.192192] e1000e: Intel(R) PRO/1000 Network Driver - 3.3.5.3-NAPI
[ 84.192194] e1000e: Copyright(c) 1999 - 2016 Intel Corporation.
[ 84.192320] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
[ 84.411971] e1000e 0000:00:1f.6: The NVM Checksum Is Not Valid
[ 84.425012] e1000e 0000:00:1f.6 0000:00:1f.6 (uninitialized): registered PHC clock
[ 84.505868] e1000e 0000:00:1f.6 eth0: (PCI Express:2.5GT/s:Width x1) 70:4d:7b:62:9b:95
[ 84.505869] e1000e 0000:00:1f.6 eth0: Intel(R) PRO/1000 Network Connection
[ 84.505968] e1000e 0000:00:1f.6 eth0: MAC: 12, PHY: 12, PBA No: FFFFFF-0FF
[ 84.507810] e1000e 0000:00:1f.6 enp0s31f6: renamed from eth0
[ 88.020707] e1000e: enp0s31f6 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
4) To download the latest Intel driver e1000e for the I219-V, this link can be used:
https://downloadcenter.intel.com/download/15817
5) The name of the driver tar file that I used is: e1000e-3.3.5.3.tar.gz
6) Untar the file, and go in the src directory (no need to use the root user at this point):
tar xzvf e1000e-3.3.5.3.tar.gz
cd e1000e-3.3.5.3/src
7) If you have the motherboard bios v222, you can simply build the driver and install it, skip to step 9.
If you have bios v701, you have to disable the NVM checksum check first, execute step 8 below.
For any other bios version, well... try step 9 and resume at step 8 if it doesn't work

8) Edit (with vi or your preferred text editor) the file netdev.c. You have two lines to change.
8a) Change this line (#8276):
for (i = 0;; i++) {
to:
for (i = 0; i <= 10; i++) {
8b) Change this line (#8283):
goto err_eeprom;
to:
//goto err_eeprom;
9) Compile the module with the simple 'make' command (if needed, install make first with urpmi as root: 'urpmi make'):
# make
make -C /lib/modules/4.4.39-desktop-1.mga5/build CC=gcc SUBDIRS=/root/e1000e-3.3.5.3/src modules
make[1]: Entering directory '/usr/src/kernel-4.4.39-desktop-1.mga5'
CC [M] /root/e1000e-3.3.5.3/src/netdev.o
CC [M] /root/e1000e-3.3.5.3/src/ethtool.o
CC [M] /root/e1000e-3.3.5.3/src/param.o
CC [M] /root/e1000e-3.3.5.3/src/82571.o
CC [M] /root/e1000e-3.3.5.3/src/ich8lan.o
CC [M] /root/e1000e-3.3.5.3/src/80003es2lan.o
CC [M] /root/e1000e-3.3.5.3/src/mac.o
CC [M] /root/e1000e-3.3.5.3/src/nvm.o
CC [M] /root/e1000e-3.3.5.3/src/phy.o
CC [M] /root/e1000e-3.3.5.3/src/manage.o
CC [M] /root/e1000e-3.3.5.3/src/kcompat.o
CC [M] /root/e1000e-3.3.5.3/src/ptp.o
LD [M] /root/e1000e-3.3.5.3/src/e1000e.o
Building modules, stage 2.
MODPOST 1 modules
CC /root/e1000e-3.3.5.3/src/e1000e.mod.o
LD [M] /root/e1000e-3.3.5.3/src/e1000e.ko
make[1]: Leaving directory '/usr/src/kernel-4.4.39-desktop-1.mga5'
10) Strip the executable from debug symbols (reduces the size of the file)
# strip --strip-debug e1000e.ko
11) Compress the newly generated e1000e.ko file with xz (it will get a '.xz' suffix):
# xz e1000e.ko
# ls -l e1000e.ko.xz
-rw-r--r-- 1 root root 776040 Feb 10 00:35 e1000e.ko.xz
12) Now, you need to remove the original module from the kernel your are using and replace it with the new module.
You need to be root at this point if that's not already the case.Identify your kernel:
# uname -r
4.4.39-desktop-1.mga5
Identify the original module to remove (don't forget to update the kernel version in the paths below, if different):
# find /lib/modules/4.4.39-desktop-1.mga5 -name "e1000e.ko.xz" -exec ls -l {} \;
-rw-r--r-- 1 root root 88728 Dec 16 19:47 /lib/modules/4.4.39-desktop-1.mga5/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko.xz
Move the file to your /root/ folder to keep a copy (don't delete it with rm, just in case you would still need it):
# mv /lib/modules/4.4.39-desktop-1.mga5/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko.xz /root/
13) Install the new module in the updates folder of your kernel:
# cp e1000e.ko.xz /lib/modules/4.4.39-desktop-1.mga5/updates/drivers/net/ethernet/intel/e1000e/
14) Unload the existing e1000e module (assuming it was loaded, but that's unlikely), and reload it
rmmod e1000e (ignore any error if the module wasn't loaded)
modprobe e1000e
15) Once you have confirmed that the new module loads correctly and that network connectivity works, update the kernel initrd image with the new module (as root):
dracut -f -H
That's done.
At this point, your Ethernet connection should become available, and should stay available after reboot.
I'm not sure of what will happen the next time the kernel is updated.
If the new kernel has an updated driver for the Ethernet controller, it might work.
If not, the same procedure will have to be applied again, with each newly installed kernel.
- Stéphane
----------