カーネル・アップデート後も r8168 ドライバを使うには-2
「カーネル・アップデート後も r8168 ドライバを使うには」の内容を書き直し.理由は以下のとおり.
- きちんと DKMS を使ってインストールできていなかった.kernel 2.6.31-19 リリースで表面化.
- ドライバの新バージョン 8.016.00 が出た
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 を認識していたようで気づかなかった.