💤

Ubuntu 24.04.3 で RTL8127を使用可能にした話

に公開

ローカルLLMを動かすのを目的に、Minisforum の MS-S1 MAXというPCを購入しました。
このPCは、CPUに AMD Ryzen AI Max+ 395 を積んでおり、比較的大きなLLMを動かせます。ちょうど AMD から ROCm 7.9.0 preview が発表され、Ryzen AI Max+ 395 がサポート対象になったので、ROCm 7.9.0 previewのシステム要件に合わせて Ubuntu での環境構築をしてみることにしました。

ROCm 7.9.0 preview で サポートされている Ubuntuのバージョンは Ubuntu 24.04.3 (HWE kernel: 6.14) ということなのですが、実は普通にUbuntu 24.04.3 を ISOからインストールすると、MS-S1 MAXに装備されている 10GbE の有線LANが使えません(無線LANは使えます)。有線LANに使われているRTL8127(r8127)というRealtek のチップは kernel 6.16では対応されるようなのですが、素の Ubuntu 24.04.3 で有線LANが使えないことには何とも不便なので、まずはRTL8127のドライバーを導入することにしました。

参考にさせて頂いたのはPC Watchの記事( https://pc.watch.impress.co.jp/docs/column/ubuntu/2046986.html ) ですが、私が試した限りでは、微妙に上手くいかないところが幾つかありましたので、手順を整理し直すとこんな感じです。

事前準備

$ sudo apt install dkms debhelper linux-headers-$(uname -r) build-essential gcc

展開

$ sudo cp -r ~/Downloads/r8127-11.015.00/* /usr/src/r8127-11.015.00/
$ cd /usr/src/r8127-11.015.00/

DKMS設定の作成

$ sudo editor /usr/src/r8127-11.015.00/dkms.conf
  • 編集内容
PACKAGE_NAME="r8127"
PACKAGE_VERSION="11.015.00"
CLEAN="make -C /lib/modules/$(uname -r)/build M=/usr/src/r8127-11.015.00/src clean"
MAKE[0]="make -C /lib/modules/$(uname -r)/build M=/usr/src/r8127-11.015.00/src modules"
BUILT_MODULE_NAME[0]="r8127"
BUILT_MODULE_LOCATION[0]="src/"  # フルパスのほうが良いかも
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/ethernet/realtek"
AUTOINSTALL="yes"
BUILD_EXCLUSIVE_KERNEL_MAX="6.15"

インストール

$ sudo dkms remove r8127/11.015.00 --all     # やり直しの場合
$ sudo dkms add r8127/11.015.00
$ sudo dkms build r8127/11.015.00
$ sudo dkms install r8127/11.015.00
$ sudo modprobe r8127

追記

  • Ubuntu 24.04.3 の素の状態で、ROCm 7.9.0 previewが なんとなくあれこれ動いてしまっていたので、AMDのHWEのインストールをしていませんでした。
  • あとあと面倒にならないよう、いまのうちに入れておくことにしました。いま始めてこの記事をお読みになる方は、以下のほうがより適切です(たぶん)。

r8127 DKMSの登録解除

  • 一旦 r8127 DKMSを外します。
$ sudo dkms remove r8127/11.015.00 --all

AMD HWEカーネルのインストール

$ sudo apt-get install linux-oem-24.04c
  • HWEカーネルの新ストールで既に r8127がらみで問題が起きていたら、こちらで修復。
$ sudo apt --fix-broken install

dkms.confの修正

  • 始めからこうしておくべきだったということだと思います。
$ sudo nano /usr/src/r8127-11.015.00/dkms.conf
PACKAGE_NAME="r8127"
PACKAGE_VERSION="11.015.00"
CLEAN="make -C /lib/modules/${kernelver}/build   M=/usr/src/r8127-11.015.00/src clean"
MAKE[0]="make -C /lib/modules/${kernelver}/build M=/usr/src/r8127-11.015.00/src modules"
BUILT_MODULE_NAME[0]="r8127"
BUILT_MODULE_LOCATION[0]="src/"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/ethernet/realtek"
AUTOINSTALL="yes"
BUILD_EXCLUSIVE_KERNEL_MAX="6.15"

再構築

  • あとは先程と同じプロセスをカーネルを指定して実行。
$ sudo dkms add r8127/11.015.00
$ sudo dkms build r8127/11.015.00 -k $(uname -r)
$ sudo dkms install r8127/11.015.00 -k $(uname -r)$ sudo dkms install r8127/11.015.00 -k $(uname -r)
$ sudo dkms build r8127/11.015.00 -k 6.14.0-1014-oem
$ sudo dkms install r8127/11.015.00 -k 6.14.0-1014-oem
$ sudo modprobe r8127
$ lsmod | grep r8127
  • GRUBで 6.14.0-1014-oem を指定して動作確認。

さらに追記

あれこれカーネルを変更したりしているうちに、r8127が動作しなくなってしまいました。修復できましたが、幾つか複数の原因があった可能性がありますので、わかった限りで全て記載します。

1. BIOSの設定

  • BIOSの advanced の項目で LAN1、LAN2の設定が auto になっていると、具合が悪い場合があるという情報があります(Strix Halo Homelab Discord)。これらを enabled にするのが良いとのことです。

2. DPKG

  • カーネルのビルドエラーが未完了だった場合の対応です。
sudo dpkg --configure -a

3. r8169対策

  • 後からインストールされたr8169 のドライバーが邪魔をしていました。
  • r8169をブラックリストに追加
echo "blacklist r8169" | sudo tee /etc/modprobe.d/blacklist-r8169.conf
echo "install r8169 /bin/false" | sudo tee -a /etc/modprobe.d/blacklist-r8169.conf
  • r8127のドライバーを優先的にロード
echo "alias pci:v000010ECd00008127sv*sd*bc*sc*i* r8127" | sudo tee /etc/modprobe.d/r8127.conf
  • initramfsを更新
sudo update-initramfs -u
  • リブートして、以下で使用されているドライバーを確認できます。
lspci -k | grep -A 3 Ethernet

4. ルーターのリブート

  • ここまでやって、r8127のドライバーは動いているし、結線されているのに、認識しないのでおかしいと思ったら、なんとルーターをリブートしたら解決しました。

もひとつ追記

  1. シャットダウン後、電源ケーブルを完全に抜いて10秒以上待ってから再接続する
  2. BIOSでWoL(Wake on LAN)を無効化し、ERP(省エネモード)を有効化する

Discussion