【Linux】対処法: 有線LANのドライバe1000eが動作しない。

最終更新日

追記

このページでは、"The NVM Checksum Is Not Valid" エラーを回避するために、LANドライバを改変する方法を紹介しています。

しかし、可能ならば、NVM Checksumを修正する方が望ましいでしょう。NVM Checksumを修正できれば、ドライバの改変は必要ありません。

「NVM Checksumの修正方法」の記事へのご案内

LinuxでIntel Ethernet Connection I219-Vを使うには、ドライバの改変が必要。

Linux上でMACアドレスを取得できないため、調べてみたら、NICドライバが動作していません。ハードウェアとしては認識されていますが、ネットワークアダプタ情報を取得できず、通信もできません。

環境

  • マザーボード: ASUS Z170 PRO GAMING
  • オンボードLAN: Intel Ethernet Connection I219-V

原因

Linuxブート時に、ドライバ(e1000e)が"The NVM Checksum Is Not Valid"で弾かれています。

https://blog.spiralray.net/archives/474

上のURLのブログの通りに新バージョンを用意、nvm.cファイルを変更して適用すれば、ドライバが動作するようになりました。

以下、手順を書き残しておきます。(一部コマンドを変更、説明を追加。全てLive環境で試しました)

使用したドライバ バージョン

  • e1000e-3.5.1 (2019/07/23)
  • e1000e-3.6.0 (2019/09/22)

※ Linux kernel 5.3以降の環境では、e1000e-3.6.0以降を使用してください。e1000e-3.5.1の場合、インストールに失敗する可能性があります。

使用したLinuxディストリビューション

  • Linux Mint 18.2 Mate
    Linux kernel 4.8.0-53、Ubuntu 16.04 LTS (xenial)
  • Linux Mint 18.3 Mate
    Linux kernel 4.10.0-38、Ubuntu 16.04 LTS (xenial)
  • Linux Mint 19.2 Mate
    Linux kernel 4.15.0-54、Ubuntu 18.04 LTS (bionic)
  • Peppermint 8
    Linux kernel 4.13.0-32、Ubuntu 16.04 LTS (xenial)
  • Peppermint 10
    Linux kernel 4.18.0-18、Ubuntu 18.04 LTS (bionic)
  • KNOPPIX 8.2 (32bitのみテスト)
    Linux kernel 4.16.5、Debian 9.4 (Stretch)
  • KNOPPIX 8.6.1 (32bitのみテスト)
    Linux kernel 5.3.5、Debian 10 (buster)
KNOPPIXの注意点

KNOPPIX 64bit (ブートオプション knoppix64)

初期状態ではmake installを実行できません。32bit(ブートオプション knoppix)、または他のディストリビューションをお勧めします。
詳細: knoppix64でアプリケーションエラー [v7.x 以降]

KNOPPIX 8.6.0 32bit (Linux kernel 5.2.5)

ブート出来ない可能性があります。
詳細: KNOPPIX 8.6.0 ブートできない。[32bit kernel]

KNOPPIX 8.6.1 32bit (Linux kernel 5.3.5)

e1000e-3.6.0以降を使用してください。e1000e-3.5.1はインストールに失敗します。

knoppix@Microknoppix:~/e1000e-3.5.1/src$ sudo make install
make -C /lib/modules/5.3.5/build CC=gcc SUBDIRS=/home/knoppix/e1000e-3.5.1/src modules
make[1]: Entering directory '/usr/src/linux-headers-5.3.5'
Makefile:213: ================= WARNING ================
Makefile:214: 'SUBDIRS' will be removed after Linux 5.3
Makefile:215: 
Makefile:216: If you are building an individual subdirectory
Makefile:217: in the kernel tree, you can do like this:
Makefile:218: $ make path/to/dir/you/want/to/build/
Makefile:219: (Do not forget the trailing slash)
Makefile:220: 
Makefile:221: If you are building an external module,
Makefile:222: Please use 'M=' or 'KBUILD_EXTMOD' instead
Makefile:223: ==========================================
  CC [M]  /home/knoppix/e1000e-3.5.1/src/netdev.o
/home/knoppix/e1000e-3.5.1/src/netdev.c: In function ‘e1000_flush_tx_ring’:
/home/knoppix/e1000e-3.5.1/src/netdev.c:4329:2: error: implicit declaration of function ‘mmiowb’ [-Werror=implicit-function-declaration]
  mmiowb();
  ^~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:281: /home/knoppix/e1000e-3.5.1/src/netdev.o] Error 1
make[1]: *** [Makefile:1626: _module_/home/knoppix/e1000e-3.5.1/src] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.3.5'
make: *** [Makefile:252: default] Error 2

Ethernetアダプターのベンダー・製品名を確認する。

Terminalを起動し、次のいずれかのコマンドを実行します。

lspci | grep -i Ethernet
sudo lshw -C network
hwinfo --netcard

私のPCの場合、ベンダーがIntel Corporation、製品名がEhternet Connection (2) I219-Vと表示されています。

lspciコマンド結果 Intel Corporation Ehternet Connection (2) I219-V

ドライバ名を調べる。

ドライバがインストールされていれば、Kernel起動時のメッセージログのどこかにドライバ名が表示されている可能性があります。Ehternetアダプタの記述を探し、その行頭のあたりに書かれているドライバ名を確認します。

ログが長いので、キーワードで絞り込んでみます。

ethで検索する場合。 (Ethernetアダプターには、Network Interface Nameとしてeth0、eth1等が割り当てられています)

dmesg | grep -i eth

ベンダー名である「Intel」で検索する場合。

dmesg | grep -i Intel

あるいは「Ethernet」「Network」「driver」等で探してみます。sudo lshw -C networkの結果に表示されるbus infoのデータ("pci@"部分は除く)でもいいでしょう。

dmesg | grep -i Ethernet

それでも見つからない場合は、ログを全て表示させて探してください。

dmesg

調べた結果、Intel Corporation Ehternet Connection (2) I219-Vのドライバ名は、e1000eであると確認できました。

dmesg: Intel Network Driver e1000e

現在のドライバ バージョンを調べる。

modinfo -F version <Driver Name>

ドライバの問題を調査。

ドライバ名で探します。

dmesg | grep -i <Driver Name>

前述の通り、"The NVM Checksum Is Not Valid"と表示されていました。NVMチェックサムが合っていないと判定されています。

dmesg: e1000e The NVM Checksum Is Not Valid

仕方がないので、チェックサムの確認をしないように変更します。インストールされているドライバを改変するのではなく、新たにドライバを用意し、それを改変してからインストールします。

Linux用 Intel Ethernet ドライバのダウンロード

他のネットワークアダプタがない場合はLANが使えないため、別環境でダウンロードします。

e1000eドライバのみ

  • e1000e-3.8.4.tar.gz (2020/04/22)

    MD5: 711DC0ADA83947B0E22E53699D4FA1AC
    SHA1: 4696BBE30E959C5A1BD006BE066358FF5FE76464

    https://www.intel.com/content/www/us/en/download/14611/15817/intel-network-adapter-driver-for-pcie-intel-gigabit-ethernet-network-connections-under-linux.html

  • e1000e-3.6.0.tar.gz (2019/09/22)

    MD5: 0EFC282574974E2CEB332E28A895C09C
    SHA1: DF917C2C947EC8F36602E419034A242F48D55DD7

    https://www.intel.com/content/www/us/en/download/14611/29527/intel-network-adapter-driver-for-pcie-intel-gigabit-ethernet-network-connections-under-linux.html

  • e1000e-3.5.1.tar.gz (2019/07/23)

    MD5: F8402345BC399CE16C7504F33955A4A3
    SHA1: 0F038D944A01F439B694AA998AB0E93C8AD6DE19

    https://www.intel.com/content/www/us/en/download/14611/29098/intel-network-adapter-driver-for-pcie-intel-gigabit-ethernet-network-connections-under-linux.html

SourceForge.netからもダウンロード可能。
https://sourceforge.net/projects/e1000/files/e1000e historic archive/

Intel(R) Ethernet Adapter Complete Driver Pack v2.53未満

各種OS用(Windows、Linux、FreeBSD、DOS) 詰め合わせ。

v2.53以降は、Linux用e1000eドライバを含まなくなりました。

  • v25.2 (e1000e-3.8.4.tar.gzを含む)

    ファイル名: 25_2.zip

    MD5: 0A1670B4BF653D98FCAF8BF379625398
    SHA1: 4B6E33450FD2396A19D53F793B42EAD9ABD0E946

    NOTE: 2020/11/30に内容変更。DDP_Profiles\710_Series\trex.zipが削除された。それに伴い、サイズが減少、ハッシュ値が上記の値になった。

    https://www.intel.com/content/www/us/en/download/15084/29857/intel-ethernet-adapter-complete-driver-pack.html

  • v25.1.1 (e1000e-3.8.4.tar.gzを含む)

    ファイル名: 25_1_1.zip

    MD5: 999A633AC79B8C42655CB53FF41D96F9
    SHA1: F936CFEC2F664E7D452ECDAF74CE7F20C31F0251

    https://www.intel.com/content/www/us/en/download/15084/29742/intel-ethernet-adapter-complete-driver-pack.html

Linux + UEFI mode + Sercure boot有効 環境での注意事項

よほど古いバージョンでない限り、Ubuntu系ディストリビューションでは、署名されていないサードパーティ製モジュールをロードできなくなっています。(他のディストリビューションについては不明)

該当する環境では、modprobe実行時にエラーになります。

modprobe: Error: could not insert e1000e : Required key not available

一番簡単な対処法は、UEFI BIOS設定でSercure bootを無効にしてからLinuxをブートすること。その他の対処法は次のURLを参照してください。

https://askubuntu.com/questions/762254/

e1000eドライバの入れ直しから、動作させるまで。

ダウンロードしたドライバを所定の場所に配置する。

ドライバ ファイル(例: e1000e-3.6.0.tar.gz)が入ったストレージをマウントしておきます。(マウント方法は省略)

次に、マウントしたストレージからLinuxへ、ドライバをコピーします

コピー先は、次のいずれか。ついでにカレントディレクトリも移動させておきます。

/home/user name/ (ユーザーのホームディレクトリ)

cp <Driver file path> ~/
cd ~/

/usr/local/src/

sudo cp <Driver file path> /usr/local/src/
cd /usr/local/src/

ここより下の作業では、度々Superuser権限が必要になります。"Operation not permitted"や"denied"と表示された時は、コマンドの頭にsudo を付けて実行してみてください。

ZIPファイルの展開 (Complete Driver Packの場合)

.tar.gzファイルの場合は、次の章「.tar.gzファイルの展開」へ進んでください。

Intel(R) Ethernet Adapter Complete Driver Packの場合は、zipで配布されています。その中に、e1000e-x.x.x.tar.gzが含まれています。

zipファイル名を確認。

ls *.zip

zipファイルから、e1000e.x.x.x.tar.gzファイルだけを展開し、取り出します。(xx_x.zipをzipファイル名に、x.x.x部分をバージョンに置き換えてください)

unzip ./xx_x.zip */e1000e*.gz -d ./
mv ./PRO1000/LINUX/e1000e-x.x.x.tar.gz ./

使うのはe1000e-x.x.x.tar.gzだけ。他は不要です。

.tar.gzファイルの展開

ファイル名を確認。

ls e1000e*

e1000e-x.x.x.tar.gzを展開し、カレントデイレクトリをe1000e-x.x.x/srcに移動させます。

tar -xvf ./e1000e-x.x.x.tar.gz
cd ./e1000e-x.x.x/src/

nvm.cファイルの内容変更

The NVM Checksum Is Not Valid」の問題があったため、e1000e-x.x.x/src/nvm.cファイルを変更します。

その問題が発生していない環境では、nvm.cファイルを変更する必要はありません。「ドライバのインストール」に進んでください。

nvm.cファイルをテキストエディタで開く。

テキストエデイタはインストールされているものを使います。(Xed、Gedit、Leafpad、Pluma 等)

Xedで開く場合

sudo xed nvm.c

Geditで開く場合

sudo gedit nvm.c

nvm.cファイルの内容変更 → 上書き保存

  1. nvm.cファイル内を「s32 e1000e_validate」で検索(Ctrl + F)。
  2. s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)の{}内について、return 0;だけ残し、他を削除する。

    (この下の背景がグレーの部分を削除する)

  3. 上書き保存(Ctrl + S)
s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
	s32 ret_val;
	u16 checksum = 0;
	u16 i, nvm_data;

	for (i = 0; i < (NVM_CHECKSUM_REG + 1); i++) {
		ret_val = e1000_read_nvm(hw, i, 1, &nvm_data);
		if (ret_val) {
			e_dbg("NVM Read Error\n");
			return ret_val;
		}
		checksum += nvm_data;
	}

	if (checksum != (u16)NVM_SUM) {
		e_dbg("NVM Checksum Invalid\n");
		return -E1000_ERR_NVM;
	}
	return 0;
}

s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
	return 0;
}

ドライバのインストール

インストール

sudo make install

最後の方で、"cannot write to /var/cache/man/cat7/e1000e.7.gz in catman mode"と表示されることがあります。ドライバの動作に影響はありません。

gcc、make、linux-headers-* または kernel-devel 等がインストールされ、問題なく動作すること。これらが整っていない環境では、インストールしておく必要があります。ただし、インターネットに接続できないと厳しいです。

Red Hat based platforms: CentOS, RHEL, or Fedora

    yum install gcc make
    yum install kernel kernel-devel

Ubuntu and Debian based platforms

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

You may need to perform a general update and restart before the next steps.

https://www.intel.com/content/www/us/en/support/articles/000005480/ethernet-products.html

ドライバのバージョン確認

modinfo -F version e1000e

ドライバ バージョンが更新されていれば、インストール成功。更新されていない場合は、インストール失敗です。

ドライバをロードする。

旧ドライバのアンロード、新ドライバのロード

sudo modprobe -r e1000e
sudo modprobe e1000e

次のエラーが出る場合は、ドライバのロードに失敗しています。Secure bootの無効化、あるいはその他の対策が必要です。
(説明: Linux + UEFI mode + Sercure boot有効 環境での注意事項)

modprobe: Error: could not insert e1000e : Required key not available

まだLAN接続できない場合は、ネットワークマネージャーを再起動

次のいずれかのコマンドを実行します。

sudo service network-manager restart
sudo systemctl restart NetworkManager
sudo nmcli networking off
sudo nmcli networking on

※ 一番下のsudo nmcli networking onは、ネットワークマネージャーの「Enable Networking」設定がoff→onに変更されます。

次回起動時以降も新ドライバを使用するために

対象: Linux インストール済

一部のLinuxディストリビューションにおいて、OSが古いドライバをロードしないように、ブート設定を更新する必要があります。(e1000eドライバのREADMEファイルを参照)

Ubuntu系

sudo update-initramfs -u

RedHat系

dracut --force
関連記事