Linux をイーサネット接続で使うことに関連した質問のうち、 よく聞くものを集めました。 カードに固有な質問については、「メーカー別に」分けました。 あなたの知りたい問題は、きっと他の誰かによって質問されている (そして答えられている!) ことが多いでしょうから、 もしここに知りたい答えがなくても、 Dejanews. のようなニュースアーカイブなら見付かるかもしれません。
わたしのカード用の最新版ドライバや、試験的なアルファ版ドライバが 入手できると聞きました。どこにありますか?
「新しい」ドライバの最新版は、Donaldの ftp サイト
cesdis.gsfc.nasa.gov の /pub/linux
にあります。
ここにあるものは頻繁に変化していますから、探し回ってみてください。
あるいは WWW ブラウザで以下を訪ねるほうが、
お探しのドライバを見つけるには楽かもしれません。
WWW ブラウザはソースを勝手に変更して (例えばタブをスペースにしちゃったりとか) ダメにしちゃうことがあるので注意しましょう。 ftp を使うか、あるいはよくわからなければ、 少なくともダウンロードには FTP URL を使ってください。
さて、そのドライバが本当にアルファ版 (あるいはプレアルファ版) なら、 それなりの取扱いをしてください。つまり、解決できないことやわからない ことがあっても、文句を言わないこと。 インストールのやり方がわからないのなら、 プレアルファドライバのテストをすべきではありません。 またこのドライバのせいでマシンがダウンしても、文句を言わないでください。 文句の代わりに詳細なバグリポートをお送りください。 もっといいのはパッチですけど!
「使える」実験的なドライバ、アルファドライバのうちのいくつかは、
標準のカーネルソースツリーにも含まれるようになっています。
make config を実行すると、最初のほうで
``Prompt for development and/or incomplete code/drivers''
という質問をされるはずです。アルファ/実験的ドライバに関する
選択肢を出したいときには、ここで `Y' と答えてください。
Linuxで2つのイーサネットカードを動かすにはどうすればいいの?
この質問に対する答えは、ドライバをローダブルモジュールとして
使っているか、あるいはカーネルに直接組み込んでいるかによって
異なります。ほとんどの Linux ディストリビューションは、現在では
モジュール化ドライバを使っています。ドライバの組み合わせだけが
異なるたくさんのカーネルを配布しないですむからです。
一つのベースとなるカーネルを使い、
それぞれのユーザのシステムで必要とされる個別のドライバは、
システムがブートしてドライバモジュールファイル
(通常 /lib/modules/ におかれます)
がアクセス可能になってからロードされるようになっているのです。
ドライバがモジュールのとき:
PCI ドライバの場合は、
モジュールはインストールされているカードを全て自動的に
検知するはずです (もちろん対応するカードを、ですが)。
しかし ISA のカードでは、カードの探索 (probe) は危険な作業なので、
カードの I/O ベースアドレスを与えて、モジュールにどこを探せばよいかを
教えてあげる必要があるでしょう。この情報は
/etc/conf.modules ファイルに保存されます。
例として、二枚の ISA NE2000 カードがある場合を考えましょう。
一つは 0x300 に、もう一つは 0x240 とします。
この場合は /etc/conf.modules ファイルには以下のような
行を指定することになるでしょう。
alias eth0 ne
alias eth1 ne
options ne io=0x240,0x300
説明: ここで指定されていることは以下の通りです: 管理者
(あるいはカーネル) が modprobe eth0 あるいは modprobe eth1
を実行すると、 ne.o ドライバが eth0, eth1 それぞれに
対してロードされます。さらに ne.o モジュールがロードされるとき、
io=0x240,0x300 というオプションが与えられるので、
ドライバはカードを探す場所がわかるようになります。
0x が重要です。 DOS の世界でよく使われる 300h というような
表記は動作しません。 0x240 と 0x300 の順序をかえれば、
物理的なカード二枚に対する eth0, eth1 の関係を
逆にすることができます。
ほとんどの ISA モジュールドライバでは、複数のカードを扱えるよう、
この例のように複数の I/O の値をコンマで区切って与えることができます。
しかし 3c501.o モジュールのように (古い?) ドライバでは、
モジュールのロードあたり一つのカードしか使えないこともあります。
このような場合に両方のカードを検知するためには、モジュールを二回
ロードする必要があります。 /etc/conf.modules は以下のように
なるでしょう。
alias eth0 3c501
alias eth1 3c501
options eth0 -o 3c501-0 io=0x280 irq=5
options eth1 -o 3c501-1 io=0x300 irq=7
この例では -o オプションを用いて、それぞれロードされたモジュール
インスタンスに一意な名前をつけています。二つのモジュールを同じ名前で
同時にロードすることはできないからです。
irq= オプションも、カードのハードウェア IRQ 設定を指定するために
用いられています。
(この方法を、複数 I/O 値のコンマ区切り指定を許すカードに用いることもで
きますが、効率が悪いです。なぜなら必要のない場合でもモジュールが二回
ロードされることになるからです。)
最後の例として、 0x350 にある 3c503 カードと
0x280 にある SMC Elite16 カード (wd8013) を同時に使う
場合を示します。以下のようになります:
alias eth0 wd
alias eth1 3c503
options wd io=0x280
options 3c503 io=0x350
PCI のカードに対しては、通常は alias 行で
ethN インタフェースと対応するドライバを指定するだけでいいはずです。
PCI カードの I/O ベースアドレスは安全に検知されるからです。
利用できるモジュールは /lib/modules/`uname -r`/net
に保存されているはずです。ここで uname -r コマンドは
カーネルのバージョン (例えば 2.0.34) を与えます。
ここを探して、お使いのカードにあったドライバを探してください。
conf.modules が正しく設定されれば、
以下のようにしてテストできます。
modprobe ethN
dmesg | tail
ここで `N' にはテストしたいイーサネットインタフェースの番号を 入れてください。
ドライバをカーネルに組み込んでいる場合: ドライバをカーネルに組み込んでいる場合は、複数のイーサカードに 対するフックも全てカーネルに組み込まれていることになります。 しかしここで、デフォルトではひとつのカードしか自動探索 されないことに注意してください。 これは、神経質なカードを探索することによって起こりうる ブート時のハングア紊錣蠅seT を利用するところが多いでしょう。 10Base2 から他の 10Base ケーブルにアップグレードする方法がないからです。
種類の違うイーサネットケーブルを接続する場合のことについては、 ケーブル、同軸、ツイストペア の節をご覧ください。