CentOS stream 8 にRTL8125Bのドライバを入れようとする
環境は我が家のファイルサーバ CentOS Stream 8
そこに入れるのはRealtek製2.5GbEコントローラRTL8125Bのドライバですが
オフィシャルサイトでソースコードで公開されています。
今日の時点では
2.5G Ethernet LINUX driver r8125 for kernel up to 5.6 9.007.01 2021/11/17
ということでこれをダウンロードしてtar.bz2のアーカイブを展開
出てきたソースをとりあえずautorunかけると失敗する。
ログ出す為にsrcでmakeかけると
[rance@ruriko src]$ make
CC: cc
CCVERSION: 8
KERNEL_GCC_VERSION: 8.5.0
KVER: 4.18.0-310.el8.x86_64
KMAJ: 4
KMIN: 18
KREV: 0
BASEDIR: /lib/modules/4.18.0-310.el8.x86_64
DRIVERDIR: /lib/modules/4.18.0-310.el8.x86_64/kernel/drivers/net/ethernet/realtek
PWD: /home/rance/www/rpm/driver/r8125-9.007.01/src
RTKDIR: kernel/drivers/net/ethernet/realtek
make -C /lib/modules/4.18.0-310.el8.x86_64/build M=/home/rance/www/rpm/driver/r8125-9.007.01/src clean
make[1]: ディレクトリ ‘/usr/src/kernels/4.18.0-310.el8.x86_64’ に入ります
make[1]: ディレクトリ ‘/usr/src/kernels/4.18.0-310.el8.x86_64’ から出ます
make -C /lib/modules/4.18.0-310.el8.x86_64/build M=/home/rance/www/rpm/driver/r8125-9.007.01/src modules
make[1]: ディレクトリ ‘/usr/src/kernels/4.18.0-310.el8.x86_64’ に入ります
CC [M] /home/rance/www/rpm/driver/r8125-9.007.01/src/r8125_n.o
/home/rance/www/rpm/driver/r8125-9.007.01/src/r8125_n.c:62:10: 致命的エラー: linux/pci-aspm.h: そのようなファイルやディレクト
リはありません
#include
^~~~~~
コンパイルを停止しました。
make[2]: *** [scripts/Makefile.build:316: /home/rance/www/rpm/driver/r8125-9.007.01/src/r8125_n.o] エラー 1
make[1]: *** [Makefile:1569: module/home/rance/www/rpm/driver/r8125-9.007.01/src] エラー 2
make[1]: ディレクトリ ‘/usr/src/kernels/4.18.0-310.el8.x86_64’ から出ます
make: *** [Makefile:176: modules] エラー 2
ということで、linux/pci-aspm.hが無いという事でエラー
これは今のカーネルVerでは削除されたヘッダファイルなので存在しません。
r8125_n_cファイルを開いて見てみますと
60 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
61 #if LINUX_VERSION_CODE < KERNEL_VERSION(5,4,0)
62 #include <linux/pci-aspm.h>
63 #endif
64 #endif
どうもカーネルバージョンナンバーでヨシとするかダメとするかの構文で4.18が上手く拾えてないようだ。
61 #if LINUX_VERSION_CODE < KERNEL_VERSION(4,4,0)
に書き換え
さらにこれでmakeかけると
[rance@ruriko r8125-9.007.01]$ make
make -C src/ clean
make[1]: ディレクトリ ‘/home/rance/www/rpm/driver/r8125-9.007.01/src’ に入ります
make -C /lib/modules/4.18.0-310.el8.x86_64/build M=/home/rance/www/rpm/driver/r8125-9.007.01/src clean
make[2]: ディレクトリ ‘/usr/src/kernels/4.18.0-310.el8.x86_64’ に入ります
make[2]: ディレクトリ ‘/usr/src/kernels/4.18.0-310.el8.x86_64’ から出ます
make[1]: ディレクトリ ‘/home/rance/www/rpm/driver/r8125-9.007.01/src’ から出ます
make -C src/ modules
make[1]: ディレクトリ ‘/home/rance/www/rpm/driver/r8125-9.007.01/src’ に入ります
make -C /lib/modules/4.18.0-310.el8.x86_64/build M=/home/rance/www/rpm/driver/r8125-9.007.01/src modules
make[2]: ディレクトリ ‘/usr/src/kernels/4.18.0-310.el8.x86_64’ に入ります
CC [M] /home/rance/www/rpm/driver/r8125-9.007.01/src/r8125_n.o
/home/rance/www/rpm/driver/r8125-9.007.01/src/r8125_n.c:12081:31: エラー: initialization of ‘void (*)(struct net_device *, un
signed int)’ from incompatible pointer type ‘void (*)(struct net_device *)’ [-Werror=incompatible-pointer-types]
.ndo_tx_timeout = rtl8125_tx_timeout,
^~~~~~~~~~~~~~~~~~
/home/rance/www/rpm/driver/r8125-9.007.01/src/r8125_n.c:12081:31: 備考: (‘rtl8125_netdev_ops.xe7x84xa1xe5x90x8d>.ndo_tx
_timeout’ 用の初期化付近)
cc1: some warnings being treated as errors
make[3]: *** [scripts/Makefile.build:316: /home/rance/www/rpm/driver/r8125-9.007.01/src/r8125_n.o] エラー 1
make[2]: *** [Makefile:1569: _module_/home/rance/www/rpm/driver/r8125-9.007.01/src] エラー 2
make[2]: ディレクトリ ‘/usr/src/kernels/4.18.0-310.el8.x86_64’ から出ます
make[1]: *** [Makefile:176: modules] エラー 2
make[1]: ディレクトリ ‘/home/rance/www/rpm/driver/r8125-9.007.01/src’ から出ます
make: *** [Makefile:41: modules] エラー 2
相変わらずエラー
該当文字列の処理を行ってるところで同じようにバージョン違いで
338 #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)
339 static void rtl8125_tx_timeout(struct net_device *dev, unsigned int txqueue);
340 #else
341 static void rtl8125_tx_timeout(struct net_device *dev);
342 #endif
13964 #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)
13965 static void
13966 rtl8125_tx_timeout(struct net_device *dev, unsigned int txqueue)
13967 #else
13968 static void
13969 rtl8125_tx_timeout(struct net_device *dev)
13970 #endif このあたりを 338 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)
13964 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0)
に書きかえて見る。
[rance@ruriko r8125-9.007.01]$ sudo ./autorun.sh
[sudo] rance のパスワード:
Check old driver and unload it.
Build the module and install
At main.c:160:
– SSL error:02001002:system library:fopen:No such file or directory: crypto/bio/bss_file.c:69
– SSL error:2006D080:BIO routines:BIO_new_file:no such file: crypto/bio/bss_file.c:76
sign-file: certs/signing_key.pem: No such file or directory
DEPMOD 4.18.0-310.el8.x86_64
load module r8125
Completed.
と、通ったようだ。
ドライバーソースのautorun.shをsudoに続いて発行するとドライバを適正位置まで配置してくれます。
[rance@ruriko r8168-8.049.02]$ ls /usr/lib/modules/4.18.0-310.el8.x86_64/kernel/drivers/net/ethernet/realtek/
8139cp.ko.xz 8139too.ko.xz r8125.ko r8169.ko.xz
r8169に8125が内包されてるようなのでのちほど除去