Wed 2-Aug-95 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 から読む)