Hatena::ブログ(Diary)

metastable blog

2010-02-07

カーネル・アップデート後も r8168 ドライバを使うには-2

| 23:15 |

カーネルアップデート後も r8168 ドライバを使うには」の内容を書き直し.理由は以下のとおり.

DKMS (Dynamic Kernel Module Support)

カーネルアップデートがあると,新しいドライバディレクトリには r8168 ドライバがないので,また手動でコンパイル&インストールし直してやる必要があるという問題が残る.

DKMS (Dynamic Kernel Module Support) を使えば,カーネルバージョンアップ時にドライバを自動コンパイル & インストールしてくれる.

まずは DKMS をインストール

apt-get install dkms

Realtek の web (http://www.realtek.com/) からダウンロードした "LINUX driver for kernel 2.6.x and 2.4.x (Support x86 and x64) 8.016.00, 2010/1/19," r8168-8.016.00.tar.bz2 を展開し,src ディレクトリ以下を "/usr/src/パッケージ名-バージョン名" (今回は /usr/src/r8168-8.016.00) に移動.

$ tar xvf r8168-8.016.00.tar.bz2
$ mv r8168-8.016.00/src /usr/src/r8168-8.016.00

/usr/src/r8168-8.016.00/Makefile を編集.src 以下をトップディレクトリとしたため.

#       $(MAKE) -C $(KDIR) SUBDIRS=$(PWD)/src modules
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

同じディレクトリに設定ファイル dkms.conf を用意する.http://dag.wieers.com/rpm/packages/dkms-r8168/dkms-r8168.spec を参考にすると,こんな内容でよいのではないだろうか.

PACKAGE_NAME="r8168"
PACKAGE_VERSION="8.016.00"
MAKE[0]="make KVER=${kernelver}"
CLEAN[0]="make clean"
BUILT_MODULE_NAME[0]="r8168"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net"
AUTOINSTALL="YES"

ソースと設定ファイルを登録,コンパイル & インストールを行う.

dkms add -m r8168 -v 8.016.00
dkms build -m r8168 -v 8.016.00
dkms install -m r8168 -v 8.016.00

リブートすると,

* Running DKMS auto installation service for kernel 2.6.31-19-server
*   r8168 (8.016.00)...
  ... done

今度は成功した.dmesg の関連部分は以下のとおり.

r8168 Gigabit Ethernet driver 8.016.00-NAPI loaded
r8168 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
r8168 0000:01:00.0: setting latency timer to 64
  alloc irq_desc for 29 on node 0
  alloc kstat_irqs on node 0
r8168 0000:01:00.0: irq 29 for MSI/MSI-X
r8168: This product is covered by one or more of the following patents: US5,307,459, US5,434,872, US5,732,094, US6,570,884, US6,115,776, and US6,327,625.
eth0: Identified chip type is 'RTL8168D/8111D'.
eth0: RTL8168B/8111B at 0xffffc90000340000, 00:27:0e:xx:xx:xx, IRQ 29
r8168  Copyright (C) 2010  Realtek NIC software team <nicfae@realtek.com> 
This program comes with ABSOLUTELY NO WARRANTY; for details, please see <http://www.gnu.org/licenses/>. 
This is free software, and you are welcome to redistribute it under certain conditions; see <http://www.gnu.org../licenses/>. 
...
r8168: eth0: link down
ADDRCONF(NETDEV_UP): eth0: link is not ready
...
r8168: eth0: link up
ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

DKMS のトラブル時は

ログが /var/log/dkms 以下のドライバ名,ドライバカーネルのバージョン名に対応したディレクトリにあるので,参考になる (/var/lib/dkms/r8168/8.016.00/2.6.31-19-server/x86_64/log/make.log など).

前回の問題は,DKMS が /usr/src/r8168-8.016.00 直下に r8168.ko が生成されることを想定しているのに,サブディレクトリ src 以下に生成していたためだと思われる.手作業で /lib/modules 以下にコピーした r8168.ko を認識していたようで気づかなかった.

そもそもなぜ自動判別に失敗するのか

なぜ RTL8111D ドライバの自動判別に失敗するのかに続く.

キーワード

  • D510, D510MO, BOXD510MO, Mount Olive
  • D945GCLF, D945GCLF2, D945GCLF2D, D945GSEJT
  • Ubuntu, Debian, Linux, リナックス
  • RTL8111, RTL8111B, RTL8111C, RTL8111CP, RTL8111D(L), RTL8111DP, RTL8111E
  • RTL8168, RTL8168B, RTL8168C, RTL8105E