SSブログ

debian 11でネットワーク(e1000e)が動作しない [プログラム]

debian 9(stretch)からのアップグレードで、現最新版debian 11(bullseye)順にアップデートをしました。
debian 9→debian 10(buster)は、さほど問題はありませんでした。が、
debian 10(buster)→debian 11(bullseye)で、「大問題」が発生しました。
    ネットワークが動かない。このマシンのマザーボードはI219-Vで、このボード上のネットワークのドライバはe1000eということなのですが、ドライバがロードされません。
dmesgで見てみると
    The NVM Checksum Is Not Valid
と表示されていて、ドライバをロードしていません。
ググってみると、次のページなどがヒットします。
    https://datyotosanpo.blog.fc2.com/blog-entry-220.html
解決策は大まかに2種類、
    A. Intel製のNVMセットユーティリティを使って、NVMのChecksumを正しい値に直す
    B. Intel製のドライバソースをNVMのChecksumを無視するように変更してコンパイルして入れる
で、まずAから試しましたが、NVMに書き込めないというエラーでダメでした。
で、Bを試したら、e1000eドライバのソースが、kernelのバージョン(backportで5.10を入れていた)と一致せず、コンパイルエラーになりました。
相変わらず、絶好調です、kernelもdebianも。
なので、私は、かつてのシリアルドライバでのバグを自分で修正していたときのように
    debianのkernelのソースパッケージを取得、修正、コンパイルしてドライバ(モジュール)を入れ直す
ことにしました。
これだとkernelをアップデートするたびに同じことを繰り返さなければならないので「とても面倒」なのですが、一番安心な方法なのです。
まったく同じ状態のkernelのソースを使うのですから、コンパイルエラーもでませんし、ロードも必ずできます。
ただし、kernelをコンパイルしますので、コンパイルのためのツールのインストールがとても大変で注意が必要です。
まず次のような感じで修正用ディレクトリを作って、そこで作業します。
    mkdir e1000e-ignore-nvm-error
    cd e1000e-ignore-nvm-error
    apt-get source --compile linux-image-....
で、足りないツール(パッケージ)が表示されるので、インストールします。
    apt install 足りないパッケージ...
します。おおっと、余計なパッケージまで指定して「現在のlinux-kernelを削除するのか?」って聞かれてしまいましたよ。
もちろん、それはダメです。余計なパッケージの指定を削除して apt install して、 apt-get source --compile  ...していると、ダウンロード、パッチ、コンパイルが始まりました。メッセージが出力されていきますが、
なんじゃこの速さは!? と思ってtopコマンドでみると、全コアでgccしてました。makeも並列実行できるようになっているからですが、コア+HTがあると、かなりすごい状態になりました...
で、パッケージまで作られてしまいますが、終了まで待ちます。
終了したら、問題の
    drivers/net/ethernet/intel/e1000e/nvm.c

    e1000e_validate_nvm_checksum_generic(...)
関数の中を、 return 0 だけ残してコメントアウト(削除)します。
一応、念のため、linuxソースのトップディレクトリで、
    make clean
してから、再度
    apt-get source --compile linux-image-....
して終了まで待ちます。
修正されたのが、どこかにありますが、どこだったかな。
    find . -name 'e1000e.ko'
で見つけましょう。
見つかったら、正規の場所へコピー。念のため、もとのドライバ(e1000e.ko)は名前を変えて残しておくのがよいでしょう。
    cp e1000e.ko /lib/modules/カーネルのバージョン/kernel/drivers/ethernet/intel/e1000e/
そして、initramfs内にもe1000e.koが取り込まれているようですので、initramfsをアップデートします。
    update-initramfs -u
これで再起動してネットワークが動作するようになりました。


後日、もう少し調べてみると、
    https://newbedev.com/how-to-repair-the-checksum-of-the-non-volatile-memory-nvm-of-intel-ethernet-controller-i219-v-of-an-asus-laptop
が見つかりました。ただし、
    ethtoolを使うため、e1000eが正常に動作するカーネルが必要
ということで、一時的に古いカーネルからブートして使うなどをしなければなりません。
(私は、上記の改造したドライバを使いました)
ですが、こいつもダメでした。
    ethtool -E eno1 magic 0x0d4f8086 offset 0x10 length 0x01 value 0xff
    Cannot set EEPROM data: Invalid argument

うーむ、このマザーボード上のe1000eは、どうやってもNVMを書き換えられないようです。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。