というわけで、久しぶりにドライバ更新で引っかかってしまったのでネタにします。
ちょっと思っているのは、いまだにR8168が乗っているマシンをサーバー機として使用している人(あるいは部署)ってどれくらいあるのでしょうかね・・・。ちょっと気になるところです。自分も今のところは使い続ける予定ですが何かあると新しくするかもしれませんし。そうなるとR8168に関する記事も書くことはなくなりますからね・・・。
というわけでさっさとパッチコード
linux-3.15_r8168_8.038.00.patch
*** r8168_n.c.orig 2014-07-28 09:21:19.619201658 +0900 --- r8168_n.c 2014-07-28 09:30:00.000000000 +0900 *************** static void rtl8168_schedule_work(struct *** 19119,19125 **** --- 19119,19129 ---- { struct rtl8168_private *tp = netdev_priv(dev); + #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,15,1) + INIT_DELAYED_WORK(&tp->task, task); + #else PREPARE_DELAYED_WORK(&tp->task, task); + #endif schedule_delayed_work(&tp->task, 4); } #endif
今回は面倒なので8.038系をベースに作っています。他のバージョンの人は読み替えてください。
まあ、読み替えの必要もほとんど無く、PREPARE_DELAYED_WORKとなっている部分をINIT_DELAYED_WORKにすればOKというレベルの変更です。適当なテキストエディタで検索して修正できるレベルですね。ただ、これについてはこちらも適当に検索をかけて英語のQ&Aサイトにこうすれば良い、ということが書いてあったので私の環境で試してみたら通った、というレベルの信頼性なのが微妙なところです。相変わらずですがこの件に関しては自己責任でお願います。また、ドライバについてはできる限り最新版を使った方が良いと思います。こういう修正点も少なくて済みますので。
バージョンを上げたのでDKMSやらMakefileやらも更新
DKMSのデータベース更新は単純に一度削除して再度追加し直しただけだったりします。今回はちょうどyumによるアップデートを行った直後であり、かつ再起動する前なのでこういうのもありだと思います。Makefileの方はやっぱりいつもどおりの書き方が継続されたままです。英語で助言でもした方が良いのでしょうが面倒+やり方は分かっているので手動変更だけで済ませています。ちなみに今回(8.038系)のDKMS対応版Makefileはこちら。今回はパッチファイル形式です。
Makefile_r8168_8.038.00.patch
*** Makefile.orig 2014-01-08 17:56:43.000000000 +0900 --- Makefile 2014-07-28 09:30:00.000000000 +0900 *************** CONFIG_DOWN_SPEED_100 = n *** 34,66 **** CONFIG_ASPM = y ENABLE_S5WOL = y ! ifneq ($(KERNELRELEASE),) ! obj-m := r8168.o ! r8168-objs := r8168_n.o r8168_asf.o rtl_eeprom.o rtltool.o ! ifeq ($(ENABLE_DASH_SUPPORT), y) ! r8168-objs += r8168_dash.o ! EXTRA_CFLAGS += -DENABLE_DASH_SUPPORT ! endif ! EXTRA_CFLAGS += -DCONFIG_R8168_NAPI ! EXTRA_CFLAGS += -DCONFIG_R8168_VLAN ! ifeq ($(CONFIG_DOWN_SPEED_100), y) ! EXTRA_CFLAGS += -DCONFIG_DOWN_SPEED_100 ! endif ! ifeq ($(CONFIG_ASPM), y) ! EXTRA_CFLAGS += -DCONFIG_ASPM ! endif ! ifeq ($(ENABLE_S5WOL), y) ! EXTRA_CFLAGS += -DENABLE_S5WOL ! endif ! else BASEDIR := /lib/modules/$(shell uname -r) ! KERNELDIR ?= $(BASEDIR)/build ! PWD :=$(shell pwd) ! DRIVERDIR := $(shell find $(BASEDIR)/kernel/drivers/net -name realtek -type d) ! ifeq ($(DRIVERDIR),) ! DRIVERDIR := $(BASEDIR)/kernel/drivers/net ! endif ! RTKDIR := $(subst $(BASEDIR)/,,$(DRIVERDIR)) .PHONY: all all: clean modules install --- 34,70 ---- CONFIG_ASPM = y ENABLE_S5WOL = y ! obj-m := r8168.o ! r8168-objs := r8168_n.o r8168_asf.o rtl_eeprom.o rtltool.o ! ifeq ($(ENABLE_DASH_SUPPORT), y) ! r8168-objs += r8168_dash.o ! EXTRA_CFLAGS += -DENABLE_DASH_SUPPORT ! endif ! EXTRA_CFLAGS += -DCONFIG_R8168_NAPI ! EXTRA_CFLAGS += -DCONFIG_R8168_VLAN ! ifeq ($(CONFIG_DOWN_SPEED_100), y) ! EXTRA_CFLAGS += -DCONFIG_DOWN_SPEED_100 ! endif ! ifeq ($(CONFIG_ASPM), y) ! EXTRA_CFLAGS += -DCONFIG_ASPM ! endif ! ifeq ($(ENABLE_S5WOL), y) ! EXTRA_CFLAGS += -DENABLE_S5WOL ! endif ! ! ifeq ($(KERNELRELEASE),) BASEDIR := /lib/modules/$(shell uname -r) ! else ! BASEDIR := /lib/modules/$(KERNELRELEASE) ! endif ! ! KERNELDIR ?= $(BASEDIR)/build ! PWD :=$(shell pwd) ! DRIVERDIR := $(shell find $(BASEDIR)/kernel/drivers/net -name realtek -type d) ! ifeq ($(DRIVERDIR),) ! DRIVERDIR := $(BASEDIR)/kernel/drivers/net ! endif ! RTKDIR := $(subst $(BASEDIR)/,,$(DRIVERDIR)) .PHONY: all all: clean modules install *************** clean: *** 77,81 **** install: $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) INSTALL_MOD_DIR=$(RTKDIR) modules_install - endif - --- 81,83 ----
バージョンが進むごとにフラグが変わっていくのでできるだけ最新の物を使った方がいいですね。