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