Realtek 8125 NIC をCentOS8で動かす


最初の出会い

私が入手したのは、AREA SD-PE25GLAN-1L というパッケージの商品でした。
適当に選びました。
大体どれでも使えるよな。って軽い気持ちでした。
なんでも2.5Gbpsだとかで凄いってことだったので。

お持ち帰り

家について母艦の富士通PRIMERGY TX1310 M3に取り付けました。

 # ip a

してみても本体のLANポートしか認識されません。
これは・・・・少し冷や汗が流れ、鼓動が大きく速くなるのが分かりました。
おちついて、

# lspci
   :
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-LM (rev 31)
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Device 8125

Realtek 8125って事じゃないか、カニさんチップなんてポピュラーだから大丈夫って思っていたけどそうでもなかった。

ドライバを探す in 自マシン

落ち着き払って

# ls -l /lib/modules/4.18.0-147.8.1.el8_1.x86_64/kernel/drivers/net/ethernet/realtek/
-rw-r--r-- 1 root root   15348 Apr  9 23:03 8139cp.ko.xz
-rw-r--r-- 1 root root   16936 Apr  9 23:03 8139too.ko.xz
-rw-r--r-- 1 root root   33444 Apr  9 23:03 r8169.ko.xz

ない。8125の文字がない。
8139だって8169だって大は小を兼ねるでダメなの?!
駄目です。と冷酷無比な声が聞こえた。

ドライバを探す 本家サイトで

そこで、本家に行きました。

Realtek PCIe FE/GBE/2.5G/Gaming Ethernet Family Controller Software

ここで、一覧表示されるものの中でUnix(Linux)のセクションにあるドライバの中から

2.5G Ethernet LINUX driver r8125 for kernel up to 4.15

を選択してダウンロードします。
メールアドレスを聞かれて、無意味な英数字を入力させられます。

コンパイル

展開するとほぼすべてmode 777でファイルが展開されます。
気持ちが悪いので autorun.sh 以外はxビットを落としたり、wビットを落としたりしました。(まったく個人的嗜好なので)
サイトのdescriptionにもあるようにkernel up to 4.15のためなのか解りませんが、このままautorun.shしてもエラーになります。そこで、足りないものが解ったのでinstallします。

ここからが重要

私の母艦はファイルサーバにするつもりだったので開発キットの類は一切インストールしていなかったのでした。そのため、コンパイラがないだとか、カーネルインクルードファイルがないだとか・・・・
それらの問題を一気に解決する呪文です。

# dnf group install "Development Tools"
# dnf install elfutils-libelf-devel

この呪文の後にautorun.shのあるディレクトリにcdして、

# ./autorun.sh

を入力したらインストールしてinsmodまでしてくれます。そこで、ip a したら、

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 4c:52:62:58:df:8d brd ff:ff:ff:ff:ff:ff
    inet 192.168.31.183/24 brd 192.168.31.255 scope global dynamic noprefixroute eno2
       valid_lft 161937sec preferred_lft 161937sec
    inet6 2001:a452:708:6500:4e52:62ff:fe58:df8d/64 scope global dynamic mngtmpaddr 
       valid_lft 13621sec preferred_lft 11821sec
    inet6 fe80::4e52:62ff:fe58:df8d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:13:3b:b0:1e:b3 brd ff:ff:ff:ff:ff:ff

ここで8125は3番目のenp1s0に相当します。

最後に

再起動させてみて起動後にちゃんとNICが認識されているか確認して大丈夫だったら完成です。

わすれずに depmod

再起動後にNICが認識されていないケースの殆どは、depmod忘れです。

# depmod -a

などとして、/lib/modules/4.18.0-147.8.1.el8_1.x86_64/modules.dep の内容の更新を忘れずに。

確認してみる

# ls -l /lib/modules/4.18.0-147.8.1.el8_1.x86_64/kernel/drivers/net/ethernet/realtek/                 
total 2596                                                                                                          
-rw-r--r-- 1 root root   15348 Apr  9 23:03 8139cp.ko.xz                                                            
-rw-r--r-- 1 root root   16936 Apr  9 23:03 8139too.ko.xz                                                           
-rw-r--r-- 1 root root 2582552 May  1 20:52 r8125.ko                                                                
-rw-r--r-- 1 root root   33444 Apr  9 23:03 r8169.ko.xz

xz圧縮形式にしなくて良いのか

わからないけど、とりあえずこのままにしてましたが、xzコマンドで簡単に圧縮できるので

# xz r8125.ko

として圧縮しましょう。なお、この圧縮をしたあとは、modules.depの内容更新のため、再度、

# depmod -a

を忘れずに。

kernel updateの時に

自動的にドライバを更新させる方法はしらないので原始的に毎回autorunしているのでそこらへんはなんとかしていきたいと思っています。