Ubuntu 20.04.2で有線LANが認識されない

Ethernetコントローラ(I219-V)搭載PCにUbuntu 20.04.2をインストールしても、チェックサムでエラーとなり、I219-Vが動作しない。この場合、ドライバe-1000e-3.8.7.tar.gzをダウンロードしてソース修正する必要がある。ややこしいことに、e1000eの3.8.4は初期のUbuntu 20.04では使えたが、少なくともkernel5.6系以上では、コンパイルエラーになるようだ。そのため、kernelのバージョンによって、3.8.4と3.8.7を使い分ける必要がある。

なお、ここで紹介する方法は当該マシン上で動作するLinuxを再インストールするつど、同じ手順を実施する必要がある。
一方、以下のURLの方法では、フラッシュメモリを書き換えることにより、1度だけ作業を行えばLANが確立されるようになる手順を紹介しているので、参考まで。

前提条件

makeなどが実行できるコンパイル環境が整っていること。
以下を実行してエラーになる場合は、sudo apt update と sudo apt upgrade を実施し、linuxを再起動したうえで、以下を再試行すること。

sudo apt install -y linux-headers-$(uname -r)

e1000e 3.8.7のダウンロード

このリンクからダウンロードする。

nvm.cの編集

$ tar xvf e1000e-3.8.7.tar.gz
$ cd e1000e-3.8.7/src
$ vi nvm.c
  1. nvm.cファイル内を「e1000e_validate」で検索
  2. e1000e_validate_nvm_checksum_generic()関数のロジックを「return 0;」だけにして、ほかをすべてコメントアウトする
  3. 保存して終了する
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;
}

ドライバのビルドとインストール

以下のコマンドを実行する。

$ sudo make install
$ modinfo -F version e1000e
3.8.7-NAPI

新ドライバのローディング

$ sudo modprobe -r e1000e
$ sudo modprobe e1000e

この時点で、有線接続が自動的に行われる。

次回起動時の新ドライバ有効化

$ sudo update-initramfs -u