NIC地獄/カーネルバージョンアップ/でもダメ

NICのインストールで見事にドツボってしまった。Webを彷徨い、どうもカーネルのバージョンを新しくする必要がありそうだと、ちょうど気が付いた時、見かねた友人Sが関連文書のありかをメールしてくれた。


RealTek8029とカーネルのバージョン

文書のURLと中身は以下の通り。

http://sunsite.unc.edu/LDP/HOWTO/Ethernet-HOWTO-3.html#ss3.4

原文 いいかげんな訳
3.4 Problems with NE1000 / NE2000 cards (and clones)

Problem: PCI NE2000 clone card is not detected at boot with v2.0.x.

Reason: The ne.c driver up to v2.0.30 only knows about the PCI ID number of RealTek 8029 based clone cards. Since then, several others have also released PCI NE2000 clone cards, with different PCI ID numbers, and hence the driver doesn't detect them.

Solution: The easiest solution is to upgrade to a v2.0.31 (or newer) version of the linux kernel. It knows the ID numbers of about five different NE2000-PCI chips, and will detect them automatically at boot or at module loading time. If you upgrade to 2.0.34 (or newer) there is a PCI-only specific NE2000 driver that is slightly smaller and more efficient than the original ISA/PCI driver.

3.4 NE1000/NE2000カード(クローンカード)の問題

問題:PCI NE2000クローンカードがv2.0.xでブート時に検出されない。

理由:v2.0.30までのne.cドライバは、RealTek 8029ベースのクローンカードのPCI IDナンバーしか認識しない。従って、その後リリースされたPCI IDナンバーの異なる幾つかのPCI NE2000クローンカードは検出されない。

解決:最も簡単な解決方法はLinuxのカーネルのバージョンをv2.0.31以上に上げることである。これで、5つのNE2000-PCIチップのIDナンバーが認識され、ブート時またはモジュールのロード時に自動的に検出される。また、v2.0.34以上にすれば、元のISA/PCIドライバより少し小さく、より有効なPCI専用のNE2000ドライバもある。

現在のカーネルが2.0.30なので、ちょうど一歩手前だった訳である。

ちょっと気になるのは、問題のRealTelkのチップ名8029に、ASが付くのと付かないのがあることだが、違いはよく分からない。Linuxは(/proc/pci上では)8029と認識しているようだが、チップのプリントは8029ASであり、RealTekのWeb情報では、色々なOS上でドライバを共用できるようである。

カーネルのバージョンアップ方法

さて、カーネルのバージョンアップであるが、これがまた分からない。手持ちの入門書等では、新規インストールに関することが中心で、カーネルのバージョンアップについてはあまり書いていない。本屋で見たり、Webを彷徨ったりで得た情報では、カーネルのバージョンアップには次の方法があるらしい。

1.ソースを入手してコンパイルする

2.パッチをあてる

3.RPM形式

カーネルのバージョンアップは、構築に必要なgcc、コマンド、コマンドが使用するライブラリもバージョンアップする必要なときがあるので、/usr/src/linux/READMEをよく読むこととある。

RPMでカーネルのバージョンアップ

また、Webの情報では、Linux Japan Vol.6のCDに、RPM形式のカーネル2.0.32があるとのこと。なんだ、元々使ったCDではないか。1998.10.11現在、最新のカーネルは2.0.35だが、何だかRPM形式は楽そうなので、これをやってみる。

マウントしたCD-ROMの/RHL42/Updates/forExpertには次のファイルがある。

kernel-2.0.32-1.i386.rpm
kernel-headres-2.0.32-1.i386.rpm
kernel-modules-2.0.32-1.i386..rpm
kernel-source-2.0.32-1.i386.rpm

control-panelからPackage Managementを起動し、ConfigureでPackage pathを/mnt/cdrom/RHL42/Updates/forExpertに変更する。次にAvailableを選択すると、Available Packagesウインドウが開き、Utilities、Base、Applications、Daemonsという4つのディレクトリが表示される。ここから、BaseKernelとダブルクリックで開いていくと、kernel 2.0.32-1、kernel-headres 2.0.32-1、kernel-modules-2.0.32-1、kernel-source 2.0.32-1という宝箱にたどり着く(以上の4つ以外にも宝箱はあるがそれは無視)。

宝箱をクリックして赤枠で囲み、Installボタンを押すと、installingウインドウが開き、インストールが始まる。とりあえず上手くいったようである。CloseExitでPackage Managementを終了する。

さて、ここで、コンパイルは必要なのだろうか。分からないのでとりあえずrebootしてみる。ブート中の文字を見ていると、またDelaying eth0 initializationが出ている。う〜む。

起動した画面には次のようで、カーネルのバージョンアップは一応できたようである。

Red Hat Linux release 4.2 (Biltmore)
Kernel 2.0.32 on an i586

しかし、やはりifconfigで表示されるのはloだけだ。

ブートオプション

LILOの起動時オプションを付けてみる。

LILO: linux ether=9,0xe000,eth0

しかし、これもダメ。これではおそらく、/etc/lilo.confにappend="ether=9,0xe000,eth0"を追加してみてもダメだろう。

ソースコードの確認

/usr/src/linux/drivers/net/ne.cには、

{PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8029},

/usr/src/linux/drivers/pci/pci.cには、

DEVICE( REALTEK, REALTEK_8029, "8029"),

という記述がある。いいはずだ。

/etc/conf.modulesにalias eth0 neと記述

rebootで再起動中、sendmailで止まったところで画面 を見ると次のメッセージが新しく出ている。

loading device 'eth0'...
ne.c: No PCI cards found. Use "io=0xNNN" value(s) for ISA cards.
OCT 13 01:14:42 insmod: Initialization of ne failed.
Delaying eth0 initialization.

以前とちょっと違うが、結果はダメで同じである。


最初に戻る