NICが認識しなくなった (2)
昨日 emerge -u world をやってからGentooマシンのNICが認識しなくなっていたけど、 さくっと復旧できた。 でも、NIC周りは最近さわっていなかったので、すっかりやり方を忘れていた。 どうせこれからも忘れちゃうだろうから、しっかりと日記に書いておこう。
まずは前提条件。 使用している NIC は、 CardBus タイプの LPC-CB-CLX。 CardBus は PCカード上で PCIデバイスとして認識される(このへんの理解は曖昧)。 そしてPCカードは、カーネルにモジュールとして組み込んだ pcmcia_cs が制御している。 さらに、hotplug サービスがNICを自動認識し、必要なドライバを組み込んでいる。 ちなみに、Linuxのカーネルは 2.6.3 を使っている。
さて、原因究明の開始。まずはPCカードとして見えているかどうかを確認する。
# cardctl ident Socket 0: no product info available Socket 1: product info: "Realtek", "Rtl8139" manfid: 0x0000, 0x024c function: 6 (network)
PCカードレベルでは、ちゃんと動作しているようだ。 次は CardBus 。これは lspci で確認する。
# lspci 0000:05:00.0 Ethernet controller: Realtek Semiconductor Co.,Ltd. RTL-8139/8139C/8139C+ (rev 10)
これも OK。 となると、原因は hotplug が NIC のドライバをロードできていないんじゃないか。ifconfig でも eth0 は見えないし、 lsmod でも NIC のドライバ (8139too) が見えない。 以前は、 /etc/hotplug/blacklist に 8139cp を登録することで認識されたんだけどね。 仕方ないので、手動で 8139too をロードする。 このやりかたも、すっかり忘れていたんだけど、「modprobe 8139too」とすればよい。
すると、見事に NIC が動作した。 何かの影響で、 hotplug が自動的に認識できなくなったんだろうなぁ。 毎回手動で認識させるのも面倒なので、Gentoo Linux on x86を参考にして、 /etc/modules.autoload.d/kernel-2.6 にドライバ名を記述しておいた。 難なく復旧できてよかった。