R8168ドライバをkernel3.15で認識させる

というわけで、久しぶりにドライバ更新で引っかかってしまったのでネタにします。

ちょっと思っているのは、いまだに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 ----

バージョンが進むごとにフラグが変わっていくのでできるだけ最新の物を使った方がいいですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この記事のトラックバック用URL