RTL8111D 用ドライバをインストールするには (1)

Intel 新 Atom MB (D510MO) で Ubuntu 9.10 を使うには の続き.
D510MO に Ubuntu Linux (9.10 server, 64bit) をインストールする際,搭載されている GbE NIC, Realtek RTL8111D 用のドライバの入れ方について.

症状: 自動判別では間違ったドライバが入ってしまう

Ubuntu 9.10 server, 64bit 版を入れてはみたものの,どうもネットワーク接続が不安定.GbE ハブを疑ったりしていたものの,どうやら間違ったデバイス・ドライバがインストールされるという問題にあたっているようだ.

D510MO に使われている GbE NICRealtek RTL8111D.対応するドライバは RTL8168/RTL8111 用のドライバ r8168.ただし自動認識させると,似て非なる r8169 ドライバが使われてしまう.

dmesg の結果から関連する行:

r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
r8169 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
r8169 0000:01:00.0: setting latency timer to 64
  alloc irq_desc for 29 on node 0
  alloc kstat_irqs on node 0
r8169 0000:01:00.0: irq 29 for MSI/MSI-X
eth0: RTL8168d/8111d at 0xffffc9000034c000, 00:27:0e:XX:XX:XX, XID 281000c0 IRQ 29
...
r8169: eth0: link up

lsmod の結果から関連する行:

Module                  Size  Used by
r8169                  38884  0 
mii                     6368  1 r8169

これは以前よりよく知られた問題のようで,いくつも報告がある.例えば,

CentOS 5.2のネットワークインストールが途中で止まったまま動かなくなる現象が数回続く。
http://www.greedy.jp/blog/nowhereman/200901/31/200145

CentOSを入れたがNICを認識しない。
http://d.hatena.ne.jp/hkano/20081014/1223910948

RX droppedが猛烈な勢いでカウントアップ。1分間も放置すると500万とかそれくらいの勢いで上昇しまくりんぐ
http://piro791.blog.so-net.ne.jp/2008-10-01

ただし私のところでは,上で報告されているように完全にダメというわけではなく,使えるときは使える.RX dropped が観測されることもない.インストールやアップデートは終了しているわけだし.
とはいえ以下のような気づきにくい問題もあるらしいので,直しておきたい.

小さなファイルなら問題は無いが、大きなファイルになると、転送途中に必ずといって良いほど接続が途切れてしまう。
http://tokcs.com/blog/2010/01/10/server-lan/

3GB 程度のファイルをコピーしてみると、コピーが途中で止まってしまう現象が発生した。http://www.natzworks.com/digital/entries/2009/000222.html

r8168 ドライバを使うには

本家 Realtek からドライバをダウンロードしてインストールすればよい (以下,カーネルやドライバのバージョン名は適宜読み替えてください).

Realtek の web (http://www.realtek.com/) から

  • トップページ > ダウンロードセンター > ネットワ-ク向けIC > Network Interface Controllers > 10/100/1000M Gigabit Ethernet > PCI Express > Software

を選択し,r8168-8.015.00.tar.bz2, "LINUX driver for kernel 2.6.x and 2.4.x (Support x86 and x64) 8.015.00, 2009/11/27" をダウンロード, README に従う.

$ tar xvf r8168-8.015.00.tar.bz2
$ cd r8168-8.015.00
$ make clean modules
$ make install (sudo で)

すると以下のコマンドが自動実行され,r8168.ko がインストールされる.

install -m 744 -c r8168.ko /lib/modules/2.6.31-17-server/kernel/drivers/net/

ドライバ一覧を作り直し,r8169 ドライバを削除,r8168 ドライバを認識させる.

$ depmod -a
$ rmmod r8169 mii
$ modprobe r8168

あとはネットワーク関係を再起動すれば,問題なく使えるようになる.

$ /etc/init.d/networking restart

lsmod で r8168 ドライバが認識されていることが確認できる.
のだが,リブートすると,r8169 ドライバに戻ってしまう.

リブート後も r8168 ドライバを使うには

RTL8111 用 Linux ドライバをインストールするには (2)に続く.

(2010.05.05 追加)

このような指摘もあるようです.

Atom 64bit+RTL8168/8111」の組み合わせが問題?
http://ameblo.jp/mikurins/entry-10523479313.html