KUSONEKOの見る世界

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

最近、intel CPUの脆弱性でカーネルのアップデートがありましたが、
その後、r8168ドライバのコンパイルが出来なくなりましたので、
新たに記事を起こしておきます。

[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

[root@server ~]# uname -r
3.10.0-693.11.6.el7.x86_64

ひとまずmakeしてみる

Realtekのダウンロードセンターから、『LINUX driver for kernel up to 4.7』ドライバをダウンロードし、/rootに配置する。
[root@server ~]# tar vjxf 0010-r8168-8.045.08.tar.bz2

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

[root@server r8168-8.045.08]# make
(略)
make[2]: ディレクトリ `/usr/src/kernels/3.10.0-693.11.6.el7.x86_64' に入ります
  CC [M]  /root/r8168-8.045.08/src/r8168_n.o
In file included from /root/r8168-8.045.08/src/r8168_n.c:80:0:
/root/r8168-8.045.08/src/r8168.h:47:20: エラー: ‘ether_addr_copy’ が再定義されました
 static inline void ether_addr_copy(u8 *dst, const u8 *src)
                    ^
In file included from /root/r8168-8.045.08/src/r8168_n.c:42:0:
include/linux/etherdevice.h:231:20: 備考: 前の ‘ether_addr_copy’ の宣言はここです
 static inline void ether_addr_copy(u8 *dst, const u8 *src)
                    ^
(略)

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

[root@server r8168-8.045.08]# vi src/r8168.h
46行目
#if LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)

#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)

[root@server r8168-8.045.08]# make
(略)
make[2]: ディレクトリ `/usr/src/kernels/3.10.0-693.11.6.el7.x86_64' に入ります
  CC [M]  /root/r8168-8.045.08/src/r8168_n.o
  CC [M]  /root/r8168-8.045.08/src/r8168_asf.o
  CC [M]  /root/r8168-8.045.08/src/rtl_eeprom.o
  CC [M]  /root/r8168-8.045.08/src/rtltool.o
  LD [M]  /root/r8168-8.045.08/src/r8168.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/r8168-8.045.08/src/r8168.mod.o
  LD [M]  /root/r8168-8.045.08/src/r8168.ko
(略)

成功したので、autorun.shを実行する
[root@server r8168-8.045.08]# ./autorun.sh
(SSHが切れるが、しばらくしたら再接続する)

[root@server ~]# ethtool -i enp2s0
driver: r8168
version: 8.045.08-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の再作成

初期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