JF Linux Kernel 2.2 Documentation: /usr/src/linux/Documentation/networking/net-modules.txt

networking/net-modules.txt

Linux ネットワークドライバモジュール [プレインテキスト版]


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 付属文書一覧へ戻る