次のページ 前のページ 目次へ

10. その他

ここでは、ほかに適当な場所がなかった問題をとりあつかっています。関連の薄 い問題や、万人向きではないテーマについてもここでは取り上げます。

10.1 カーネルにイーサネット関連引数を渡す方法

起動時にカーネルが受け取る命令には、二つの種類があります。ether and reserve がその二つです。 LILO や loadlin を使って命令を伝えるこ ともできます。とにかく、オプションを付けることができるブートユーティリティ なら何でも OK です。

たとえば、引数を三つ(123, 456, 789 ということにしておきましょう)とる `blah' という命令を LILO を使って引き渡すときには、

LILO: linux blah=123,456,789

としてください。 起動時引数に関する詳細については、

BootPrompt-HOWTO

をお読みください。

ether コマンド

ether= という引数は、 カーネルにじかに組み込んであるドライバに対し て用いるものです。この引数は、モジュラー化してあるドライバに対しては 何の効果もありません。基本的な使い方は

ether=IRQ,BASE_ADDR,PARAM_1,PARAM_2,NAME

のようになります。

オプションはいずれも省略可能です。数字以外の最初のオプションを NAME とみ なすことになっています。

IRQ:説明するまでもないでしょう。`0'(通常の初期設定値)にすると IRQ が自動設定になります。歴史的な経緯によって、IRQ は最初のアドレスではなく、 ベースアドレスで設定するようになっています。何か別のことが変更になるとき には、この点も改まることでしょう。

BASE_ADDR:これも説明の必要はないでしょう。`0'(通常の初期設定値)にする と、各カードごとに決まっているアドレスを順に試していくことになります。

PARAM_1: もともとこれは、WD80*3 のようなイーサネットカードの共有メモリ開始アドレ ス値を変更するための引数でした。なかには、この引数の下位 4 ビットをデバッ グメッセージレベルを設定するために利用しているドライバもあります。この場 合の初期値は 0 で、メッセージレベルは 1 から 7 の 7 段階に設定できるよう になっています(一番詳しいのが 7 になります)。初期値の 0 の場合には、いっ さいメッセージが表示されなくなります。また、LANCE ドライバはこの引数の下 位 4 ビットを DMA の選択に利用しています。この値を指定しない場合には、 DMA 自動設定となります。

PARAM_2: 3c503 ドライバはこの引数を使って、内部トランシーバと外部トランシーバ の選択を行います。初期値 の 0 は内部トランシーバを表しています。 外部 AUI を選択する場合には、この値を 1 に設定します。Cabletron E21XX カー ドは、この変数の下位 4 ビットを出力メディアの設定に利用しています。この値 を指定しない場合には、自動検出となります。

NAME: 設定した各値を使用するネットワークデバイスを指定する引数です。標準的なカー ネルでは `eth0', `eth1', `eth2' あるいは `eth3' (バス接続イーサネットカー ドの場合)、 `atp0'(パラレルポート接続の場合)、もしくは `pocket' (イーサ ネットアダプタの場合)になります。アークネットドライバは 'arc0' という名 称を用いています。 イーサネットカードが一枚しかない場合には、`eth0' を試してみるというのが初期設 定となっています。二枚以上のカードを用いる際には、各カードのベースアドレ スを LILO 引数として明示的に与えてやる必要があります。1.0 のカーネルは LANCE ベースのイーサネットカードを特別扱いしていました。この場合には、 LILO 引数は無視され、 LANCE カードはつねに `eth<n>'となります(n は 0 から始まります)。さらに LANCE 以外のイーサネットカードがある場合に は、明示的にこれを `eth<n+1>' と指定してやる必要があります。さらに、 `ether=0,-1,eth0' のようにして 'eth0' に対する通常のチェックをオフにす ること(もちろん、これはバグです)。

reserve コマンド

この LILO 命令も、使い方は 上に記した 'ether=' の場合と同じです。つまり、 以下のように lilo.conf のブートセレクタにこれを付け加えればいいのです。

reserve=IO-base,extent{,IO-base,extent...}

デバイスドライバを特定範囲内におけるデバイス検出(自動検出)の対象外とする 必要があるコンピュータもあります。こんなことが必要となるのは、ハードウェ アの設計がお粗末なため、ブート時に凍結してしまう場合、検出に失敗す るハードウェアの場合、それまでに行った検出作業によってハードウェアの状態 が変化してしまう場合、あるいは単にカーネルが初期化できないハードウェアの 場合です。

reserve というブート時引数は、検出対象外とする I/O ポート領域を指定 することによってこの問題に対処するためのものです。指定した領域は、カーネ ルのポート登録テーブルに書き込まれるので、あたかも何らかのデバイスが検出 済みであるかのように取り扱われることになります。ただし、大抵のコンピュー タでは、こうしたテクニックは必要ありません。この引数を設定することになる のは、何らかの問題が発生した場合や、特別の場合だけです。

指定した範囲内にある I/O ポートはデバイス検出の対象外となります。この手 法は、何らかのデバイスが NE2000 と衝突したり、正しく認識できない場合に利 用されてきました。別の起動時引数によって明示的にその旨を指定しない限り、 正しいデバイスドライバでも指定範囲内にあれば検出から除外されてしまいます。 つまり、大抵の場合には他の起動時引数と reserve 引数をいっしょ に使用することになるわけです。というのも、特定のデバイスを保護するために reserve対象領域を指定するときには、通常そのデバイスの検出を明示的に 指定してやらなければないからです。アドレスが明示的に指定してあれば、大抵 のデバイスドライバはポート登録テーブルを無視するようになります。

ブート行の例を以下に示します。

LILO: linux reserve=0x300,32 ether=0,0x300,eth0

こうすれば、0x300-Ox31f の範囲についてはイーサネットドライバ以外のあらゆ るデバイスドライバのチェックを行ないません。

ブート時に指定できるパラメータ引数には 最大 11 個という制限があるのが普 通です。ということは、reserve を用いて特定できる除外範囲の数は最大 でも五カ所になります。特に込み入った指定が必要な場合には、reserve を 何個も並べることになります。

10.2 イーサネットドライバをモジュールとして用いる場合

今や大抵の Linux ディストリビューションは、ごく少数のドライバだけを 組み込んだカーネルを提供するようになっています。すなわち、大部分のドライ バを動的リンクが可能な独立したモジュールとして提供しているのです。モジュー ルドライバをロードするには、管理者が modprobe(8) コマンドを実行す るというのが普通の方法です。場合によっては、 `kerneld'(カーネル 2.0)ある いは `kmod'(カーネル 2.1)コールを利用してカーネルがモジュールドライバを 自動的にロードするようになっていることもあります。

お使いのディストリビューションには、イーサネットモジュール設定用のかっこ いい設定ツールがついているかも知れません。その場合には、まずそのツールを 試してみるべきです。以下には、どんなすばらしい設定プログラムを使用する ときにも大切である要素、こうしたプログラムを用いて変更する条件について知っ ておくべきことを記載しています。

どのモジュールを使用し、各モジュールに対してどのようなオプションを設定す るかについての情報は、通常 /etc/conf.modules ファイルが保存し ています。このファイルに記載する設定の中でもイーサネットカードに関して特 に大切なオプションは aliasoptions の二つです。 modprobe コマンドがモジュールに関する情報を提供する際に参照するのも、 このファイルです。

現在使用中のカーネル用のモジュールは、/lib/modules/`uname -r`/net という名称のディレクトリにあるのが普通です。 uname -r は、カーネル のバージョン数(例: 2.0.34)を返してくるコマンドです。お使いのカード用の モジュールはここで見つかるはずです。

conf.modules ファイルで真っ先に必要となるのは、 eth0, eth1... といったネットワークインタフェースにどのドライバを用いる かを modprobe に教えてやるための情報です。これを設定するには alias コマンドを用います。たとえば、 ISA SMC EtherEZ という smc-ultra.oドライバモジュールを使用するカードの場合なら、以下のよう にしてこのドライバを eth0alias してやることになります。

        alias eth0 smc-ultra

その他、options 行を用いて各モジュール(あるいは モジュールの別名) にどのようなオプションを設定するかを教えてやる必要があるかもしれません。 上の例の場合なら、alias 行が必要なだけで、options 行は不要です。 カーネルは 「ISA カードを自動検出の対象にするのはよくない」という警告を 発してくるでしょう(dmesg をご覧ください)。この警告がでないようにした い時には、別の行を付け加えて、どの I/O アドレスを使用するようにカードを 設定しているかをモジュールに伝えてやります。アドレスの指定には、下記のよ うに 16 進数を用いてください(例:0x280)。

        options smc-ultra io=0x280

大部分の ISA モジュールには、insmod コマンドを使って io=0x340 および irq=12 のような引数を与えることができます。こうした引数を与 えておくことは必須、控え目にいっても強くお勧めできる作業です。 というのも、こうしておけばカード検出作業を回避できるからです。PCI デ バイスや EISA デバイスの場合とは違って、たいていの ISA デバイスについては、 これを確実に自動検出する方法は実際のところ存在しないのです。モジュール化 したドライバを使う場合にも自動検出を回避するようにしなければならないのは、 それゆえなのです。

各モジュールにどのようなオプションがあるかの一覧表は、以下のファイルにあ ります:

/usr/src/linux/Documentation/networking/net-modules.txt

このファイルを読んで、お使いのカードにはどのようなオプションが使えるかを 知っておくことをお勧めします。

モジュールに与える値の境目にコンマを置くモジュールもあります。こうすれば、 一つのモジュールで複数のデバイスを取り扱えるようになるからです。たとえば、 8390 系の全ドライバや PLIP ドライバでは、こうしたことが可能となっていま す。以下に例を掲げます。


        options 3c503 io=0x280,0x300,0x330,0x350 xcvr=0,1,0,1

上の場合では、3c503 カード四枚を一つのモジュールが管理することになります。 二番目・四番目のカードは外部トランシーバを利用しています。"=" やコンマの 前後にスペースを作らないようにしてください。

ビジー状態のモジュールは取り除けないことにもご注意ください。つまりモ ジュールを取り除く前に、 ifconfig eth0 down (イーサネットカードのシャ ットダウン) を実行しておかなければならないのです。

lsmod は、使用中であるかどうかを問わずロードしている全モジュールを 一覧するためのコマンドです。モジュールを取り除くには rmmod を用いま す。

10.3 関連文献

この文書で紹介している情報の大部分は、有力な情報源であるニュースグループ comp.os.linux への投書を元にしたものです。その他、Donald 本人が用意 している短いファイルも有益な情報源となっています。イーサネットカードを組み込も うとしているのなら、 当然 NET-2 HOWTO を読むべきです。この HOWTO を読め ば、使いたいソフトがちゃんと動くように設定できるはずです。ハッカーの端く れを自認する方なら、これ以外の情報をドライバのソースファイルからも嗅ぎ出 すことができるに違いありません。重要な情報は、実際のコードが始まる前の一 〜二段落にあるのが通例です。

Linux に特化していない情報をお求めの方(たとえば、10BaseT や AUI とは何ぞ やとか、ハブはどんな機能を果たしてるのかといった情報)には、ニュースグルー プ comp.dcom.lans.ethernetcomp.sys.ibm.pc.hardware.networking が特にお勧めです。ニュースグルー プの過去記事は dejanews.com などが保管しています。これも情報の尽き せぬ宝庫といえるでしょう。ニュースグループの FAQ は RTFM (ここはあらゆる ニュースグループの FAQ を収集しています)から入手できます。 URL は以下の 通りです。

Usenet FAQs

また、「イーサネットホームページ」というものもあります。URL は

Ethernet-HomePage

です。

10.4 免責条項・著作権

この文書は無謬の聖典ではありません。とはいうものの、記載している情報 の大部分は最新のものになっているはずです。お使いのコンピュータに何が起 こってもだれも責任は取ってくれません。自己責任で行動してください。イーサ ネットその他のハードウェアが煙を噴く(まず、そんなことはあり得ませんが)よ うなことがあっても、当方は責任を負いかねます。「この文書が記載している情 報を元にして行った行為によって発生したいかなる損害に対しても、著者は責任 を負いません」

この文書の著作権は、Paul Gortmaker に帰属します Copyright (c) 1993-1997。 この文書全体を複製・配布する際には著作権に関するこの注意事項を添付する という条件を守ってください。またこの注意事項を各複製物のそれぞれに添付す るようにしてください。

この文書を加工したものを複製・配布する際にも、著作権に関するこの注意事項 原本全体を添付してください。この文書からの派生物を配布する際の条件は、こ の文書の配布条件と同一のものとしてください。

この文書を他の言語に翻訳する際の条件は、派生物の配布の際の条件と同じもの とします。

この文書を翻訳なさろうとする方へ。まず、SGML ソース(HOWTO メインサイトか ら FTP 経由で入手できます)を翻訳することをお勧めします。そうしておけば、 後から他の形式のものを作成することも可能となります。翻訳に用いた元の英語 版 SGML ソース を保存しておくことを忘れないように。この文書の新版が出た ときにも、新しい SGML ソースを調達して diff -u old.sgml new.sgmlと いった感じの作業をすれば、どこを改めればいいかも一目瞭然になります。翻訳 版の SGML ソースを変更する作業も簡単になるというわけです。全体を読み直し たり、訳し直したりする必要がなくなるからです。

この文書を出版物の一部として利用する場合には、電子メールで御一報ください。 そうすれば、最新の情報を提供させていただけるからです。以前には、古くなっ てしまった Linux HOWTO 文書が刊行されてしまったために、最新版では解決済 みの問題に関する質問に著者が悩まされてしまうということもあったのです。

10.5 結び

本文書に誤字・誤植や、目に余るほど陳腐化した情報があることに気づかれた方 は、是非 e-mail をお寄せください。何かを見逃してしまうというのは、寛大では ありますが、また安易なことでもあります。メールしていただいた変更点を次の 版に取り入れていない場合には、遠慮なく再送してください。受け取った屑メイ ルの海のなかに紛れこんでしまったのかも知れませんから。

以上、よろしく御願いします。

Paul Gortmaker, p_gortmaker@yahoo.com

10.6 日本語訳について

日本語訳は Linux Japanese FAQ Project が行いました。 翻訳に関するご意見は JF プロジェクト <JF@linux.or.jp> 宛に連絡してください。

改訂履歴を以下に示します。

v2.5, 18 November 1995

翻訳: 嶋崎@梨大 <simazaki@yu-gate.yamanashi.ac.jp>

v2.7, 7 November 1999

翻訳:

訳語統一・校正:


次のページ 前のページ 目次へ