なぜ RTL8111D ドライバの自動判別に失敗するのか
Intel D510MO に搭載されている NIC, Realtek RTL8111D 用 Linux ドライバは,本来 r8168 を使うべきところ,自動判別では r8169 が使われてしまう.
その理由は,ドライバ r8169 に RTL8111D で使えると間違って書いてあるからだ,という話.
ドライバの alias が不正確
PnP の昔ではあるまいし,品種ごとにシリアル番号 (PCI デバイス ID) が付与されているのに,ドライバを間違えるとはどういうことなのだろうか?
ドライバには,対応デバイスの PCI デバイス ID 一覧表が含まれている.r8168 に RTL8111D のデバイス ID が含まれているのは正しい.
$ modinfo r8168 filename: /lib/modules/2.6.31-19-server/updates/dkms/r8168.ko version: 8.016.00-NAPI ... description: RealTek RTL-8168 Gigabit Ethernet driver ... alias: pci:v000010ECd00008168sv*sd*bc*sc*i* <- これ
しかし r8169 は RTL8111D に対応していないのに,RTL8111D のデバイス ID がデバイス alias に含まれている.
$ modinfo r8169 filename: /lib/modules/2.6.31-19-server/kernel/drivers/net/r8169.ko version: 2.3LK-NAPI ... description: RealTek RTL-8169 Gigabit Ethernet driver ... alias: pci:v000010ECd00008169sv*sd*bc*sc*i* alias: pci:v000010ECd00008168sv*sd*bc*sc*i* <- 重複 alias: pci:v000010ECd00008167sv*sd*bc*sc*i*
さらに,一応は通信できてしまうので,問題が認識されない
間違って r8169 がロードされて,全然通信できないのなら問題がすぐ認識されるが,一応は使えてしまうので問題が認識されず,対処もされない.結果,微妙な問題が起きる,ということではないだろうか.
小さなファイルなら問題は無いが、大きなファイルになると、転送途中に必ずといって良いほど接続が途切れてしまう。
http://tokcs.com/blog/2010/01/10/server-lan/
3GB 程度のファイルをコピーしてみると、コピーが途中で止まってしまう現象が発生した。http://www.natzworks.com/digital/entries/2009/000222.html
ドライバ誤認識の理由は
RTL8111D の device ID が r8169 の device alias に間違って含まれているから.でもそれで一見使えてしまうのでなかなか直らない,というお話でした.