Linux Kernel 2.2 Documentation:
/usr/src/linux/Documentation/networking/net-modules.txt
networking/net-modules.txt
Linux ネットワークドライバモジュール
[プレインテキスト版]
- 原著作者: Matti Aarnio <matti.aarnio@utu.fi>
- 翻訳者: Unknown
- バージョン: 2.2.0
- 翻訳日時: 1999/01/29
Wed 2-Aug-95 <matti.aarnio@utu.fi>
Linux ネットワークドライバモジュール
この文書を一つ上のディレクトリにある "README.modules"と勘違いしな
いように。"README.modules" はモジュールについての全般的な解説で、
この文書はネットワークデバイス用のドライバモジュールについてのみの
解説です。
この文書では、Linux 用のネットワークドライバを INSMOD する時(*)に
指定可能なオプション(もしあれば)と各種モジュールに定義されているデ
フォルトの設定値を解説します。
いくつかのモジュールには隠し(文書化されていない)オプションがありま
す。それらを公開していない理由はユーザレベルでは特に使う必要がない
からです(ドライバの開発者には便利ですが、その他の人には混乱の種に
なりますので)。
多くの場合、insmod する際にはカードのアドレスは明示的に与えるよう
にして、「自動検出機能は使わない方が安全です」。
現在では、ほとんどのカードに、そのカードをチェックする ベースアド
レスがいくつか設定されています(いろいろ理由がありますが、自動検出
を避けるため、というのもその一つです)。あらかじめ指定されている ベー
スアドレスが実際の設定と一致しない場合は insmod 時に "io=0xXXX" と
いうパラメータを指定して、設定に合ったアドレスを与えてください。
冒険好きな方なら、"io=0" というパラメータを与えてアドレスを自動検
出させてみるのも面白いかも知れません。でも、実際のシステム(live
system)では、自動検出は危険なことが多いようです(カードのアドレスが
分らない場合、自動検出させてみて、クラッシュから回復後、得られた
I/O アドレスを insmod に渡す、という手もあります)
--------------------------
(*)「INSMOD 時」というのは、/sbin/insmod でモジュールをロードする
際にオプションパラメータを与えることができる、という意味です。
詳しくは "man insmod" してみてください。
--------------------------
8390 由来のネットワークモジュール (Paul Gortmaker, Nov 12, 1995)
--------------------------
(smc-ultra, ne, wd, 3c503, hp, hp-plus, e2100, ac3200 を含む)
8390 系のネットワークドライバは一つのモジュールを繰り返しロードしなく
も複数の設定を使えるようになっています(メモリの効率的な利用!)。この機
能は、複数のカンマで区切った値を与えることで実現します。例えば:
insmod 3c503.o io=0x280,0x300,0x330,0x350 xcvr=0,1,0,1
この例では、一つのモジュールが 4 つの 3c503 カードをコントロールし、
card 2 と card 4 は外部トランシーバを使います。"insmod" のマニュアルに
複数の値をコンマでくぎって与える方法が説明していあります。
自動検出するのではなく、"io=" でベースアドレスを指定することを「強くお
勧めします」。"io=" が指定されなかった場合、ISA ドライバは、「自動検出
は勧められない」旨のメッセージを出力して、いやいやながら「一つのカード
だけ」自動検出します。複数のカードを使用したい場合は
"io=0xNNN,0xQQQ,..."と指定してやる必要があります。
ne モジュールだけは例外です。NE2000 も 8390 チップを使っていますが、バ
スに接着する特殊な機能と RAM を持っています。このため、ne ドライバを自
動検出することは他のドライバよりも難しく、システムの起動時も他の 8390
由来カードの検出が全て終ってから ne ドライバを検出するようにしています
(ne ドライバが他の 8390 由来のカードに間違われないように)。モジュール
としてインストールする場合、ne ではない 8390 カードが既に検出されてい
るかどうかを確認する手段がありません。そのため ne モジュールをロードす
る場合は "io=0xNNN" という指定を insmod に渡すことが必須になっています。
ne モジュールは自動検出できません。
IRQ が激しく活動している動作中のマシンで IRQ を自動検出させるのも信頼
性の面からは問題です。ne2000 のような EEPROM や設定レジスタから IRQ の
設定を取得できないようなカードの場合、insmod の際に "irq=M" という指定
もしておく方がいいでしょう。
----------------------------------------------------------------------
カード/モジュールリスト - 設定可能なパラメータとデフォルト値
----------------------------------------------------------------------
3c501.c:
io = 0x280 IO ベースアドレス
irq = 5 IRQ
(チェックするポート: 0x280, 0x300)
3c503.c:
io = 0 ("io=0xNNN"の設定をしないと警告を出す)
irq = 0 (IRQ はドライバが自動検出する)
xcvr = 0 (外付けのトランシーバを使う場合は xcvr=1 にする)
(チェックするポート:0x300, 0x310, 0x330, 0x350, 0x250, 0x280,
0x2A0,0x2E0)
3c505.c:
io = 0x300
irq = 0
(チェックするポート: 0x300, 0x280, 0x310)
3c507.c:
io = 0x300
irq = 0
(チェックするポート:0x300, 0x320, 0x340, 0x280)
3c509.c:
io = 0
irq = 0
(モジュールのロード時に自動検出するのは EISA マシンでしかちゃんと
機能しません。「ISA の ID-PROBE 機能は信頼できません」。現時点では、
ISA バスのマシンで自動検出したいならばドライバをカーネルに組みこみ
ましょう。)
8390.c:
(公開されているオプションはありません。いくつかのドライバモジュー
ルがこのモジュールを利用しています)
ac3200.c:
io = 0 (0x1000 から 0x8fff まで 0x1000 刻みにチェックする)
irq = 0 (設定レジスタから読みこむ)
(EISA の検出法..)
apricot.c:
io = 0x300 (変更できない)
irq = 10
arcnet.c:
io = 0
irqnum = 0
shmem = 0
num = 0
これらの値は INSMOD する際に手動で指定すること
(チェックの際は以下のアドレスを調べる:
お勧めのアドレスは次の通り:
0x300, 0x2E0, 0x2F0, 0x2D0
他に可能なアドレスとしては:
0x200, 0x210, 0x220, 0x230, 0x240, 0x250, 0x260, 0x270,
0x280, 0x290, 0x2A0, 0x2B0, 0x2C0, 0x310, 0x320, 0x330,
0x340, 0x350, 0x360, 0x370, 0x380, 0x390, 0x3A0, 0x3E0, 0x3F0 )
at1700.c:
io = 0x260
irq = 0
(チェックするポート:0x260, 0x280, 0x2A0, 0x240, 0x340, 0x320,
0x380, 0x300)
atp.c: まだモジュール化されていません
(チェックするポート:0x378, 0x278, 0x3BC;
IRQ は 5 か 7 に固定)
de4x5.c:
io = 0x000b
irq = 10
is_not_dec = 0 -- DEC 21040/21041/21140 チップを使っているが DEC
製のカードで無い場合、これを 1 にする。
(EISA と PCI では自動検出)
de600.c:
de600_debug = 0
(IOポート 0x378, IRQ 7 は lpt1 と同じ。どちらを使うかはカーネルの
コンパイル時に設定する)
de620.c:
bnc = 0, utp = 0 <-- メディアタイプをどちらかに強制的に設定
io = 0x378 (コンパイル時にも設定可能)
irq = 7
depca.c:
io = 0x200
irq = 7
(チェックするポート:ISA: 0x300, 0x200;
EISA: 0x0c00)
dummy.c:
オプションは無い。
e2100.c:
io = 0 ("io=0xNNN" オプションを指定しなかった場合警告する)
irq = 0 (IRQ はドライバがソフトウェア的に検出する)
mem = 0 (デフォルトでは 0xd0000 からの部分を使い、オプションで
指定すればそちらを使う。)
xcvr = 0 (xcvr=1 の場合、外部トランシーバを使う)
(チェックするポート:0x300, 0x280, 0x380, 0x220)
eepro.c:
io = 0x200
irq = 0
(チェックするポート:0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320,
0x340, 0x360)
eexpress.c:
io = 0x300
irq = 0 (IRQ は EEPROM から読みこむ)
(チェックするポート:0x300, 0x270, 0x320, 0x340)
eql.c:
(パラメータなし)
ewrk3.c:
io = 0x300
irq = 5
(モジュール化した場合自動検出しません。
EISA バスの場合は EISA の検出機能を使う
カーネルに組みこんだ場合、ISA バスの以下のアドレスをチェックする:
0x100, 0x120, 0x140, 0x160, 0x180, 0x1A0, 0x1C0,
0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0,
0x2E0, 0x300, 0x340, 0x360, 0x380, 0x3A0, 0x3C0)
hp-plus.c:
io = 0 ("io=0xNNN" オプションを指定しなかった場合警告を出す)
irq = 0 (IRQ は設定用レジスタから読みこむ)
(チェックするポート:0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 0x340)
hp.c:
io = 0 ("io=0xNNN" オプションを指定しなかった場合警告を出す)
irq = 0 (IRQ は設定用レジスタから読みこむ)
(チェックするポート:0x300, 0x320, 0x340, 0x280, 0x2C0, 0x200, 0x240)
hp100.c:
hp100_port = 0 (IO-base アドレス)
(EISAバスの場合は EISA の検出機能を使う;
ISAバスの場合、0x100 から 0x3E0 まで 0x020 ごとにチェックする)
ibmtr.c:
io = 0xA20
(チェックするポート:0xA20, 0xA24 -- Ok,
0x220, 0x224,これらはIBM スタイル..)
lance.c: モジュール化されていない。
(PCI と ISA は自動検出:PCI の場合は "CONFIG_PCI" を設定すること)
(チェックするポート:0x300, 0x320, 0x340, 0x360)
loopback.c: これはカード用のドライバではなくカーネルに組みこむ機能
ne.c:
io = 0 (明示的に "io=0xNNN" という設定が必要)
irq = 0 (自動IRQ 機能を使って IRQ を設定しようとする)
(チェックするポート:0x300, 0x280, 0x320, 0x340, 0x360)
net_init.c: これはカード用のドライバではなくカーネルに組みこむ機能
ni52.c: まだモジュール化されていません。
(チェックするポート:0x300, 0x280, 0x360, 0x320, 0x340)
チェックするアドレス: 0xD000, 0xD2000, 0xC8000, 0xCA000, 0xD4000,
0xD6000, 0xD8000)
ni65.c: まだモジュール化されていません。16MB 以上のメモリは使えない
バグがあります。
(チェックするポート:0x300, 0x320, 0x340, 0x360)
pi2.c:まだモジュール化されていません(実は非標準的な形のモジュール)。
現時点では一枚のカードしかサポートしません。
(検出するポート: 0x380, 0x300, 0x320, 0x340, 0x360, 0x3A0)
plip.c:
io = 0
irq = 0 (デフォルトでは、ポート 0x3bc に IRQ 5 を使い、ポート
0x387 に IRQ 7を使い、0x278 に IRQ 2 を使います)
(チェックするポート: 0x278, 0x378, 0x3bc)
ppp.c:
オプションはありません(ppp-2.2+ にはいくつかのオプションがあります。
ppp-2.1.2d にはありません)
seeq8005.c: まだモジュール化されていない。
(チェックするポート: 0x300, 0x320, 0x340, 0x360)
sk_g16.c: まだモジュール化されていない。
(チェックするポート: 0x100, 0x180, 0x208, 0x220m 0x288,
0x320, 0x328, 0x390)
skeleton.c: ネットワークドライバのサンプル
slhc.c:
設定可能なパラメータはありません
slip.c:
slip_maxdev = 256 (slip.h で定義している SL_NRUNIT のデフォルト値)
smc-ultra.c:
io = 0 ("io=0xNNN"を指定しなければ警告を出す)
irq = 0 (IRQ は EEPROM から読みこむ)
(チェックするポート: 0x200, 0x220, 0x240, 0x280, 0x300, 0x340, 0x380)
tulip.c: 部分的にモジュール化されている
(init 時のメモリアロケーションが問題を起こす)
tunnel.c:
insmod で使うパラメータは無い。
wavelan.c:
io = 0x390 (異なる設定も可能だが、お勧めしない)
irq = 0 (変更すると認識されない)
wd.c:
io = 0 ("io=0xNNN"の設定をしないと警告する)
irq = 0 (IRQ は EEPROM から読みこむ、古いカードでは自動 IRQ を使う)
mem = 0 (0xC8000 あるいはそれ以外の共有メモリを指定する)
mem_end = 0 (標準的でないメモリサイズを使う場合は mem_end を指定する)
(たとえば WD8003EBT で 32k の共有メモリを使う場合、mem=0xd000
mem_end = 0xd8000 と指定)
(チェックするポート:0x300, 0x280, 0x380, 0x240)
znet.c: まだモジュール化されていない
(Zenith Z-note(notePC ?)システムのみのデバイス。 設定情報は
(EE)PROM から読む)
Linux カーネル 2.2 付属文書一覧へ戻る