【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 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と表示されています。
ドライバ名を調べる。
ドライバがインストールされていれば、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であると確認できました。
現在のドライバ バージョンを調べる。
modinfo -F version <Driver Name>
ドライバの問題を調査。
ドライバ名で探します。
dmesg | grep -i <Driver Name>
前述の通り、"The NVM Checksum Is Not Valid"と表示されていました。NVMチェックサムが合っていないと判定されています。
仕方がないので、チェックサムの確認をしないように変更します。インストールされているドライバを改変するのではなく、新たにドライバを用意し、それを改変してからインストールします。
Linux用 Intel Ethernet ドライバのダウンロード
他のネットワークアダプタがない場合はLANが使えないため、別環境でダウンロードします。
e1000eドライバのみ
-
e1000e-3.8.4.tar.gz (2020/04/22)
MD5: 711DC0ADA83947B0E22E53699D4FA1AC
SHA1: 4696BBE30E959C5A1BD006BE066358FF5FE76464https://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: DF917C2C947EC8F36602E419034A242F48D55DD7https://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: 0F038D944A01F439B694AA998AB0E93C8AD6DE19https://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: 4B6E33450FD2396A19D53F793B42EAD9ABD0E946NOTE: 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: F936CFEC2F664E7D452ECDAF74CE7F20C31F0251https://www.intel.com/content/www/us/en/download/15084/29742/intel-ethernet-adapter-complete-driver-pack.html
Linux + UEFI mode + Sercure boot有効 環境での注意事項
よほど古いバージョンでない限り、Ubuntu系ディストリビューションでは、署名されていないサードパーティ製モジュールをロードできなくなっています。(他のディストリビューションについては不明)
該当する環境では、modprobe実行時にエラーになります。
一番簡単な対処法は、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ファイルの内容変更 → 上書き保存
- nvm.cファイル内を「s32 e1000e_validate」で検索(Ctrl + F)。
s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)の{}内について、return 0;だけ残し、他を削除する。
(この下の背景がグレーの部分を削除する)
- 上書き保存(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有効 環境での注意事項)
まだ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
- 関連記事
-
- 【Linux】対処法: 有線LANのドライバe1000eが動作しない。
- Logicoolのソフト 今度はLogitech G Discordが付いてくる。
- ドライバインストールが進まない。実は途中でループしていた。
- LogicoolのソフトにOverwolfが付いてきた。
- Sound Blaster X-Fi 旧シリーズのWin10ドライバ