KUSONEKOの見る世界

CentOS 7.3 で r8168 のドライバに変更してみた

マザーボードは N3150I-C を使用しています。
ネットワークインターフェースは、Realtek® RTL8111H が乗っていますが、
CentOS7 のインストール直後は、別のドライバが当たっています。

[root@server ~]# ethtool -i enp2s0
driver: r8169
version: 2.3LK-NAPI
firmware-version: rtl8168h-2_0.0.2 02/26/15
expansion-rom-version:
bus-info: 0000:02:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no

RTL8111H のドライバは、正しくは r8168 なので、これに変更します。

そのままコンパイルしてみるが…

Realtekのダウンロードセンターから、ドライバをダウンロードし、/rootに配置しておく。

[root@server ~]# tar xvf 0008-r8168-8.043.02.tar.bz2

[root@server ~]# cd r8168-8.043.02/

[root@server r8168-8.043.02]# make clean modules
~省略~
make[2]: ディレクトリ `/usr/src/kernels/3.10.0-514.2.2.el7.x86_64' に入ります
  CC [M]  /root/r8168-8.043.02/src/r8168_n.o
/root/r8168-8.043.02/src/r8168_n.c: 関数 ‘rtl8168_tx_vlan_tag’ 内:
/root/r8168-8.043.02/src/r8168_n.c:4297:9: エラー: 関数 ‘vlan_tx_tag_present’ の暗黙的な宣言です [-Werror=implicit-function-declaration]
         tag = (vlan_tx_tag_present(skb)) ?
         ^
/root/r8168-8.043.02/src/r8168_n.c:4298:15: エラー: 関数 ‘vlan_tx_tag_get’ の暗黙的な宣言です [-Werror=implicit-function-declaration]
               TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00;
               ^
/root/r8168-8.043.02/src/r8168_n.c: 関数 ‘rtl8168_fix_features’ 内:
/root/r8168-8.043.02/src/r8168_n.c:4407:30: エラー: ‘NETIF_F_ALL_CSUM’ が宣言されていません (この関数内での最初の使用)
                 features &= ~NETIF_F_ALL_CSUM;
                              ^
/root/r8168-8.043.02/src/r8168_n.c:4407:30: 備考: 未宣言の識別子は出現した各関数内で一回のみ報告されます
~省略~


ソースを編集してコンパイル

[root@server r8168-8.043.02]# vi src/r8168_n.c
4269行目
#elif LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)
を以下のように編集。
#elif LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)

4407行目
                features &= ~NETIF_F_ALL_CSUM;
を以下のように編集。
                features &= ~NETIF_F_CSUM_MASK;

[root@server r8168-8.043.02]# make clean modules

コンパイルできたので、以下のスクリプトを走らせる。
SSHが切れるが、しばらくしたら再接続。

[root@server r8168-8.043.02]# ./autorun.sh


新しいバージョンの確認

[root@server ~]# lsmod | grep r8168
r8168                 521915  0

[root@server ~]# ethtool -i enp2s0
driver: r8168
version: 8.043.02-NAPI
firmware-version:
expansion-rom-version:
bus-info: 0000:02:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no


初期RAMDISKの再作成

サーバ起動時のNICのドライバは、初期RAMDISK内のドライバを起動時にロードしているようで、初期RAMDISKが古いままだと、再起動後は古いドライバを使用するようです。
なので、初期RAMDISKを新しくする。

まずは現状の物をバックアップしてから作成する。

[root@server ~]# cd /boot/

[root@server ~]# mv initramfs-$(uname -r).img initramfs-$(uname -r).img.bak

[root@server ~]# dracut /boot/initramfs-$(uname -r).img


2018/01/08更新

最新のカーネルでコンパイルが通らなくなったので、新しく記事を起こしました。


ASUSTeK CPUオンボード マザーボード Intel Celeron N3150 搭載 N3150I-C 【mini-ITX】