Ethernetコントローラ(I219-V)搭載PCにUbuntu 22.04をはじめ、Linuxをインストールしても有線LANが動作しない。このような場合に、有線LANが接続できるようにする方法を紹介する。
概要
Intel LAN関連のフラッシュメモリに不整合(チェックサムエラー)があるため、LinuxのLANドライバ(e1000e)はそのエラーを検出し、停止してしまう。そのため、LANが使えなくなる。
ちなみにWindowsではこのエラーを無視する。
ここでは、フラッシュメモリを書き換えることにより、不整合を解消し、LANが使えるようにする。
ここで紹介する方法のメリットは、1回だけ作業を行っておけば、以降、何度OSを入れ替えても、LANに接続できる状態を保持できること。一方デメリットは、ファームウェアの書き換えを行うので失敗した際のリスクが高めと思われること。
前提条件
BIOSで「セキュアブート」が無効になっていること。
makeなどが実行できるコンパイル環境が整っていること。まだの場合は、以下のコマンドを実行して環境を整える。
$ sudo apt install build-essential
イーサネット・フラッシュ・ファームウェア・ユーティリティのダウンロードとインストール
このリンクからダウンロードする。
この時点では、”Preboot.tar.gz”というファイル名。
ファイルの解凍とインストール
解凍する場所は任意で良い。
$ tar xvf Preboot.tar.gz $ cd APPS/BootUtil/Linux_x64/DRIVER $ sudo ./install
NICのファームウェア(PXE設定)をリセットする
インテルのユーティリティで、選択されたNICのPXE設定をデフォルトに戻すと、エラーが発生しなくなる。
ユーティリティに実行権を付与し、管理者から実行。
$ cd .. $ chmod +x bootutil64e $ sudo ./bootutil64e [sudo] linux のパスワード: ← パスワードを入力
bootutil64eの実行結果で「Network Address」がMACアドレス。対象のMACアドレスを特定し、その「Port」を確認する。下の例では「1」。
bootutil64eの引数「-NIC」に上記の「Port」の番号を指定する。
「-DEFCFG」はPXE設定をデフォルトに戻すオプション。
$ sudo ./bootutil64e -NIC=1 -DEFCFG
私の環境では、上記コマンド実行直後にLANのリンクが確立した。
一応、下のように確認してOK。
$ sudo dmesg | grep e1000e [sudo] linux のパスワード: [ 0.924080] e1000e: Intel(R) PRO/1000 Network Driver [ 0.924082] e1000e: Copyright(c) 1999 - 2015 Intel Corporation. [ 0.924543] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode [ 1.166913] e1000e 0000:00:1f.6 0000:00:1f.6 (uninitialized): registered PHC clock [ 1.234064] e1000e 0000:00:1f.6 eth0: (PCI Express:2.5GT/s:Width x1) 70:85:c2:31:fc:4d [ 1.234076] e1000e 0000:00:1f.6 eth0: Intel(R) PRO/1000 Network Connection [ 1.234155] e1000e 0000:00:1f.6 eth0: MAC: 12, PHY: 12, PBA No: FFFFFF-0FF [ 1.526454] e1000e 0000:00:1f.6 enp0s31f6: renamed from eth0 [ 7.501984] e1000e 0000:00:1f.6 enp0s31f6: NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
最後に
できればBIOSから「セキュアブート」の設定に戻し、新たにLinuxをインストールするのが安全といえる。
参考HP
Linux で Intel の 有線 LANが認識しない問題の解決方法(The NVM Checksum Is Not Valid)
【解決方法】Intel LANドライバの”The NVM Checksum Is Not Valid” (Intel BootUtil編)