Linux Ethernet-Howto Paul Gortmaker, Editor. v2.5, 18 November 1995 [和訳 嶋崎@梨大(simazaki@yu-gate.yamanashi.ac.jp)] この文書はEthernet-Howtoです。Linuxではどのようなイーサネットデバイ スが使用できるか,またデバイスをどのように設定するかという情報を集 めたものです。Linuxでイーサネットカードを使用するにあたって,すべて の頻繁に質問される事柄(FAQ)に対する回答となるものと考えています。 このHowtoはイーサネットカードのハードウェアやハードウェアよりのドラ イバを対象にしており,そのソフトウェアの側面については触れていませ ん。ソフトウェアについてはNET2-Howtoを御覧ください。 1. はじめに Ethenet-Howtoは,どのカードを買うべきか,また買ってはいけないか,ど のように設定するか,どのように複数のカードを動かすか,さらに他のよく ある問題や疑問について触れています。一般的に入手できるすべてのイーサ ネットカードの,現在のサポートレベルについて説明しています。しかし, イーサネットのソフトウェアについては,NET-2 Howtoにおいて解説されて いるので,ここでは触れません。また,イーサネットに関して,Linux特有 ではない一般的な疑問については,ここでは解説しません(し,回答すべき ではない)のでご注意ください。そのような質問については,ニュースグル ープcomp.dcom.lans.ethernetのFAQにある十分な量の情報を参照ください。 このFAQはdorm.rutgers.eduのディレクトリ/pub/novell/info_and_docsから FTPすることができます。 このHowtoは現在,v1.2.13までの配布版カーネルをカバーしています。1.3.42 までの,開発版カーネルに関する情報も含まれています。 Ethernet-Howtoは Paul Gortmaker, Paul.Gortmaker@anu.edu.au が編集,維持しております。初期のEthernet-Howtoに関する大元の情報源は Donald J. Becker, becker@cesdis.gsfc.nasa.gov でした。彼が現在Linuxで利用できる大多数のイーサネットカードドライバ を書いてくれたことに対し,われわれは感謝せねばなりません。彼はまた, NFSサーバの原作者でもあります。ありがとうDonald!あなたのおかげです! :-) ネットサーファーは下記のURLをチェックしてみましょう: Donald Becker <http://cesdis.gsfc.nasa.gov/pub/people/becker/whoiam.html> 1.1. この文書の新バージョン この文書の新しい版は匿名(アノニマス)FTPで下記から持って来れます: Sunsite HOWTOアーカイブ <ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/> およびさまざまなLinuxのftpミラーサイトです。新しい情報やドライバが利 用できるようになると,改版するつもりです。今あなたが読んでいるのが, 作成から4カ月以上経過しているなら,もう古くなっているか私がさぼって いるかのどちらかです。この文書はLinux Howtoプロジェクト専用に設定さ れたSGMLシステムを用いて作成されており,ポストスクリプト,dvi,ascii, htmlおよび近々TeXinfoのさまざまな出力形式で入手できます。 html(WWWブラウザ経由)あるいはポストスクリプト/dvi形式で御覧になる ことをお勧めします。どちらもascii変換で失われてしまった,相互参照の 情報を含んでいます。 sunsiteから正式版の文書を入手したい場合は,URLは以下の通りです。 Ethernet-HOWTO <http://sunsite.unc.edu/mdw/HOWTO/Ethernet-HOWTO.html> 小規模の追加や変更が行なわれると,以下のURLに最新のドラフトが置かれ ます。 Working Copy <http://rsphy1.anu.edu.au/~gpg109/Ethernet-HOWTO.html> 1.2. Ethernet-Howtoの利用 このガイドはどんどん大きくなって来てますので,大切な午後の残りを, この文書全部を読むことだけに費やしたくはないでしょう。また,全部を 読む必要もありません。まだイーサネットカードを入手されていないなら, どれを買うべきか,またどれを避けるべきか調べるため「Linuxにはどれ を..」から始めればいいでしょう。もう入手していて,それがLinuxで使 用できるかどうかわからない場合は,個々のメーカーとその製品に関する 情報を記述した「ベンダー特有の..」から読んでください。カードにトラ ブルを抱えている場合は,上述したあなたのカードに特有の情報を読んで ください。そして「FAQセクション」のトラブルシューティングのための 情報を読んでください。デバイスドライバの技術的側面に関心がある場合 は「技術情報」にその情報があります。 1.3. 宣言とコピーライト この文書は福音書ではありません。が,あなたが読むことのできるなかで は最新の情報でしょう。あなたのハードウェアになにが起こってもだれの 責任でもなく,それはあなた自身の責任です。もしイーサカードや他のハ ードウェアが煙を上げても(まあありえないでしょうけど),われわれに はなんの責任もありません。すなわち,「この文書に含まれている情報に 従って行なった行動により,引き起こされるいかなる損害に対しても著者 らは一切責任を持ちません。」 この文書はDonald BeckerおよびPaul Gortmakerが著作権を有します。 Copyright (c) 1993, 1994, 1995 by Donald Becker and Paul Gortmaker 著作権表示と,この許諾表示を付ければ,この文書を完全な形で複写,配 布して構いません。 この著作権表示を原文そのままで付属しており,また作成物がこの文書と 同一の許諾表示の下で配布されるならば,この文書の修正版を作成,配布 して構いません。 修正版と同一条件で,この文書を他の言語へ翻訳したものを作成,配布し ても構いません。 もしこの文書を商業出版物に採り入れようとしているのなら,私に御連絡 ください。最新の情報を提供できるよう努力します。過去に古いバージョ ンのLinux howto文書が出版されてしまったことがあり,その結果開発者 がすでに最新の文書に記述がある事柄について質問を受け,くたびれてし まうという状況が起きました。 [このセクションは原文を添付します] This document is not gospel. However, it is probably the most up to date info that you will be able to find. Nobody is responsible for what happens to your hardware but yourself. If your ethercard or any other hardware goes up in smoke (...nearly impossible!) we take no responsibility. ie. THE AUTHORS ARE NOT RESPONSIBLE FOR ANY DAMAGES INCURRED DUE TO ACTIONS TAKEN BASED ON THE INFORMATION INCLUDED IN THIS DOCUMENT. This document is Copyright (c) 1993, 1994, 1995 by Donald Becker and Paul Gortmaker. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this document under the conditions for verbatim copying, provided that this copyright notice is included exactly as in the original, and that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this document into another language, under the above conditions for modified versions. If you are intending to incorporate this document into a published work, please contact me, and I will make an effort to ensure that you have the most up to date information available. In the past, out of date versions of the Linux howto documents have been published, which caused the developers undue grief from being plagued with questions that were already answered in the up to date versions. 2. Linuxにはどのカードを買えばいいの? この質問に対する答えは,ネットに接続して何をしたいか,またそれがどれ くらいのトラフィックになるか,ということでかなり違ってきます。 シングルユーザで,たまにftpセッションしたりWWW接続をするだけなら,古 い8 bit wd8003カードで十分幸せでしょう。 サーバを構築するなら,イーサパケットの送受信に掛かるCPUのオーバヘッ ドを最小にするため,DEC 21040チップやAMD PCnet-PCIチップを使用したよ り新しいPCIカードのどれかを使用したらよいでしょう。 上に挙げた例の中間の目的なら,安定したドライバの存在する16 bit ISAカ ードが役割を果たしてくれます。 2.1. ではどのドライバが安定なの? 16 bit ISAカードの中で,以下のドライバは十分枯れているので,これらの ドライバを使用するカードを購入すれば問題が起きないでしょう。 SMC-Ultra/EtherEZ, WD80x3, 3c509, 3c503/16, Lance, NE2000. 他のドライバがすべて不安定と言っている訳ではありませんよ。すべての Linuxの中で最も古くまた幅広く使われているため,最も安全な選択肢に なっている,というだけの話です。 安物のマザーボードの中にはlanceのカードが使用するバスマスタ機能に 問題があること,また安物のNE2000クローンなカードの中にはブート時の 検出に問題があったりするので,注意してください。 PCIカードに関して,lanceのドライバを使用するPCnet-PCIカード(ハー ドウェアに問題のあるBocaのカードを除く)は無難な選択です。Allied TelesisのAT2450は,PCnet-PCIを実装しており,良好な動作をすることが 知られています。 DEC 21040 `tulip'ドライバと3c59x `vortex'ドライバは比較的新しいド ライバですが,すでに極めて安定であることがわかっています。(より新 しい21041ベースのカードは現時点では少々問題がありますが,すぐに改 善されることは間違いありません。) 2.2. 8 bit対16 bitカード もう新品の8 bit ISAイーサカードを購入することはできないでしょうが, 中古屋さんに非常に低価格で並んでいることでしょう。あと何年かはこの 状況が続きそうです。「家庭内LAN」システムで人気があります。 軽いあるいは平均的な使用で十分な性能を発揮する8 bitカードにはwd8003, 3c503およびne1000があります。3c501は貧弱な性能しか出ず,XTの頃から の10年選手は避けるべきでしょう。 高速なホストからの(高速なISAバス上の)8 bit wd8003カードによるftp のダウンロードでは500から800 kB/s程度の速度が見込めますから,8 bit というデータバス幅が性能をそんなに損なうというわけでもありません。 また,トラフィックのほとんどが遠隔のホストへ行くというのなら,経路 上のボトルネックはバスではなく別のところにあり,ローカルのサブネッ ト内で作業しているときに速度差に気づくくらいでしょう。 2.3. 32 Bit / VLB / PCIイーサネットカード 32 bitイーサカードというのはそんなにありませんから,32 bitイーサカ ードデバイスドライバというのもそんなにありません。10 Mbpsネットワ ークでは32 bitインターフェースになることで価格が5倍になることを正 当化できませんから,そんなにたくさんの32 bitイーサカードは出現して いません。(しかし100 Mbpsネットワークでは話が別です。) 8 MHz ISAバス上のイーサカードを使用することがなぜボトルネックにな らないか,ということについては「プログラムドI/O対..」を御覧くださ い。高速なバス上のイーサカードを使用しても,必ずしも高速な転送が実 現されるわけではありませんが,普通はCPUのオーバヘッドが低減される ことになります。これはマルチユーザシステムにとってよいことです。 AMDは32 bit PCnet-VLBおよびPCnet-PCIチップを有しています。「AMD PCnet-32」に32 bitバージョンのLANCE / PCnet-ISAチップに関する情報 があります。 DEC 21040 PCIチップはパワーユーザのためのもう1つの選択肢です(「DEC 21040」を参照してください。)多くのメーカがこのチップを使用したカ ードを生産しています。 3Comの`Vortex' PCIカードも選択肢の1つで,モニタ販売の期間中は極めて 安く購入することができます。(「3c590/3c595」を参照。) 2.4. 利用できる100 Mbpsカードとドライバ 現在サポートされている100 Mbpsハードウェアは以下の通りです: DEC 21140チップを使用したカード; 3c595 Vortexカード; およびHP 100VG ANY-LANです。前者2つのドライバは極めて安定してますが,HPドライバ については,初期の1.3.xカーネルのみで組み込まれただけであったため, フィードバックが非常に少ないです。 EtherExpressPro10/100は現在のところサポートされていません。Intel からの情報が入手困難だったのが不可能になったためで,このためサポー トされていないのです。 21140 100Base-?チップは,その10 Mbps対応製品である,21040と同一の ドライバでサポートされています。SMCの100 Mbps EtherPower PCIカー ドはこのチップを使用しています。21040に関しては,2つのドライバか ら選択することができます。 DonaldのWWWサイトも見てください。URLは以下の通りです。 100Mbs Ethernet <http://cesdis.gsfc.nasa.gov/linux/misc/100mbs.html> Donaldはほとんどの作業をSMC EtherPower-10/100の上で行なってきて, P5-100 Tritonマシン上のTCPにおいては,アプリケーションからアプリケ ーションへの速度が4.6 MB/s になると報告しています。 (詳細は「3c595」と「DEC 21140」を参照してください。) 100VGの情報については,Donaldの100VG Pageを御覧ください。 <http://cesdis.gsfc.nasa.gov/linux/drivers/100vg.html> こちらも御覧になったほうがいいかもしれません。 Dan Kegel's Fast Ethernet Page <http://alumni.caltech.edu/~dank/fe/> 2.5. プログラムドI/O対共有メモリー対DMA イーサネットは10Mbpsです。(挙げ足取らないでね。ここでは3Mbpsと100Mbps は考えません。)パケットをすき間なく送受信してしまうと,配線にもうそ れ以上1 bitも載せることはできなくなってしまいます。最近のイーサカー ドはどれも,すき間なくつながったパケットを受信することができます。 [つまり理論値通りの速度が出るということですね。]Linux DP8390ドライ バはもうかなり理論値に近い速度が出るようになっています(割り込みがど れくらい生じているのかによります)し,3c509とAT1500のハードウェアは すべて自動的に理論値でパケットを送信するのにまったく問題ありません。 ISAバスは5.3MB/sec(42Mb/sec)の転送速度を有しますが,これで十分なよ うに見えます。このバンド幅全体をいくつかの方法で利用することができま す。 2.5.1. プログラムドI/O (e.g. NE2000, HP) 利点: 限りある,システムの資源をまったく使用しません。I/Oレジスタを いくつか使用するだけですし,16MBの(メモリーの)制限もありません。 欠点: 普通,転送速度は最も遅いですし,CPUはずっと待っていなければな りません。また,間を空けた(インターリーブの)パケットアクセスは通 常困難であったり,不可能だったりします。 2.5.2. 共有メモリー(e.g. WD80x3, SMC-Ultra, 3c503) 利点: 単純で,プログラムドI/Oよりも高速,またパケットのランダムアク セスが可能です。linuxのドライバは,入ってきたIPパケットがカードから コピーされる際に,そのチェックサムを計算します。よって,相当するPIO カードと比較して,さらにCPUの使用を減らすことができます。 短所: メモリー空間を消費してしまいます(DOSユーザには大きな欠点です がLinuxの下では大したことありません)し,それでもまだCPUを占有してし まいます。 2.5.3. スレーブ(通常の)ダイレクトメモリーアクセス (e.g. Linuxにはありません!) 利点: 実際のデータ転送時にCPUを解放できます。 欠点: 境界条件のチェック,連続したバッファの割り当て,およびDMAレジ スタのプログラムにより,すべての手法の中でもっとも遅くなってしまいま す。少ししかないDMAチャネルを消費してしまいますし,連続した下位メモ リバッファが必要です。 2.5.4. バスマスタダイレクトメモリアクセス(e.g. LANCE, DEC 21040) 利点: データ転送中,CPUは解放されますし,ばらばらのバッファをまとめ て使用できますし,ISAバス上での作業にほとんどあるいはまったくCPUを使 用しません。 欠点: 下位メモリのバッファとDMAチャネルが必要です。原始的なSCSIアダ プタのように,バスを占有する他のバスマスタカードと用いると問題が起こ るでしょう。設計のまずいマザーボードのチップセットでは,バスマスタが 問題を起こすことがあるかもしれません。386と差し替えるように設計され た486プロセッサを使用する場合,DMAデバイスを一切使用しない理由は以下 の通りです; これらのプロセッサはDMAサイクルごとにキャッシュをフラッ シュしなければならないからです。(Cx486DLC,Ti486DLC,Cx486SLC, Ti486SLCなどです。) 2.6. カードがサポートするケーブルの種類 小規模の「個人的な」[家庭内LANですね]ネットワークを構築するなら, 多分シンネットすなわちシンイーサネットケーブルを利用することでしょ う。[今はハブが爆烈な安さで売られていますので,ツイストペアで構築 してもいいでしょうね。]標準的なBNCコネクタを持つタイプです。さま ざまなイーサネットケーブルに関して,その他諸々の事項については「ケ ーブル,同軸...」を参照してください。 ほとんどのイーサネットカードは10-20ドル追加するだけで`Combo'バージ ョンになります。ツイストペアとシンネットの両方のトランシーバが内蔵 されていますので,後で心変わりしても安心です。 RJ45(電話のモジュラージャックを巨大にしたもの)コネクタを持つツイ ストペアケーブル[より対線]は,技術的には10BaseTと呼ばれます。UTP (Unshielded Twisted Pair)と呼ばれることもあります。 シンネットすなわちシンイーサネットケーブル(RG-58同軸ケーブル)は, BNC(金属製の押し回ししてロックするタイプ)コネクタを持っていて技 術的には10Base2と呼ばれます。 古い設備でのみ見られる,古いシックイーサネット(10mm同軸ケーブル) は10Base5と呼ばれます。 大規模な企業規模の設備では,ほとんど10Base2のかわりに10BaseTが使用 されます。10Base2では,最近広まりつつあるもろもろの100Base (100BaseTとか100VGAnyLANなど)へは,容易に移行することができません。 3. FAQ(よくされる質問) Linuxでイーサネット接続する際に,本当によくされる質問を集めました。 カードに固有な質問については,「メーカー別に」分けました。しかし, 読者のあなたがこの文書を入手するころには,もう「古く」なってしまっ ていることでしょうから,「新しい」問題がすぐここで取り上げられる 訳ではありません。ですから,このような問題にはニュースリーダーを 有効に活用しましょう。例えばnnの場合は次のようにタイプします。 nn -xX -s'3c' これで,サブジェクトに`3c'(3com,3c509や3c503など)が含まれるすべ ての記事のリストが表示されます。教訓: 自分のニュースリーダーのman ページを読みましょう。 3.1. アルファ版ドライバ -- その入手と利用法 わたしのカード用の新しいあるいはアルファ版のドライバが入手できると 聞きました。が,それはどこにあるの? 「新しい」ドライバの最新版は,Donaldの新しいftpサイトにあります: cesdis.gsfc.nasa.govの/pub/linuxにあります。ここにあるものは頻繁に 変化していますから,探し回ってみてください。古いftpサイト ftp.super.orgにもまだすべてのドライバが置いてありますが,あまりメン テナンスされていませんので,ほとんどの人には限られた価値しかないで しょう。 「利用可能」なアルファドライバのほとんどは標準のカーネルソースツリ ーに含まれていることに注意してください。make configを実行すると, ALPHA test driversを使用するかどうか質問されます。 さて,そのドライバが本当のアルファ版,すなわちプレアルファ版である なら,それなりの取扱いをしてください。換言すれば,どのように使用し たらよいのかわからないとしても,不平を言わないでください。どのよう にインストールしたらよいのかわからないのなら,プレアルファドライバ のテストをすべきではありません。またこのドライバのせいでマシンがダ ウンしたとしても,文句を言わないでください。かわりに詳細なバグリポ ートをお送りください。ま,もっといいのはパッチ当てすることですけど! ネットサーフィン中にこれを読んでる人は以下もチェックしてください: Don's Linux Home Page <http://cesdis.gsfc.nasa.gov/pub/linux/linux.html> 新しいドライバに関して最新の動向が掲載されています。 3.2. 1台のマシンに複数のイーサネットカードを載せるには Linuxで2つのイーサネットカードを動かすには何をしなきゃならないの? 複数のイーサカードをLinuxに載せることができます。しかし,デフォルト では1つのイーサカードだけしか自動認識されないことに注意してください。 これにより,神経質なカードを認識する際に多々生じる,ブート時のハン グアップを避けることができます。 2番目(および3番目,および...)のカードの自動認識を可能にするには, 2つの方法があります。もっとも簡単なのは起動時にカーネルへ引数を与 えることです。通常はLILOでこれを行ないます。ether=0,0,eth1のような 簡単な引数を起動時に与えることで,2番目のカードを認識することがで きます。この場合,起動時にカードが見つかった順番にeth0,eth1が割り 当てられます。0x300のカードをeth0,0x280のカードをeth1にしたいなら, LILO: linux ether=5,0x300,eth0 ether=15,0x280,eth1 とします。ether= コマンドは上記のIRQ + i/o + 名前以外のものも受け 付けます。構文の詳細については「イーサネットの引数...」を,またカ ード固有のパラメータ,およびLILOのTipsを見てください。 これらの起動時の引数は,毎度毎度入力する手間をなくすことができます。 LILOのマニュアルの設定オプション`append'の項を参照してください。 2つめの方法(お勧めできません)はSpace.cを編集し,i/oアドレスの 0xffe0エントリを0に書き換えてしまうことです。0xffe0エントリはカーネ ルにそのデバイスを検出しないようにさせます -- それを0にすることによ り,デバイスを自動検出するようになります。もし1台のマシンに4つ以上 のイーサネットカードが本当に必要なら,eth4エントリやeth5エントリな どを加えることができます。 Linuxを2つのネットワーク間のゲートウェイとして使用するつもりなら, IP forwardingを有効にしてカーネルをリコンパイルしなければなりません。 たいてい,`kbridge'のようなソフトウェアを利用して,古いAT/286マシン をゲートウェイにしたほうがよいでしょう。 これをネットサーフィン中に御覧になっているなら,DonaldがWWWで公開し ているmini-howtoも御覧になりたいかもしれません。複数のイーサカードの 情報は <http://cesdis.gsfc.nasa.gov/linux/misc/multicard.html>. 8390ベースのカードをモジュールで使用している方は,1つのモジュールで 複数のカードを制御することもできます。「モジュールで使用する8390ベー スのカード」に複数のカードを使用する際のモジュール固有の情報がありま す。 3.3. 貧弱なNE2000クローン達 さまざまな問題があることが知られているNE-2000クローンのうちいくつか を挙げてみました。問題のほとんどは致命的ではありません。「悪いクロー ン」とされている場合は,そのカードがNE2000に固有の2つの識別バイトを 持ってないことを意味します。NEx000クローンはパケットバッファのメモ リ空間にステーションアドレスPROM(SAPROM)を持っています。NE2000ク ローンはSAPROMのバイト0x0e,0x0fに0x57,0x57を持っていますが,一方, 他のNE2000クローンもどきはSAプリフィックスによって検出されなければ なりません。 以下は,SAPROMの0x0e,0x0fバイトに0x57,0x57を持っていないNE2000クロ ーンのわかりにくいリストです。たぶんこのようなカードは数百とあるでし ょう。ドライバが`invalid signature'(無効な識別子)というメッセージ を吐くようなカードをつかまされてしまったら,カードの識別子をドライバ に追加せねばなりません。この手順は以下に記述されています。 Accton NE2000 -- ブート時に検出されません,以下参照 Aritsoft LANtastic AE-2 -- OK,しかしエラー−リポートレジスタに欠陥が ある AT-LAN-TEC NE2000 -- SCSIドライバをトラップするWinbondチップを使用 ShineNet LCS-8634 -- SCSIドライバをトラップするWinbondチップを使用 Cabletron E10**, E20**, E10**-x, E20**-x -- 悪いクローン,しかしド ライバがそれをチェックします。``E10**''を参照 D-Link Ethernet II -- 悪いクローン,しかしドライバがそれをチェック します。``DE-100 / DE-200''を参照 DFI DFINET-300, DFINET-400 -- 悪いクローン,しかしドライバがそれを チェックします。``DFI-300 / DFI-400''を参照 EtherNext UTP8, EtherNext UTP16 -- 悪いクローン,しかしドライバが それをチェックします。 3.4. NE1000 / NE2000カード(およびクローン)の問題 問題: NE*000カードがマシンをハングさせる。`DMA conflict'(DMAの衝 突)と出ることもあるし,完全にだんまりのこともある。 理由: ドライバとその上位のネットワーク層にこれを引き起こすバグがあ りました。カーネルv1.2.9以上では修正されています。カーネルをアップ グレードしてください。 問題: NE*000カードがNE検出時にマシンをハングされる,ハングしない場 合は,ステーションアドレスを正しく読み出せない。 理由: v1.3.7以前のカーネルでは,検出時にカードを見つけた際に,カー ドを完全にはリセットしてませんでした。安いカードの中は電源投入後, カードが適切な初期状態にないものがあり,カードを使用する前に完全な リセットを掛ける必要があります。また,NEを検出する前になんらかのプ ローブが掛かると,NEカードが誤動作することがあるようです。この場合, カードに他の検出が掛からないようにするため,``reserve=''という起動 時キーワードを試してみてください。 問題: NE*000ドライバが起動検出時に`not found (no reset ack)'(見つ かりません,リセットに対して応答がありません)というメッセージを出 す。 理由: これは上述の変更に関係しています。8390が検出されたi/oアドレ スに存在することをまず確認したあとにリセットが掛けられます。カード のリセットが終了したとき,カードからリセットが完了した,という通知 があることを期待しています。カードが応答しない場合,ドライバはNEカ ードが存在しないものとします。 解決法: 以下に示したように,drivers/net/ne.cを2行書き換えます。 ______________________________________________________________________ - printk(" not found (no reset ack).\n"); - return ENODEV; + printk(" (warning: no reset ack)"); + break; ______________________________________________________________________ これで,カードがリセットの通知を出さなくてもカードの検出を続行でき ます。 問題: NE*000カードが最初のネットワークアクセスの際にマシンをハング させる。 理由: この問題は昔の1.1.57のカーネルのころから現在に至るまで報告さ れています。これはソフトウェアから設定できるクローンカードに限られ た問題のようです。このようなカードは,特定の方法で初期化する必要が あるようです。 解決法: 複数の人が,Linuxでこれらのカードを動作させるために,ウォ ームブート(すなわちloadlinするか「三指敬礼」するか)の前にDOS用に 提供されている設定プログラムおよび/あるいはDOSのドライバを実行す る方法を報告しています。このことは,これらのカードが現在のLinuxド ライバとは若干異なる,特別な方法で初期化される必要があることを示し ています。 問題: 0x360にあるカードがどうにも検出できない。 理由: 最近のカーネル( > 1.1.7x)はi/o領域の競合に関してより厳密なチ ェックを行ないます。NE2000カードは0x20のi/o空間を使用します。その 結果,0x378に存在するパラレルポートとぶつかることになります。その 他のデバイスでそこに存在するものとしては,0x370に(もしあるなら) 2つ目のフロッピーコントローラ,また0x376--0x377に2つめのIDEコント ローラがあります。ポートが先に他のドライバにより登録されてしまうと カーネルは検出を実行しません。 解決法: カードのアドレスを0x280,0x340,0x320などに移動するか,パ ラレルプリンタのサポートを外してカーネルをコンパイルしなおす。 問題: 何かを印刷するたびにネットワークが「どっか行っちゃう」(NE2000) 理由: 上記の問題と同様です,が,i/o領域の競合をチェックしない古い カーネルを使用しています。上記と同じ修正を施し,その間に新しいカー ネルを入手してください。 問題: NE*000 ethercard probe at 0xNNN: 00 00 C5 ... not found. (invalid signature yy zz)と表示される。 理由: まずなにより,アドレス0xNNNにNE1000あるいはNE2000が存在しま すか?もしそうなら,表示されるハードウェアアドレスは正常そうですか? もしそうなら,それは貧弱なNE*000クローンなんでしょう。すべての NE*000クローンは,カード上のSA PROMのバイト14および15に0x57という 値を持っていることを期待されています。このように表示されるカードは この値を持っていません。代わりに`yy zz'が書き込まれています。 解決法: ドライバ(/usr/src/linux/drivers/net/ne.c)には,42行目あ たりに``Hall of Shame''[恥さらしの殿堂]と呼ばれるリストがあり ます。このリストは貧弱なクローンを検出するために使用されます。例 えば,DFIカードは,通常想定されているバイト14,15の0x57の代わりに, PROMの先頭3バイトに`DFI'が使用されています。 あなたが使用しているカードのPROMの先頭3バイトに何が書かれているか を調べるには,以下のような行をドライバの上述のエラーメッセージの 直後で,かつ227行目の``return ENXIO''の直前に付け加えます。 printk("PROM prefix: %2.2x %2.2x %2.2x\n",SA_prom[0],SA_prom[1],SA_prom[2]); この変更を加えてリブートし,検出に失敗すると,上記のDFIの例のように PROMの3バイトの内容を得られることでしょう。そうしたら,43行付近の bad_clone_list[]にカードを加えることができます。リブート後たぶん以下 のような表示がなされます。 PROM prefix: 0x3F 0x2D 0x1C で,8 bitバージョンのカードが``FOO-1K''と呼ばれ,16 bitバージョンが ``FOO-2k''と呼ばれているとします。すると,bad_clone_list[]には以下 の行を加えてください。 {"FOO-1k", "FOO-2k", {0x3F, 0x2D, 0x1C,}}, 加える2つの名前の文字列は何でも構いません -- 名前は単に起動時の表示 に使われるだけで,カードの何かと関係あるわけではありません。お望み なら上記で加えた``printk()''を取り除くことも可能です。とにかく,その 行が何か起こすことはないはずです。もう一度コンパイルしなおせば,カー ドを検出できるはずです。 Problem: DMAアドレス不整合のようなエラー チップは本当にナショナルセミコンダクタの8390ですか?(DP8390,DP83901, DP83902あるいはDP83905)そうでなければ,クローンチップが転送確認レジ スタを正しく実装していないことがあります。MS-DOSのドライバはエラーチェ ックをまったく行なわないので,カードはDMAアドレスのエラーを関知しませ ん。(注: DMAアドレスのチェックは,性能上の理由からv1.2.4ではデフォル トで行なわないようになっています。チェックを行なわせたいのなら,ne.c の`NE_SANITY'を定義してやることにより,チェックが有効になります。) メッセージが偶数ずつ表示されますか?もしそうなら,NE2000を16 bitスロッ トに挿してますか?8 bit転送のみをするよう,ジャンパが設定されています か? Linuxのドライバは,NE2000が16 bitスロットに存在することを想定していま す。NE1000はどちらのスロットにも挿すことができます。この問題は,ステ ーションアドレスPROMに正しいIDバイトを有しないクローンでも,特にD-Link 16 bitカードが顕著ですが,同様な現象が起こりえます。 8 MHzより速い速度でバスを使用していませんか?速度を(遅くしたり速く したり)変化させることができるなら,何か変化があるか確認してくださ い。速度を変化させることで,ノイズの多いバスをマスクすることもでき ます。 他のデバイスがバス上にありませんか?デバイスを脱着することで信頼性が 変化するなら,バスにノイズの問題があります。そのエラーメッセージはま さしくそのノイズの問題を検出しているのでしょう。幸運なことに,別の問 題の原因まで見つけられたのです。 問題: `8390...'や`WD....'というメッセージの直後にマシンがハングする。 NE2000を取り外すとハングしない。 解決法: NE2000のベースアドレスを0x340へ変更してください。かわりに, 0.99pl13およびそれ以降のカーネルに実装されているデバイスレジスタを使 用することもできます。 理由: そのカードは互換性が乏しいです。動作しているNE2000はそのi/o空 間で自動検出しようとする他のドライバに対して底無しの落し穴となります。 他のイーサカードドライバは落し穴にはまらないよう,NE2000をリセットす るという大変な苦痛を受けているのですが,クローンの中にはリセットが掛 からないものがあるのです。注意すべきクローンチップは: Winbond 83C901 です。NE2000を人気のないアドレスに変更することで,他の自動検出の通り 道から外へ移動することができます。結果マシンを起動することができます。 問題: マシンが起動時のSCSI検出中にハングする。 理由: 上記の問題と同じです。イーサカードアドレスを変更するか,デバイ スレジスタを使用してください。 問題: マシンが起動時のサウンドカード検出中にハングする。 理由: サウンドカードとは関係ありません,実際にはSCSIを検出しているの です(何もメッセージが出ない)。ですから上記と同じ問題です。 問題: NE2000が起動時に検出されない - ブートメッセージが何も出ない。 Donald曰く: 「小数の人がAccton NE2000の検出に問題があると報告してい ました。この問題は起動時にのみ起こり,同一のコードの(アルファ版)私 のne2k診断プログラムを用いてランタイムには認識できるというものです。 Acctonはいろいろ情報提供してくれましたが,まだ何が起こっているのか追 跡しきれていません。Acctonのカードを購入してみましたが,この問題を再 現することができませんでした。この問題があったら,直ちにバグレポート をお送りください。この件に関して,もしAcctonのカードを持っているなら, 使用しているマザーボードの型番とともに成功レポートをお送りください。 この問題が特定のカードとともに移動するか,さもなくばマザーボード側に 残るのか,特に興味があります。」 以下をやってみてください。これで症状が無くなった人もいます。 o バスの速度を変更する,あるいはカードを他のスロットへ移動する。 o BIOSのチップセット設定の`I/O recovery time'を変更する 3.5. WD80*3カードの問題 問題: WD80*3が[実際には存在しないのに]誤って検出される。サウンド あるいはMIDIカードを外すと`detected'メッセージが出なくなる。 理由: MIDIのポートに,WDのイーサカードと同一のチェックサムを発生す るものがある。 解決法: イーサカードドライバをアップデートしてください。新しいバー ジョンは,さらに厳密なチェックを行なうようになりました。誤検出され るMIDIチップが0x388に存在し,0x380に存在するWDとして検出されるなら, 以下のようにも対処できます。 LILO: linux reserve=0x380,8 問題: 使用している80*3に関して次のようなメッセージが出る。 eth0: bogus packet size, status = NNNN kmalloc called with impossibly large argument (65400) eth0: Couldn't allocate sk_buff of size 65400 eth0: receiver overrun 理由: 共有メモリに問題があります。 解決法: 問題が散発的なら,ハードウェアに問題があります。改善の容易 な,典型的な問題としてはボードの衝突があります。ボードの使用する領 域をキャッシュしていたり`shadow ROM'を有効にしていたり,あるいはバ スを8MHz以上で使用しているのかもしれません。さらに,イーサネットカ ード上のメモリの故障が結構頻繁にあります。もしカード用の診断プログ ラムがあったら,それを実行してみてください。 問題が慢性的なら,またリブートにより症状がなくなってしまうなら,起 動時のプローブメッセージを記録し,becker@cesdis.gsfc.nasa.govへメ ールを送ってください。共有メモリの位置についての情報が特に重要です。 問題: WD80*3が起動時に検出されない。 理由: 初期のミツミのCD-ROM(mcd)ドライバは,I/Oアドレス0x300に何か [ミツミのCD-ROMとは限りません]が存在すると,検出に成功してしまい ます。これはいいことではありませんので,もう少ししっかりしたドライ バでなければなりませんね。いったん別のドライバ[この場合mcd]がI/O アドレスを「所有している」と登録してしまうと,別のドライバ(wd80x3 を含みます)は「排除」されてしまい,そのアドレスにカードが存在する か,検出できなくなってしまうのです。 解決法: 上記のmcdドライバなど,使用しないドライバを一切組み込まずカ ーネルをリコンパイルします。あるいはイーサカードを別のアドレスに移 動してみてください。すべてのカードで有効なI/Oアドレスは,「検出する アドレス」に列記してあります。以下のように,起動時のパラメータ指定 (LILO経由です)で,mcdドライバに検出すべきアドレスを指示することも できます。 mcd=0x200,12 問題: 古いwd8003および/あるいはジャンパ指定可能なwd8013がいつもIRQ を誤って設定される。 理由: 古いwd8003およびジャンパ指定可能なwd8013クローンは,ドライバが IRQ設定を読み出すためのEEPROMを持っていません。ドライバがIRQを読めな い場合は,IRQを見つけるためにIRQを自動検出します。自動検出が0を返す と,ドライバは8 bitカードに対してIRQ 5,16 bitカードに対してはIRQ 10 を割り当ててしまいます。 解決法: 自動検出を避け,起動時の引数により自分がジャンパで設定したIRQ をカーネルに知らせるようにします。例えば,IRQ 9を使用するなら,以下 のようにすれば正しく動作します。 LILO: linux ether=9,0,eth0 3.6. 3Comのカードの問題 問題: 3c503がIRQ Nを選択するが,このIRQは別のIRQ Nを使用するデバイス (例えばCD ROMドライバやモデムなど)のために必要だ。カーネルをコンパ イルしなおさずにこの問題は解決可能か? 解決法: 3c503ドライバは空いているIRQ線を順に{5,9/2,3,4}検出してい きます。そして,使われていないIRQを選択するはずです。大変古いドライバ は,起動時にIRQ線を選択していましたし,現在のドライバ(0.99pl12および それ以降)ではopen()あるいはifconfigが行なわれた時点でIRQを選択します。 代わりに,LILOを通じて引数を渡すことにより,起動時にIRQを固定すること ができます。以下のようにすれば,IRQ 9,ベースI/Oアドレス0x300,<無視 される値>,およびif_port #1(外付のトランシーバ)を指定できます。 LILO: linux ether=9,0x300,0,1,eth0 以下ではIRQ 3を選択し,ベースアドレスについては自動検出し,<無視され る値>およびデフォルトのif_port #0(内蔵のトランシーバ)を指定できます。 LILO: linux ether=3,0,0,0,eth0 問題: 3c503: configured interrupt X invalid, will use autoIRQ. と表示 される。 理由: 3c503カードはIRQ{5,2/9,3,4}のうち1つだけ利用できます(これら のIRQ線だけがカードに接続されています)。もし以上のIRQ以外を設定してし まうと,上述のようなメッセージが表示されてしまいます。通常は,3c503の IRQを指定する必要はありません。ifconfigを行なった際にIRQが自動検出され IRQ{5,2/9,3,4}のうち1つを選択します。 解決法: 上述の有効なIRQのうち1つを使用するか,IRQの指定をやめて自動検 出を行なわせてください。 問題: 3c503ドライバでAUI(シックネット)ポートを使用できない。デフォル トのシンネットポートではなく,こちらを使用させるにはどうするのか? 解決法: 3c503 AUIポートは0.99pl12およびそれ以降で起動時に選択すること ができます。現在使用されていないdev->rmem_start変数の下位ビットを立て ることで選択できます。ですから,起動時のパラメータは LILO: linux ether=0,0,0,1,eth0 となります。IRQ 5,ポートのベースアドレス0x300,および外部トランシー バを使用することを明示するには: LILO: linux ether=5,0x300,0,1,eth0 カーネル1.3.42およびそれ以降では,モジュールとしてロードする際にもAUI ポートを指定できます。insmodのコマンドラインにi/oおよびirqの値ととも にxcvr=1を付け加えてください。 また,カーネルバージョン1.00から1.03までは「面白い」機能を持っていま す。内部トランシーバが不調になると,AUIポートに切り替わるというもので す。例えば,一時的にケーブルを外してしまった場合など,二度と内部トラ ンシーバに戻らなくなってしまうのですから,これは問題です。1.04および それ以降では,最初の送信に失敗したときだけ切り替わるようになっていま す。 3.7. ヒューレットパッカードのカードの問題 問題: 内蔵AMD LANCEチップを使用するHP VectraがIRQおよびDMAの設定を誤 る。 解決法: HP Vectraは標準のHP-J2405Aとは異なる実装を行なっています。 `lance.c'ドライバはHP Lanceに実装されている設定レジスタの値をつねに使 用するようになっていました。Vectraの場合では,無効な0xffという値を読 み込んでしまいます。1.1.50あたりのカーネルから,Vectraの場合でも適切 な値を読み込めるようになりました。 問題: `HP PCLAN support'を組み込んでカーネルをコンパイルしても,HPの カードが起動時に検出されない。 解決法: たぶんHP PCLAN+を使用しているのでしょう -- 「プラス記号」に注 意してください。PCLAN+はバージョン1.1の中・後期から使用できるようにな りました。(たぶんより新しい)カーネルをHP PCLAN+のサポートを組み込ん でリコンパイルすることにより,作業をできるようになることでしょう。 3.8. 特定のカードに関わらないFAQ 3.8.1. イーサカードが起動時に検出されない。 大抵の原因は,使用したいカードをサポートしているカーネルを使用してい ないのでしょう。Slackwareなどに入っている,予めコンパイルされているカ ーネルを使用しているのなら,どのカーネルをインストールしたのか,また そのカーネルがカードをサポートしているのか,添付の文書をよく読んでく ださい。サポートしていなかったら,カードをサポートしているカーネルを 入手するか,自分で組み込むかのどちらかです。 通常,自分の必要なドライバだけを組み込んだカーネルを構築するのが賢い 方法です。カーネルのサイズを小さくできますし(アプリケーションのため に貴重なRAMを節約できます!),過敏なハードウェアに問題を生じさせるデ バイスの自動検出の数を減らすことができます。カーネルのコンパイルは思 ったほど複雑なことではありません。どのドライバが必要か,という一連の 質問に答えて行くだけで,あとは全部勝手にやってくれます。 [拙訳のKernel-HOWTO等を御参照ください。] 次なる大きな原因は,カードが必要とするi/o空間の一部を他のデバイスが使 用している,というものです。ほとんどのカードはi/o空間を16あるいは32バ イト幅で使用します。カードが0x300から32バイト幅で使用するよう設定され ていると,ドライバは0x300-0x31fを要求します。他のデバイスドライバがそ の範囲内で1ポートでも登録してしまっていると,そのアドレスにおいて検出 は行なわれずドライバは黙って次のアドレスへ検出に行きます。ですから cat /proc/ioportsを行ない,カードの要求するio空間が完全に空いているこ とを確認してください。 別の原因としては,デフォルトでは検出されないi/oアドレスにジャンパで設 定してしまっている,というものがあります。この文書の「検出するアドレ ス」にカードごとのリストがあります。カードのi/o設定がリストの検出され るアドレスになくても,「イーサネットの引数..」の項で説明した方法のよ うにether=コマンドを使用して起動時にi/oアドレスを指定することができま す。 3.8.2. ifconfigがカードに関して誤ったi/oを報告する。 いいえ,間違ってません。あなたがi/oを誤解しているのです。これはバグで はありませんし,報告されている数値は正確です。特定の8390ベースのカー ド(wd80x3,smc-iltraなど)では,割り当てられたi/oポートの先頭からず れたところに実際の8390チップが存在しているのです。 cd /usr/src/linux/drivers/net;grep NIC_OFFSET *.c|moreを実行し,結果 を見てください。これがdev->base_addrに記録されている値で,ifconfigが 報告する値です。カードが使用するポートの全範囲を知りたいなら,cat /proc/ioportsすることで望みの値が得られます。 3.8.3. PCIマシンにおける共有メモリのISAカード 大抵多くの0xffffが表示されることになるでしょう。いかなる共有メモリタ イプのカードも,適切にPCI ROM BIOS/CMOS SETUPを設定しないことには, PCIマシンで使用することはできないでしょう。カードが使用するメモリ領域 に対して,ISAバスからの共有メモリアクセスを可能なように設定しなければ いけません。どの設定が正しいのかわからない場合は,メーカーに問い合わ せるか,お近くのコンピュータ教の教祖様にお聞きください。 3.8.4. 非同期転送モード(Asynchronous Transfer Mode,ATM)のサポート Werner AlmesbergerはLinuxのATMサポートに取り組んでいます。Efficient NetworksのENI155p(Efficient Networks <http://eee.efficient.com/>) とZeitnetのZN1221(Zeitnet <http://www.zeitnet.com/>)について作業を 行なってきました。 Wernerは,ENI155pのドライバに関してはかなり安定だが,ZN1221のドライ バに関してはまだ完成していない,と言っています。 最新の状態については以下のURLをチェックしてください: Linux ATM Support <http://lrcwww.epfl.ch/linux-atm/> 3.8.5. FDDIのサポート LinuxにFDDIのサポートはあるんですか? Donaldは言っています: 「LinuxにはFDDIボードのドライバはありません。 わたしはスーパーコンピュータ畑の出身なので,外野の方々はFDDIが私の 開発計画の上位にあるものと思っているかもしれません。しかし,FDDIは コストに見合う速度が出ませんから,100base{X,Anynet}が迫りつつ今, ほとんど捨て去られたテクノロジーのように思えます。(確かに,現在 FDDIボードが1000ドル以下で購入できることは知っています。これは,開 発コストを少しでも回収しようという最後のあがきのように思えます。 FDDIの次の世代は,どの技術が担うのでしょうか?) 3.8.6. Alpha/AXP PCIボード上のLinux用イーサネットカード 現在のところ,DEC Alpha CPUベースのシステムでも動作するよう,depca, de4x5およびすべての8390ドライバ(wd,smc-ultra,ne,3c503,e2100, hp,hp-plus)だけが「アーキテクチャ非依存」で作られています。 必要な変更手順はそんなに複雑ではありません。以下の項目を行なうだけです。 - Alphaが使用するHZ値が異なっているため,それを補償するためにすべて のタイミングに関連した値をHZ/100倍する。(すなわち,timeout=2;は timeout=2*HZ/100;になります。) - すべてのi/oメモリ(640kから1MBまで)ポインタの相違を,適切なreadb() writeb() eradl() writel()コールに置き換える。以下の例を参照してくだ さい。 ______________________________________________________________________ - int *mem_base = (int *)dev->mem_start; - mem_base[0] = 0xba5eba5e; + unsigned long mem_base = dev->mem_start; + writel(0xba5eba5e, mem_base); ______________________________________________________________________ - i/oメモリをコピー元あるいはコピー先として持つすべてのmemcpy()コー ルをmemcpy_fromio()あるいはmemcpy_toio()のどちらか適正な方に置き換 える。 3.8.7. ハブ無しで10BaseT接続する ハブ無しで10BaseT(RJ45)ベースのシステムを接続できますか? 2台なら簡単に接続できますが,それ以上だと特別なデバイスや仕掛けなし ではできないでしょう。「ツイストペア」の項を参照してください -- ど のようにするのか,説明があります。いくつかの線を交差させ,部品を 追加するだけでは,ハブ無しでやっていくことはできません。ハブを使 用せずに信号の衝突を正しく処理することには,かなり無理があります。 3.8.8. SIOCSIFxxx: No such deviceというメッセージが出る。 起動時に`SIOCSIFxxx: No such device'というメッセージが`SIOCADDRT: Network is unreachable'とともに出ます。何が悪いんすか? 起動時にイーサネットデバイスが検出されておらず,結果ifconfigとroute の実行時に処理すべきデバイスが存在しないのです。起動時のメッセージ を確認するために,dmesg | moreを実行し,イーサネットカードの検出に 関して何かメッセージが出ていないか確認してください。 3.8.9. SIOCSFFLAGS: Try againというメッセージが出る。 `ifconfig'実行時に`SIOCSFFLAGS: Try again'と出る -- 何? イーサカードが使用するIRQを,別のカードが横取りしてしまったため,カ ードがIRQを使用できないのです。解決するために必ずしも再起動する必要 はありません。なぜならデバイスによっては必要な時だけIRQを使用し,用 が済んだら解放するものがあるからです。例としてはサウンドカード,シ リアルポート,フロッピーディスクドライブなどがあります。どの割り込 みを現在使用しているか確認するには,cat /proc/interruptsと入力して ください。ほとんどのLinuxのイーサカードドライバは,`ifconfig'を経て 使用を開始する時だけIRQを使用します。ですからほかのデバイスが必要な IRQ線を解放したら,ifconfigで「再挑戦」することができるでしょう。 3.8.10. Link UNSPECとHW-addrが00:00:00:00:00:00というメッセージが 出る。 ifconfigを引数なしで実行すると,(10Mbps Ethernetの代わりに)LINKが UNSPECであると表示され,さらにハードウェアアドレスがすべて0と表示さ れる。 これはカーネルのバージョンより新しい`ifconfig'を実行しているからで しょう。この新しいバージョンのifconfigは,古いカーネルと組み合わせ て使用すると,これらの情報を表示することができないのです。カーネル をバージョンアップするか,ifconfigを「バージョンダウン」してくださ い。あるいはこのメッセージを無視しても構いません。カーネルはカード のハードウェアアドレスを取得していますから,ifconfigがアドレスを読 み出せないことはなんら問題ではありません。 3.8.11. 多くのRXおよびTXエラー ifconfigを引数なしで実行すると,受信および送信パケットの両方のエラ ーカウントが非常に多く表示される。動作はうまく行っているように見え るけど -- どうなってるの? もう一度よく見てください。RX packets:大きな数〔空白〕errors:0〔空白〕 dropped:0〔空白〕overrun:0,と表示されているはずです。TXの行も同様 です。あなたが見ている大きな数というのは,マシンが受信および送信し たパケットの合計数ということになるんです。それでも混乱してしまうなら, 代わりにcat /proc/net/devとしてみてください。 3.8.12. イーサカードに対する/dev/のエントリ /dev/eth0は/dev/xxxへのリンクとして存在します。これで正しいのですか? 以前お聞きになったこととは矛盾していますが,/dev/*のファイルは使用さ れません。/dev/wd0や/dev/ne0などのエントリは削除しても構いません。 3.8.13. Linuxと``trailers'' イーサカードを`ifconfig'するときに,trailersを無効にできますか? trailersを無効にすることはできませんし,そうしたくないことでしょう。 `trailers'はネットワーク層におけるデータのコピーを避けるための工夫 です。この考え方はサイズ`H'のあらかじめ決められたサイズのヘッダを 使用し,可変サイズのヘッダ情報をパケットの最後に置き,そしてページ の先頭から`H'バイト前にすべてのパケットを割り当てるというものでした。い いアイディアではありましたが,実際には正常に動作しないことがわかり ました。だれかが`-trailers'の使用を提案しも,それは他の問題の隠れ蓑でし かありません。問題を解決してはくれませんが,問題が勝手に解決してしまった ら,深い神秘的な知識を主張できます。 3.8.14. より低位(raw)なイーサネットデバイスへのアクセス TCP/IPや友人達を経ることなく,Linuxで低位のイーサネットデバイスへ アクセスするにはどうしたらいいの? ______________________________________________________________________ int s=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL)); ______________________________________________________________________ これでどのようなプロトコルでも受信できるソケットが得られます。 ソケットへのrecvfrom()呼び出しで,ソケットはsa_familyのデバイスタイ プをsockaddrに,またsa_data配列にデバイス名を書き込みます。Linux用 のSOCK_PACKETをだれが開発したのかは存じませんが(もうずいぶん経ちま す),すぐれた仕組みです[中島某風にいうところの,いい仕事してます ねえ]。低位のデバイスにsendto()呼び出しを使って送信することもでき ます。どちらの場合でもrootのアクセス権限がなければなりません。 4. 性能を最大限引き出すために イーサネットの性能があまり出ない場合に,あるいはftp転送で少しでも速 度を上げるために利用できる工夫を集めてみました。 ttcp.cプログラムは正味のスループットを測定するためにはよいテストで す。別の一般的な方法はftp> get 大きなファイル /dev/nullをしてみるこ とです。ここでいう大きなファイルとは1 MB以上で,かつ送信側のマシン のバッファに残っているものです。(`get'を少なくとも2回行ないます。 1回目は送信側のマシンのバッファにキャッシュさせるために行ないます。) バッファにキャッシュされているファイルを使用するのは,測定において ディスクへのアクセススピードには興味がないからです。それは,やって きたデータの受信先をディスクではなく/dev/nullにするのも同じ理由です。 4.1. 一般的な考え方 8 bitのカードでさえも次から次へとやってくるパケットをすき間なく受信 することになんの問題もありません。問題となってくるのは,コンピュー タが,次にやってくるパケットのための余地を作るために十分な速さで, カードから受信したパケットを取り出せなくなってきたときです。コンピ ュータがすでに受信したパケットをカード上のメモリからすばやく取り出 せないと,カードにはもう次のパケットを受信するための場所がなくなっ てしまうことになります。 この場合,カードは新しいパケットを取りこぼすか,以前受信したパケッ トの先頭に上書きしてしまいます。どちらも再送を引き起こす/要求する ことになり,円滑なデータの流れの邪魔になってしまい,最悪の場合性能 が理論値の1/5になってしまうこともあります。 ボード上により多くのメモリを持っているカードは,より多くのパケット を「バッファ」することができるので,パケットを取りこぼすことなくき っちりつまったパケットを連続して取り扱うことができます。これは逆に いうと,パケットの取りこぼしを防ぐために,バッファからパケットを取 り出すのに必要なコンピュータの負荷が低く済むということを意味します。 ほとんどの8 bitカードは8kBのバッファを持っていて,16 bitのカードは 16kBのバッファを持っています。ほとんどのLinuxのドライバはバッファの うち3kBを(2つの送信ピンポンバッファのために)保存していて,8 bitカ ードについては受信用に5 kBだけ残しています。これは3つのフルサイズ (1500バイト)のイーサネットパケットにだけに十分な量です。 4.2. ISAバスの速度 上述のように,パケットがカードから十分速く取り出されて行けば,受信 するパケットのためのバッファメモリが小さくても,取りこぼしやオーバ ーランは起きません。カードからコンピュータのメモリへパケットが取り 出されて行く速度を決定する因子は,カードとメモリの2つを結ぶ経路 -- すなわちISAバス上のデータ転送の速度です。(CPUがおっそい386SX-16な ら,これも速度に影響を与えます。) 推奨されているISAバスクロックはおよそ8MHzですが,多くのマザーボード と周辺装置はそれより速い周波数で動作することが可能です。ISAバスのク ロック周波数は普通,CMOSの設定においてメインボード/CPUのクロック周 波数の分周比を選択することで設定できます。 たとえば,40MHzの486,古い8 bit WD8003EPカードという条件において, ISAバスの速度を変えてTTCPプログラムで測定した結果は以下のようになり ます。 ______________________________________________________________________ ISA Bus Speed (MHz) Rx TTCP (kB/s) ------------------- -------------- 6.7 740 13.4 970 20.0 1030 26.7 1075 ______________________________________________________________________ TCP/IPを用いている限りは,いかなる10MB/sのカードを持ってしても1075kB /s以上の速度を出すことは難しいでしょう。しかし,どんなボード/カード でもISAバスクロックを高速にして動作するとは限りません。ほとんどのシス テムでは13MHz以上の速度では正常に動作しません。(さらに,ほとんどの PCIシステムではISAバスの速度が8MHzに固定されていますので,ユーザ側で それを増やすことはできません。) 高速な転送速度のほかに,メモリとi/oの転送サイクルが短くなることにより CPUの使用時間を減らせるという利点もあります。(ISAバス上のハードディ スクとビデオカードも,一般にISAバスの速度を上げることにより性能が向上 することでしょう。) 4.3. TCPの受信ウィンドウの設定 繰り返しになりますが,ボード上のRAMの小さなカードと,カードとコンピ ュータのメモリ間のデータ転送速度の遅いマザーボードとの組み合わせは, トラブルの原因となります。同じドメインにある速いコンピュータがよどみ なく 32kB のデータをダンプするような速さでデータを受信するように見せ かけるようにデフォルトの TCP 受信ウィンドウは 32kB になっています。 最近のバージョンのrouteコマンドは,実行中にこのウィンドウのサイズを 設定することができます。普通,このウィンドウのサイズを減らさなけれ ばならないのは,ローカルのネットのみです。なぜならいくつかのルータ やゲートウェイの後ろにあるコンピュータは,問題を引き起こさない程度 に「バッファ」されているからです。使用例としては: ______________________________________________________________________ route add <whatever> ... window <win_size> ______________________________________________________________________ ここでwin_sizeは,使用したいウィンドウのサイズ(バイト単位)です。ISA バス上の10MHzかそれ以下で動作している8 bitの3c503カードは,およそ4kB のウィンドウサイズで良好に動作します。あまりにウィンドウを大きくする と,パケットのオーバーランや取りこぼしを引き起こし,結果イーサネット のスループットが著しく低下します。生じている取りこぼしやオーバーラン の状況を表示するcat /proc/net/devにより動作状況をチェックできます。 4.4. NFSの性能の向上 8 bitのカードをNFSのクライアントとして8kBのNFSパケットサイズ(Sun純 正)で使用すると,期待したほどの性能がでないことを発見した人がいま す。 理由として考えられるのは,8 bitと16 bitのカードにおけるボード上のバ ッファサイズの違いによるものでしょう。イーサネットパケットの最大の サイズはおよそ1500バイトです。8kBのNFSパケットが6個の連続した最大サ イズのイーサネットパケットとしてやってきたとします。8 bitのカードで も16 bitでも連続したパケットを受信するのに問題はありません。問題は, カードのバッファからパケットが適宜取り出されて行かなくなったときに 生じます。バッファが溢れてしまうのです。8 bitカードが転送ごとに余計 なISAバスサイクルを必要とすることも困りものです。8 bitカードを使用 している場合の解決策は,NFSの転送サイズを4kBにするか,カードのバッ ファからのパケット取り出しを高速化するためにISAバスの速度を上げるか のどちらかです。 5. ベンダ/メーカ/モデルに固有な情報 5.1. 3Com 使っているカードが何かわからない場合,だけどそれが3Comのカードだと 思われる場合,多分アセンブリナンバから類推できるでしょう。3Comには `Identifying 3Com Adapters By Assembly Number'(ref 24500002)という 文書がありますので,これでどのカードか明らかにすることができるでし ょう。3Comからドキュメントを得る方法は,「3Comの技術情報」を参照し てください。 また,3ComはさまざまなソフトウェアをFTPサイトで提供しています。: ftp.3Com.com ぜひ見に行ってください。 この文書をWWWブラウザで御覧になっている方は3ComのWWWサイトへ行って みることができます。 5.1.1. 3c501 状況 -- セミサポート 使うのに骨が折れます。多くの店に余りものがたくさんあります。徒労に 終りますので,買わないでください。繰り返します。冗談としてもこのカ ードは買わないでください。その性能は恐ろしいほど悪く,問題が山積み です。 3ComのCameron L. Spitzerは言っています:「もちろん,これは私自身の 意見ですが,3Comは新しいシステムに3C501をインストールしないように 勧めていると信じています。これは,Donaldが議論しているのとほぼ同様 な理由からです。Linuxマシンで3C501を使用してもおそらく幸せにはなれ ないでしょう。3Comの開発者向け注文書のデータシートには`(obsolete)' [廃品種]と記されており,無料の技術情報マニュアルを必要とする人々 に配布するプログラムに,このボードは含まれていません。10年選手はほ とんど不滅でしょうが,もうそれ以上はもたないでしょう。」 まだ疑っていらっしゃいます?3C501は一度に一つのことしかできません。 シングルパケットバッファからパケットを取り出している間は,別のパケ ットを受信することができませんし,送信パケットをバッファに転送して いる間にパケットを受信することもできません。これは,個々のパケット を処理したり応答したりするのに数十msecを必要とする8088ベースのコン ピュータにとっては十分でしたが,近代的なネットワークは,ほとんどす べての処理毎に,すきまなくパケットを送信します。 IRQ自動検出が動作し,DMAは用いられず,自動検出は0x280および0x300の みを探します。また,デバッグレベルは起動時の引数の3番目にセットしま す。 もう一度言います。3C501は使用しないでください。IPマルチキャストカー ネルを使用していてもです。マルチキャストカーネルではすべてのマルチ キャストパケットを受信する間、あなたはしばらく作業を中止する必要が あるでしょう。詳細についてはソースコードの先頭のコメントを参照して ください。 5.1.2. 3c503, 3c503/16 状況 -- サポートされています 3c503/16をお持ちなら,1.3.37に関してドライバがカード上の16kB RAMを すべて使用する機能を持っていることに関心があることでしょう。以前の バージョンは16bitカードを8bitカードとして扱っていましたので,利用 できるRAMのうち半分しか使用していませんでした。この改訂により,以 下に述べる新たに生産されたカードに記録されている新しい3Comのプリフ ィックスも検出されます。 最近生産された3c503/16カードは新しいベースハードウェアアドレスを持 っています。これは,3Comが数を使い果たしたから(非常に多くのカード を生産しているんです!)です。以前は02 60 8Cで始まるものを使用して いましたが,新しいものは00 20 AFから始まります。1.3.37まででは,ド ライバは古いアドレスのみをチェックし,新しいカードはスキップしてい ました。1.3.37より新しいカーネルへバージョンアップすることもできま すし,古いカーネルでは3c503.cの中のアドレスを変更することもできま す。 これらの共有メモリイーサカードは8390の機能(技術者がたくさんのバグ を発見しています!)では使用していないプログラムドI/Oの機能も持っ ています。同じバス幅を持つWD80x3とほぼ同じ速度が出るはずなんですが, 実際には若干遅いです。3c503は「EEPROM設定」を有しないので,Linuxで カードを使用する前に診断/設定プログラムを実行する必要はありません。 3c503の共有メモリアドレスは起動PROMアドレスと共有しているジャンパ で設定します。これは他のISAカードに慣れている人々では混乱するでし ょう。通常は起動PROMを持っていない限りジャンパを``disable''にして 置くのが普通ですから。 Linuxの3c503ドライバはプログラムドI/Oモードでも使用できますが,共 有メモリモードより遅く若干信頼性に欠けます。また,プログラムドI/O モードは,ドライバ改訂時にそんなにテストが行なわれていません。 MS-DOSとの互換性のために必要な場合以外は,プログラムドI/Oを利用す べきではありません。 3c503のIRQ線はソフトウェアで設定され,EEPROMは参照しません。MS-DOS のドライバとは異なり,LinuxのドライバはIRQを自動検出することができ ます: {5,2/9,3,4}の順で,最初に利用できたIRQを使用します。選択する ごとにifconfigが実行されます。(古いドライバは起動時にIRQを選択し ていました。)`ifconfig'におけるioctl()呼び出しは,実行時に利用で きるIRQ線がない場合EAGAINを返します。 503使用時によく生じる問題については,「3Comの問題..」にあります。 このドライバをローダブルモジュールとして使用するなら,モジュール化 に特有の情報として「モジュールとしてイーサネットドライバを使用する」 と「モジュールとしての8390ベースのカード」を参照すべきでしょう。 5.1.3. 3c505 状況 -- セミサポート Craig Southeren(geoffw@extro.ucc.su.oz.au)により書かれたドライバ です。これらのカードもi82586チップを使用しています。あまり情報はあ りません。標準カーネルにドライバは含まれていますが,アルファ版ドラ イバとして扱われています。「アルファ版ドライバ」に,Linuxにおける アルファテスト版のイーサネットドライバの使用に関する重要な情報 があります。 これらのカードを使用するにあたって,読んでおくべきファイルが, /usr/src/linux/drivers/net/README.3c505にもあります。設定を有効/ 無効にできる,さまざまなオプションに関する情報が含まれています。 技術情報は「Intelチップのプログラミング」から得られます。 5.1.4. 3c507 状況 -- セミサポート このカードはIntelのチップの1つを使用し,ドライバの開発はIntel Ether Expressドライバの開発に密接に関係しています。ドライバは標準 カーネルに含まれていますが,アルファドライバとしてです。 「アルファ版ドライバ」に,Linuxにおけるアルファテスト版のイーサネ ットドライバの使用に関する重要な情報があります。技術情報は「Intel チップのプログラミング」から得られます。 5.1.5. 3c509 / 3c509B 状況 -- サポートされています 注: 現在のところ,デフォルトではないカーネルにおいて,Donaldはこれ らのカードのドライバを改訂しました。起動時の無害な,不明なデバイス に対するIRQ Nメッセージの修正,3c509Bプラグアンドプレイカードに対 するより適切な取り扱い,および特定のアダプタエラー状況からの復帰な どの点が改善されています。 かなり安価で,非バスマスタ設計では優れた性能を持っています。欠点と しては,もともとの3c509は割り込み発生率が低いことを要求することです。 3c509Bはこのような問題がありません。これは大きなバッファを持ってい るからです。(以下参照。) ISAカードの検出は,ほとんどのカードと異なった方法で行なわれること に注意してください。基本的に,ID_PORT (ポート0x100)にデータを送 信することでカードに応答を要求します。もしほかの奇妙なISAカードが 3c509のID_PORTを含むI/O領域を使用していると,検出されなくなること に注意してください。他のISAカードと衝突するようであれば,3c509.c のID_PORTを0x110あるいは0x120あるいは..へ変更することができます。 こうすれば3c509を利用できます。また,この検出法では複数のISA 3c509 カードのうち,特定のカードが常に最初に検出されるということを意味し ます。もっとも小さいハードウェアイーサネットアドレスを持つカードが 常にeth0となります。特定のアドレスに6バイトのハードウェアアドレス を割り当てたい人を除いては,問題にはならないはずです。複数の3c509 を使用するのであれば,i/oポートの指定は無しで(すなわちi/o=0としま す)ether=0,0,ethNコマンドを付加し,どのカードが最初なのか自動検出 に並べ替えさせるのがベストです。そうしないとすべてのカードを検出で きないかもしれません。 もともとの3c509は小さなパケットバッファ(全体で4kB,受信2kB,送信 2kB)しか持っておらず,割り込みが長時間マスクされるとドライバがパ ケットを取りこぼしていました。この問題を最小限にするためには,IDE ディスク転送中の割り込みのマスクを解除したり(hdparm(8)参照), IDE転送を速く終らせるためにISAバスの速度を増やしてみてください。 (予測可能割り込みを使用するために,ドライバを完全に書き換えること ができますが,格段の動機や必要性がない限り動作しているドライバを書 き換えるという行為の優先順位は低いのです。) Cameron Spitzerは言っています: 「誤って509をEISAアドレッシングモー ドにし,それをEEPROMに保存してしまった場合,カードをEISAマシンで使 用しなければならなくなるか,ノーマルに戻すために悪名高いTest Viaを 実行しなければならなくなり,ISAマシンをハングさせてしまうIOアドレ ス0における衝突を起こすことでしょう。3c509Bバージョンではこの問題 は解決されていると思います。」 新しいモデル3c509Bではボード上に8kBのバッファを持ち,バッファは受/ 送信に対し4/4,5/3,あるいは6/2と分割することができます。この設定 もEEPROM上に記憶できます。これで,もともとの3c509における上述の問 題が解決されるはずです。現時点では,Linuxのドライバは新旧の判別が できず,3c509Bを古い3c509として扱います。 3c509Bユーザはプラグアンドプレイ機能を無効にするため,また出力先 [10Base2かTか]を設定するため,提供されているDOSのユーティリティ を使用せねばなりません。Cameronは加えて: 「3C509Bは3Comの再配置可 能なI/Oポートの設計とMicrosoft(TM)のプラグアンドプレイ("PnP")を持 っています。両方を同時に使用することはできません。(私が思うに, 壊れた)BIOSでは,PnPアドレス(0x279?)へ書き込むことによりPnP動 作が開始するものもあります。この書き込みにより3C509BのようなPnPア ダプタはPnP状態へ移行しますが,そうするとBIOS(このような変なBIOS) は作業を終了して帰って来る,ということがなくなってしまいます。 3C509BはPnP ID Sequenceの中程でハングしてしまい,ユーザはハングし て欲しいんじゃなくて,3ComのID Sequenceを使用して欲しいんだ,とい うことをBIOSは理解してくれません。3C5X9CFG /PNPRSTはこのハング状態 をリセットしてくれます。ドライバがPnPを使用しない(例えばLinux)な ら,PnPを無効にしておくべきです。 PnPを有効にしておく設定をデフォルトに決定したのは[メーカではなく] 市場です。このことに文句がある,あるいはないなら,是非ユーザ登録葉 書にその怒りを書く時間を割いてください。メーカは多くの情報を得るこ とでよりよい決定ができます。また,BIOSのアップグレードが必要かどう か,マザーボードメーカに確認してください。」 メディア[ケーブル]の検出機能に関してCameronは: 「自動検出は3C509(B)の市販*ドライバ*の機能です。私の知る限り,今ま でLinuxのドライバにそれを要求した人はいません。drivers/net/3c509.c が私の3C509Bを起動時に認識すると,eth0: 3c509 at 0x300 tag 1, 10baseT port, ... と表示され,カードは10BASE-Tに設定されていることがわかりま す。小さなEEPROMから読み出すことが,自動検出のための正しい方法である と私は考えます。 5.1.6. 3c523 状況 -- サポートしてません このMCAバスカードはi82586を使用していますし,今までにMCAマシンでLinux を走らせている人もいるにはいます。このカード用のドライバへ,3c507ド ライバの一部を再利用しようとしている人もいるかもしれません。 5.1.7. 3c527 状況 -- サポートしてません これも別なMCAカードです。あまり興味はありません。3c523や3c529の方が まだ期待できます。 5.1.8. 3c529 状況 -- サポートしてません このカードは,実際には3c509と同じチップセットを使用しています。 Donaldは,EISAのカードを検出した後,またISAカードを検出する前にMCAの カードをチェックするためのフックを3c509ドライバに組み込んでさえいま す。しかしそれ以上は進展していません。Donaldは: 「わたしはMCAマシンを利用することができません(また,検出コードを十 分には理解してません)ので,mca_adaptor_select_mode()やmca_adaptor_id() ルーチンを書きませんでした。起動時に割り当てられるアダプタのI/Oアドレ スを得る方法を見つけられたら,コメントアウトされている部分の代わりに hard-wireするだけです。IRQ,if_portおよびイーサネットアドレスを取得 するコードはそのままにしておくことに注意してください.」 と書いています。 5.1.9. 3c562 状況 -- サポートされています このPCMCIAカードはモデムと3c589Bイーサネットカードの複合カードです。 ユーザにとっては,モデムは標準的なモデムとみなすことができます。難し いのは,1つの割り込みを2つの別々のLinuxドライバで共有するところです。 いくつかの新しいレジスタと,割り込みの共有のサポートがあります。 サンプル機と文書をDavid Hindsへ送ってくれたことに対して,再度Cameron に感謝します。Davidの次のPCMCIAパッケージのリリースで,サポートされ ることでしょう。 5.1.10. 3c579 状況 -- サポートされています 509のEISAバージョンです。現在のEISAバージョンは32 bitインターフェース ではなく,16 bit幅のチップを使用します。ですから,性能の向上はたいして ありません。EISAの検出コードは,0.99pl14で3c509.cに加えられました。 3c579ユーザからの進捗状況レポートに興味があります。(ドライバに関する 情報は,先述の3c509のセクションをお読みください。) Cameron Spitzerは書いています: 「3C579(Etherlink III EISA)はEISAの カードとして設定されなければなりません。IOベースアドレス(window 0 register 6 bits 4:0)は1fでなければならず,これでEISAアドレッシング モードが選択されます。ASICの外部ロジックはIOアドレスをs000とデコード し,ここでsはスロットの番号です。まだこのことに関して,参考になる文 書はないような気がします。IOベースアドレスを除いては,'579は'509 (EL3 ISA)と全く同じ振舞をするはずですし,もしそうでなければぜひそ のことを教えていただきたいです(私の業務のアドレスで)。」 5.1.11. 3c589 / 3c589B 状況 -- セミサポート 今までに,多くの人がこのPCMCIAカードを相当の期間使用してきました。 このカードのサポートは,デフォルトのカーネルソースツリーには(現時 点では)含まれていないことに注意してください。あなたのマシンの PCMCIAコントローラのチップセットが,Linuxでサポートされている必要 もあります。Donaldのftpサイトからドライバを入手できます: cesdis.gsfc.nasa.gov:/pub/linux/pcmcia/README.3c589 cesdis.gsfc.nasa.gov:/pub/linux/pcmcia/3c589.c cesdis.gsfc.nasa.gov:/pub/linux/pcmcia/dbether.c あるいは,ネットサーフィンしている人なら: Don's PCMCIA Stuff <http://cesdis.gsfc.nasa.gov/linux/pcmcia.html> それでもPCMCIAソケットイネーブラは必要です。 PCMCIAのチップセット,ソケットイネーブラなどに関する詳細な情報につい ては,「PCMCIAのサポート」を参照してください。 3c589Bの"B"の意味は,3c509の場合と同じです。 5.1.12. 3c590 / 3c595 状況 -- サポートされています これらの``Vortex''カードは,PCIバスマシン用で,'590は10Mbpsで'595は 3Comの100Mbps対応製品です。また,'595を'590として(すなわち10Mbpsモ ードで)使用することも可能です。ドライバは1.3.xカーネルから存在して いますが,以下のURLから入手することができます: Vortex <http://cesdis.gsfc.nasa.gov/linux/drivers/vortex.html> 3Comは評価用と称して,2枚の'595カードを合計$250で提供していました。 これがまだ有効であるかどうか,お近くの3Comの代理店へお問い合わせ下 さい。 Donaldへカードと文書を送ってくれたことに対して,3ComのCameron SpitzerとTerry Murphyに感謝します。おかげでドライバを書くことがで きました。 5.1.13. 3c597 状況 -- サポートされています これは最近リリースされた,3c59xシリーズのカードのEISAバージョンで す。3c597(別名Demon)は,先に述べたvortexドライバで動作するはずで す。 5.2. Accton 5.2.1. Accton MPX 状況 -- サポートされています 嘘をついているのではありません。このカードはまだNE2000コンパチカー ドとしてサポートされています。MPXはMultiPacket Acceleratorを表して いると思われ,Acctonによればスループットがかなり改善されるとのこと です。しかし,すでにパケットをすきまなく送っている状態なら,ここか らどう高速化できるのでしょうか... 5.2.2. Accton EN1203, EN 1207, EtherDuo-PCI 状況 -- サポートされています DEC 21040 PCIチップの実装の1つです。 これらのカードに関する詳細な情報や,ドライバの現状に関しては, 「DEC 21040」を参照してください。 5.2.3. Accton EN2212 PCMCIA Card 状況 -- セミサポート David Hindsはこのカード用のドライバについて作業しています。現状につい ては,彼のPCMCIAパッケージの最新リリースを確認するのが最良でしょう。 5.3. Allied Telesyn/Telesis 5.3.1. AT1500 状況 -- サポートされています これらはAMD LANCEの79C960バージョンを使用した,低価格イーサカードです。 バスマスタカードで,入手可能なISAバスイーサカードの中では高速な部類 に入るものの1つです。 DMAの選択とチップ番号に関する情報は「AMD LANCE」にあります。 AMD LANCEベースのイーサカードに関する詳細な技術情報は,「AMDに関する...」 にあります。 5.3.2. AT1700 状況 -- サポートされています Allied Telesis AT1700シリーズのイーサカードは,富士通のMB86965ベース です。このチップはプログラムドI/Oインターフェースを使用し,1対の固定 サイズの送信バッファを使用します。これにより,バッファの切替え時に少 し停止するだけで,少数のパケットをすきまなく送信することが可能です。 独特な機能として,10baseT 100Ω UTP(Unshielded Twisted Pair)だけで なく,Token Ringで一般的に使用される,150Ω STP(Shielded Twisted Pair) をドライブすることもできます。 AT1700で使われている富士通のチップには設計ミスがあります: マシンの電源 を投入しなおさないと完全なリセットが掛かりません。リセットボタンを押す だけではバスインターフェースをリセットできないのです。リセット時に確実 に認識されている限りは,これはそんなに問題にはなりません。カーネルが AT1700の検出に問題を有している場合,解決/対処法は,電源を再投入すると いうものです。 AT1700の中には別の問題を有するものもあります: DMAチャネルが常に5に固定 されているというものです。これはどこにも記載されておらず,この「機能」 を無効にするジャンパもありませんし,互換性の問題からDMA機能を敢えて使 用するドライバは存在しません。2枚目のカードを挿すと両方のカードが壊れ てしまいますし,DMAを無効にするにはナイフでパターンカットするしかない ので,DMAを使用するデバイスドライバが書かれることは決してないでしょう。 at1700ドライバは,標準のカーネルソースに含まれています。 5.3.3. AT2450 状況 -- サポートされています これはAT1500のPCIバージョンで,Bocaの79c970 PCIカードのような問題は ありません。Allied Telesisは1995前・中期において,まだ「ベータテスト」 中でしたので,そんなに多くの小売り店には出回っていません(問い合わせ するのは問題ないでしょう)。 DMAの選択と,チップ番号に関する情報は,「AMD LANCE」にあります。 AMD LANCEベースのイーサカードに関する詳細な技術情報は,「AMDに関する...」 にあります。 5.4. AMD / Advanced Micro Devices 5.4.1. AMD LANCE (7990, 79C960, PCnet-ISA) 状況 -- サポートされています 実際にはAMDのイーサネットカードというものは存在してません。多分あなた は,カード上にAMDと上記の番号しか見つからなかったからこのセクションを 読んでいらっしゃるのでしょう。7990はもともとの`LANCE'チップですが, ほとんどの資料(この文書を含む)は,これらの同様なチップを`LANCE'チッ プと総称しています。(ま,不正確ではありますが...) 上記の番号は,多くのイーサネットカードの心臓部である,AMD製のチップを 指しています。例えば,Allied TelesisのAT1500(「AT1500」参照), NE1500/2100(「NE1500」参照)およびBoca-VLB/PCIカード(「Boca-VLB/PCI」 参照)が該当します。 79C960(別名PCnet-ISA)はもともとの7990 LANCEの設計に,機能強化および バグフィックスが盛り込まれています。 よくある問題は,`busmaster arbitration failure'[バスマスタの調停に失 敗]というメッセージが出るというものです。これは一定時間(50us)経過 後,LANCEドライバがバスにアクセスできない場合に出力されます。通常, バスマスタDMAのマザーボードへの実装が壊れているか,他のデバイスがバス を独占してしまっているか,あるいはDMAチャネルの衝突があることを示して います。BIOSセットアップに`GAT option'(Guaranteed Access Time,保証 アクセス時間)という項目があれば,切替え/変更してみて,問題の改善に 結び付くかどうか調べてみてください。 現在のLANCEドライバで,すべてのAMD LANCEベースのカードが動作すること でしょう。(多分共有メモリを有する,もともとの7990設計の中には動作し ないものがあるかもしれませんが。)このドライバはNE1500とNE2100のクロ ーンでも動作するはずです。 ISAバスマスタモードでは,LANCE,初期化ブロック,RxおよびTx rings,お よびデータバッファから直接用いられるすべての構造体が,ISAバスからア クセス可能でなければなりません。つまり実メモリの下位16MBに存在してい なければなりません。もし16MB以上のメモリがインストールされているなら, 必要に応じて下位メモリの`bounce-buffers'[境界バッファ]が使用されま す。 DMAチャネルは,他では使用されていないdev->mem_startの値(別名PARAM_1) をセットすることにより設定できます(「PARAM_1」参照)。もしセットされ ていないと,空いているDMAチャネルを順番に有効にして検出し,初期化に成 功するかどうかをチェックします。 HP-j2405Aボードは例外です: このボードに関しては,EEPROMに設定された IRQとDMAの値を読み出すのは簡単です。 これらのチップに関する詳細な情報は,「AMDに関する...」を参照してくだ さい。 5.4.2. AMD 79C961 (PCnet-ISA+) 状況 -- サポートされています これはPCnet-ISA+です -- 79C960の強化バージョンです。ジャンパー無しの 設定とプラグアンドプレイをサポートしています。先述のセクションを参照 してください。 5.4.3. AMD 79C965 (PCnet-32) 状況 -- サポートされています これはPCnet-32です -- VLバスおよびローカルバスシステムのための,LANCE の32 bitバスマスタバージョンのチップです。v1.1.50あたりで,もともとの lanceドライバに,これら32 bitバージョンのLANCEチップに対するサポート を加えるため,小規模な変更が行なわれました。大きな問題は,現在の'965 と'970のチップの現在のバージョンは,小さなバグがあるということです。 Rx ringの際に,Rxバッファ長フィールドを消去してしまうというもので, 資料には触れられていません。 5.4.4. AMD 79C970 (PCnet-PCI) 状況 -- サポートされています これはPCnet-PCIです -- PCnet-32と似ていますが,PCIバスベースのシステ ム用に設計されています。これも先述の情報を参照してください。Donaldは PCI-NCR SCSIドライバ用にDrew Eckhardtが導入した,PCI BIOS構造体を使 用するようLANCEドライバを変更しました。このため,PCI BIOSサポートを 有効にして,カーネルを再構築する必要があります。 79C970のBocaによる実装は,高速なPentiumマシンでは失敗することに注意 してください。これはハードウェアの問題であり,DOSユーザにも影響しま す。詳細についてはBocaのセクションを参照してください。 5.4.5. AMD 79C974 (PCnet-SCSI) 状況 -- サポートされています これはPCnet-SCSIです -- イーサネットという観点では,基本的に'970と同 様に扱われます。1.1.8xカーネルに対し,'974専用の変更がなされましたの で,1.1.90あるいはそれ以降のカーネルを入手してください。先述の情報も 参照してください。チップのSCSI機能の方がサポートされているかどうかは 聞かないでください -- これはEhternet-HOWTOであって,SCSI-HOWTOではな いですから。 5.5. Ansel Communications 5.5.1. AC3200 EISA 状況 -- セミサポート このドライバは,現在のカーネルにアルファテスト版のドライバとして含ま れています。ne2000およびwd80x3カードで一般的に使用されている,NS8390 チップベースです。アルファドライバに関して重要な情報は,この文書の 「アルファ版ドライバ」を参照してください。このカードを使用している人 は多くないので,v1.1.25のカーネルからこのドライバが存在しているにも 関わらず,フィードバックが大変少ないです。ですから,もしこのカードを 使用しているのなら,ぜひ動作状況をDonaldにお知らせください。 もしこのドライバをローダブルモジュールとして使用するつもりなら,「イ ーサネットドライバをモジュールとして使用する」と「モジュールとしての 8390ベースカード」にモジュール特有の情報がありますので参照してくださ い。 5.6. Apricot 5.6.1. Apricot Xen-II On Board Ethernet 状況 -- サポートされています このオンボードイーサネットはi83596バスマスタチップを使用しています。 i/oアドレス0x300にだけ存在できます。このドライバの作者はMark Evansで す。ドライバソースを見ると,IRQが10に固定されていることがわかります。 初期のバージョンのドライバは,0x300に存在するのはすべてapricotのNIC であるとみなします。後に,誤った検出を避けるためにハードウェアアドレ スのチェックが行なわれるようになりました。 5.7. Arcnet 状況 -- サポートされています 大変安価で良好なイーサネット性能を有し,Arcnetのハードウェアを無料で 放出するところがあったため,家庭内LANをArcnetで構築するケースがかなり あります。 Arcnetの利点は,すべてのカードが同一のインターフェースを持っているこ とで,1つのドライバですべてに対応できるわけです。また,エラー処理が 組み込まれているので,パケットを失うことは無いと思われます。(UDPの トラフィックには素晴らしいことです!) Avery Pennarunのarchnetドライバは,1.1.80以降のデフォルトのカーネル ソースに存在します。arcnetドライバは,イーサネットの通常のデバイス `eth0'のかわりに`arc0'をデバイス名として使用します。バグレポートや, 成功報告は以下へメールしてください: apenwarr@foxnet.net ジャンパー設定や,一般的なヒントについては,標準カーネルに含まれて いるファイルに情報があります。 恐らくドライバは100Mbps ARCnetカードでも良好に動作することでしょう! 5.8. AT&T AT&TのStarLANはSyOpticsやLattisNetと同様に,孤児になってしまった技 術で,両方が「しゃべる」ハブ無しで,標準的な10Base-T環境では使用で きません。 5.8.1. AT&T T7231 (LanPACER+) 状況 -- サポートされてません これらのStarLANカードはi82586チップと同様なインターフェースを使用し ています。ある時点で,Matthijs Melchior(matthijs.n.melchior@att.com) は3c507ドライバと戯れていました。ほとんどうまく動作していたようです。 それ以降あまり噂は聞かれません。 5.9. AT-Lan-Tec / RealTek 5.9.1. AT-Lan-Tec / RealTek Pocket adaptor 状況 -- サポートされています これはよく使われていて,AT-Lan-Tecおよび(多分)他の多くの会社によっ て売られている低価格なOEM ポケットアダプタです。このアダプタ用のドラ イバは,標準カーネルに含まれています。かなりの情報がドライバソースの `atp.c'ファイルに含まれています。ところで,アダプタ(AEP-100L)は 10baseTとBNCコネクタの両方を持っています!AT-Lan-Tecへは1-301-948-7070 で連絡が取れます。Linuxで使用できるモデルについて問い合わせるか,技 術サポートについて問い合わせてください。 オランダでは,互換性のあるアダプタがSHI-TEC PE-NET/CTという名前で売 られており価格はおよそ$125です。ベンダーはMegasellersでした。ベンダ ーは個人には売らないと述べていますが,これはそんなに厳密に守られて いるわけではないようです。ベンダーは: Megasellers,Vianen, The Netherlandsです。オランダのコンピュータ雑誌にいつも広告を出して います。新モデルEPP-NET/CTはPE-NET/CTとかなり異なっていることに注意 してください。現在のドライバでは動作しないでしょう。きっと誰かがプ ログラミング情報を入手し,この問題を修正してくれることでしょう。 ドイツでは,同様なアダプタがノーブランドの製品として売られています。 Prolan 890bは,ケースにはブランドが入っておらずroman IIとだけ書かれ ています。小売業者は$130程度の価格で入手でき,これには電源用の小さ なトランスも含まれます。 アダプタはこの製品クラスでは「標準サイズ」で,幅57mm,高さ22mmから DB25コネクタのところで高さ15mmのテーパー形状になっており,長さ105mm (BNCコネクタを含めると120mm)です。RJ45とBNCジャックの間にある小 さなスライドスイッチで両者を切替えることができます: 大変わかりやす い設計です。 Donaldは消費電力測定を行なってみました。結果,平均消費電流は5Vにお いて100mAに過ぎないことがわかりました。この消費電力は多くのラップ トップに装備されているキーボード/マウスポートから直接5Vを得るため のケーブルを十分使用できる(購入するか製作するか)低さです。(さら にここでいい点は,メーカー独自の電源コネクタではなく,標準的なコネ クタが使用されているということです。) このデバイスに関して,ifconfigに渡すデバイス名はeth0ではなくatp0で あることに注意してください。 5.10. Boca Research ええ,彼らはマルチポートのシリアルカードを作っているだけではありま せん。:-) 5.10.1. Boca BEN (PCI, VLB) 状況 -- サポートされています これらのカードはAMDのPCnetチップベースです。PCnetチップはAT1500など で使用されています。現時点で$70以下でコンボ(10BaseTと10Base2)の PCIカードを入手できます。 目の利く人なら,多くのユーザがこれらのカードで終ることのない問題に 遭遇していることに注意しなくてはなりません。高速なPentiumシステムの 所有者なら,特に問題があります。これはドライバの問題ではなく,した がってDOS/Win/NTのユーザでも問題になることに注意してください。Boca の技術サポートの電話番号は(407)241-8088で,75300.2672@compuserve.com でも技術サポートを受けられます。 Donaldは先述のBoca PCIカードと,同様なAllied TelesisのPCnet/PCIの実 装の比較テストをしてみました。結果,BocaのPCnet/PCIチップの実装に問 題があることがわかりました。これらのテスト結果は,Donaldのwwwサーバ ーでアクセスすることができます。 Linux at CESDIS <http://cesdis.gsfc.nasa.gov/linux/> また,Dave PlattはAMDのデータシートで推奨されている実装と,Bocaの実 装を比較してみました。結果Bocaは重要なフィルタコンデンサのかなりの 数を省略していることがわかりました。文面で説明するという危険性はあ りますが,Daveの言を引用します。問題があるのかどうか,カードの外観 から評価することができます。 「79c970データシートのAppendix Bを調べてみました。チップの周りに最 低8つの高周波バイパスコンデンサ[以下パスコン]を置くことを推奨し ています(0.1 uFの積層セラミック)。これにより動作を不安定にするグ ランドと電源の電圧レベル変動を抑えるのです。わたしの持っているカー ドを見てみますと,カード全体でそのようなコンデンサが5つ見えます - 高周波バイパスを十分にこなせるよう,チップに十分接近して配置されて いるのは,そのうち2,3個だけです。 チップ面を上にしてカードを持ち,PCIピンを自分の方に向けると,'970 の左下部の角に窪みがあります。チップの左上部の角が「アナログ側角」 で,ここにアナログ電源とグランドピンがあります。Appendix Bではこれ らのピンを「PCnet-PCIカードのレイアウトにおいてもっとも重要なピン」 と呼んでいます。4つのアナログ電源ピン,2つのアナロググランドピン... これらすべてが接続され,適切にバイパスされていることが要求されてい ます。 チップの左側で,最上部のピンはAVSS1(アナロググランド1)です。上辺 で,左から4番目のピンはAVDD3(アナログ電源3)です。Appendixは特に これら2つのピンを(共通のグランドパターンを経ることなく)直接0.1 u のパスコンで接続することを推奨しています。わたしの所有しているカー ドでは,そのようなコンデンサはありません - もっとも近いパスコンは クリスタルから約0.5インチ離れたところにあり,グランドパターンに付 けられています。 Appendixはまた特に,「低周波大容量コンデンサ」(多分,数uFのタンタ ルあるいはアルミ電解コンデンサを指しているものと思います)を高周波 パスコンと併せて使用することを推奨しています。2つしか大容量コンデ ンサを見つけられませんでした(1つはAVSS2/AVDD2フィルタ回路に10 uF, もう1つはやはりフィルタ回路の1部と思われる,チップ上部の4.7 uFです。) Appendixは「最低1つの低周波大容量(たとえば22 uF)のパスコン...が 電源とグランドパターン間に直接接続されること」を推奨しています。 この記述に適合するコンデンサは,ボード上には存在しませんでした。 BocaはAMDの推奨を数,サイズ,位置,および電源のパスコンの配線に関し て「いくつか」無視しているようです。」 (ありがとう,Dave。)Bocaは影響のあったユーザに対し「保証修理」を 提供しています。これにはもともと無いコンデンサの追加が含まれており, 多少は効果がありますが,ほとんどの人にとっては100 %の改善とはなら ないようです。 まだこれらのカードのうちどれかを購入しようと考えているなら,少なく とも7日間の無条件返品保証を利用できるようにしてください。そうすれ ば自分のシステムでうまく動かなかった場合に返品することができます。 AMDのチップに関するより一般的な情報は,「AMD LANCE」にあります。 AMD LANCEベースのイーサネットカードに関するより技術的な情報は, 「AMDに関する...」にあります。 5.11. Cabletron Donaldは書いています: 「プログラム情報を公開しない会社の1つです。彼ら の情報が非公開であるかどうかを確認するのに1カ月も掛かり,時間を無駄に してしまいました。できるならこのようなカードは避けてください。また, Cabletronに電話した人もいましたが,「D. Beckerとかいう人がLinux用のド ライバを作製中です」というようなことを言われたそうです -- いかにも私 が作業をしているように聞こえますが,私は断じて作製していません。」 みんなが彼らのカードを使用するために必要な,ハード寄りのプログラム情 報を公開したくないのは何故なのか興味があるのなら,support@ctron.com へメールを出してください。自分がLinuxを使用していること,そしてオー プンシステムをサポートしないことに失望した旨を伝えてください。さらに, 彼らが提供している通常のドライバ開発キットは役立たずです。単なるDOS のオブジェクトファイルに過ぎず,リバースエンジニアリングすら許されて いません。 5.11.1. E10**, E10**-x, E20**, E20**-x 状況 -- セミサポート 検出中のctron専用チェックのおかげで,標準のNEx000ドライバで動作する と報告されている,NEx000とほとんどクローンといっていいカードです。何 らかの問題があっても,プログラム情報が入手できませんので修正されるこ とはないでしょう。 5.11.2. E2100 Status -- セミサポート 繰り返しになりますが,プログラム情報が非公開な状況でできることは限ら れています。E2100は設計がまずいです。パケット転送時に共有メモリをマッ ピングする際に,必ず128Kの領域全体へマッピングしてしまいます!このこ とは,もう1つのE2100を含む,他の割り込み駆動型の共有メモリデバイスを 安全には使用できないことを意味します。ほとんどの時間は動作しますが, ある時間ごとに1回はあなたにかみつくことになります。(ええ,この問題 はパケットの転送中に割り込みを殺すことで回避できます。が,ほとんどの 場合,カレンダ時計が狂うことになります。)また,ボードのプログラムを 誤ったり,悪いタイミング時にマシンを停止させると,リセットボタンを押 しても復帰できなくなります。電源を落して,そのまま30秒ほど待たなくて はなりません。 メディア(ケーブル)の選択は自動ですが,dev->mem_endパラメータの下位 ビットにより変更できます。「PARAM_2」を参照してください。モジュール の使用者はinsmodのコマンドラインでxcvr=Nの値を指定することで,同様の ことができます。 また,E2100をNE2100のクローンと混同しないでください。E2100はNat-Semi のDP8390を用いて共有メモリで動作するように設計されており,おおざっぱ に言えば頭のいかれたWD8013に似ています。一方NE2100(およびNE1500)は AMD LANCEを用いてバスマスタで動作するように設計されています。 標準カーネルにE2100ドライバが含まれています。しかし,プログラム情報 が得られないので,バグフィックスを期待しないでください。もうすでに カードを山程持っている場合を除いては,これを使用しないようにしてく ださい。 このドライバをローダブルモジュールとして使用するつもりなら,「イー サネットドライバをモジュールとして使用する」と「モジュールとしての 8390ベースのカード」にモジュールに特有の情報があります。 5.12. Cogent Cogentの所在を以下に示します: Cogent Data Technologies, Inc. 175 West Street, P.O. Box 926 Friday Harbour, WA 98250, USA. Cogent Sales 15375 S.E. 30th Place, Suite 310 Bellevue, WA 98007, USA. Technical Support: Phone (360) 378-2929 between 8am and 5pm PST Fax (360) 378-2882 Compuserve GO COGENT Bulletin Board Service (360) 378-5405 Internet: support@cogentdata.com 5.12.1. Cogent eMASTER+, EM100, EM400, EM960, EM964 状況 -- サポートされています これらは標準のDEC 21040ドライバで良好に動作する,21040の実装の1つです。 EM400およびEM964はDEC 21050ブリッジと4つの21040チップを使用した,4ポ ートのカードです。 「DEC 21040」にこれらのカードに関する詳細な情報と,ドライバの現状が書 かれています。 5.13. D-Link D-linkの製品を扱っているベンダーを探すのに苦労している人もいるようで す。このリストが役に立つでしょう。 (714) 455-1688 in the US (081) 203-9900 in the UK (416) 828-0260 in Canada (02) 916-1600 in Taiwan 5.13.1. DE-100, DE-200, DE-220-T 状況 -- サポートされています マニュアルにはこれがNE2000と100 %互換性があると書かれています。これは 正しくありません。D-Linkに電話を掛け,自分がLinuxでこのカードを使って いること,ドキュメントを修正して欲しいということを伝えてください。 0.99pl12以前のドライババージョンでは,DE2**シリーズを16 bitカードであ ると認識することに問題のあるものがありましたし,これらのカードは偽の 転送アドレスの不一致エラーを出すともっとも頻繁に報告されています。 Digital(DEC)もDE100とDE200という名前のカードを出していますが,それ 以外には類似した名前の製品はありません。 5.13.2. DE-520 状況 -- サポートされています これはAMD LANCEチップのPCIバージョンを使用したPCIカードです。DMAの 選択とチップの番号に関する情報は「AMD LANCE」にあります。 AMD LANCEベースのイーサネットカードに関する詳細な技術情報は,「AMD に関する...」にあります。 5.13.3. DE-530 状況 -- サポートされています これは一般的なDEC 21040 PCIチップの実装で,汎用21040ドライバで動作 します。 これらのカードに関する詳細な情報とドライバの現状については「DEC 21040」 を参照してください。 5.13.4. DE-600 状況 -- サポートされています ラップトップのユーザや,コンピュータを手っ取り早くイーサネットに接続 したいユーザは,これを使用したいことでしょう。ドライバは標準のカーネ ルソースに含まれています。Bjorn Ekwall(bj0rn@blox.se)がドライバを 書きました。パラレルポート経由で180kb/s程度の転送速度が期待できます。 カーネルソースのREADME.DLINKファイルを読んでおくべきでしょう。 ifconfigに渡すデバイス名は今はeth0となっており,以前使われたdl0では ありません。 パラレルポートのアドレスが標準の0x378でない場合,再コンパイルする必 要があります。Bjornは書いています: 「DE-620ドライバはループの終りの 最後のマイクロ秒を縮めようとしていますから,irqとポートのアドレス を変数ではなく定数にしています。これで良好な速度を得ることができま すが,逆にこれらの割当を例えばliloなどを用いて変更することはできま せん; 再コンパイルが必要です...」また,ラップトップの中にはオンボー ドのパラレルポートを,モノクロカードが存在する/していた0x3bcに実装 しているものもあります。 5.13.5. DE-620 状況 -- サポートされています DE-600と同様に,2つの出力フォーマットしか持っていません。Bjornはカー ネルバージョン1.1およびそれ以降用に,このアダプタのためのドライバを 書きました。DE-600に関する先述の情報を参照してください。 5.13.6. DE-650 状況 -- セミサポート ノートパソコンでこのPCMCIAカードを使用している人がいます。これは基本 的な8390デザインで,NE2000に大変似ています。LinkSys PCMCIAカードと IC-Card Ethernet(Midwest Microから入手できます)は恐らくDE-650クロ ーンであると思われます。現時点では,標準カーネルには含まれておらず, パッチ当てが必要であるかもしれません。 この文書の「PCMCIAのサポート」を参照してください。また可能ならば以下 を御覧ください: Don's PCMCIA Stuff <http://cesdis.gsfc.nasa.gov/linux/pcmcia.html> 5.14. DFI 5.14.1. DFINET-300 and DFINET-400 状況 -- サポートされています これらのカードは,PROMの14および15バイト目の0x57の代わりに先頭3バイト に`DFI'が書き込まれていると指摘してくれたEberhard Moenkeberg (emoenke@gwdg.de)のおかげで,現在(0.99pl15以降)認識することができ ます。0x57というのはすべてのNE1000とNE2000カードが使用しています。 (300は8 bitのほぼNE1000のクローンで,400はほぼNE2000のクローンです。) 5.15. Digital / DEC 5.15.1. DEPCA, DE100/1, DE200/1/2, DE210, DE422 状況 -- サポートされています Linux v1.0から,これらのカードのドライバが標準的に含まれています。 David C. Daviesがドライバを書きました。ソースファイル`depca.c'に ドキュメントが含まれており,1台のマシンに複数のカードを載せる方法 が書かれています。DE422はEISAのカードであることに注意してください。 これらのカードはすべてAMD LANCEのチップベースです。詳細な情報は 「AMD LANCE」を参照してください。ISAカードは同時に最大2枚まで使用 することができます。これは,ベースI/Oアドレスを0x300と0x200にしか 設定できないからです。もし2枚挿しする予定なら,標準のカーネルソー スに含まれているドライバのソースファイルdepca.cの中の注意書きを読 んでください。 このドライバはAlpha CPUベースのマシンでも動作するでしょう。また ユーザが戯れることのできるioctl()がたくさんあります。 5.15.2. Digital EtherWorks 3 (DE203, DE204, DE205) 状況 -- サポートされています このドライバも先述のDECのDavid C. Davisによって書かれ,v1.1.62のカ ーネルに取り込まれました。DE200のような初期のカードがLANCEのチップ を使用していたのとは異なり,これらのカードはDEC独自のチップを使用し ています。共有メモリとプログラムドI/Oのどちらもサポートしていますが, PIOモードの方が50%性能が向上します。共有メモリのサイズは2kB,32kB, 64kBに設定できますが,2と32kBのみこのドライバでテストされています。 Davidは2kBでも32kBでもほぼ同等の性能が出ると言っています。ドライバ ファイルewrk3.cの先頭とREADME.ewrk3に,より詳細な情報(ドライバをロ ーダブルモジュールとして使用する方法も含む)があります。どちらのフ ァイルも標準カーネルに含まれています。 標準ドライバには,パケットの送受信状況を取り出したり消去したり, EEPROMを読み書きしたり,ハードウェアアドレスを変更したり,などなどの 数多くの興味深いioctl()呼び出しが含まれています。ハッカーはこのこと に関してソースコードを読めば,より多くの情報が得られます。 Davidは他のツールとともに,このカード用に設定ソフトも作成しました (DOSプログラムNICSETUP.EXEもあります)。これらのソフトはsunsite. unc.eduのディレクトリ/pub/Linux/system/Network/managementにあります -- ewrk3tools-X.XX.tar.gzというファイルを探してください。 このドライバの次のリリース(v0.40)はdepca.cのようにAlpha CPUをサポ ートし,必要であればDavidから入手できます。 5.15.3. DE425 (EISA), DE434, DE435, DE500 状況 -- サポートされています これらのカードは以下で述べる21040チップベースです。先述のDECのDavid C. Daviesによってこのドライバも作成され,カーネルv1.1.86に取り込まれ ました。内部に協力者がいることは本当にいいですね;-)DE500は10/100Mbps 接続を実現するため,新しい21140チップが使用されています。さらなる情 報については,以下の21040に関するセクションを御覧ください。 1.1.91に関しては,Davidは非DECカードもこのドライバで動作できるよう, コンパイル時オプションが追加されました。詳細についてはREADME.de4x5を 御覧ください。 すべてのDigitalのカードはメディア[ケーブル種別]を自動検出します (一部,DE500は特許関連の問題で例外となっています)。 このドライバもAlpha CPU対応で,モジュールとしてロードすることが可能 です。ioctl()呼び出しを用いてドライバ内部にアクセスすることが可能で す - 具体的な方法については`ewrk3'ツールとde4x5.cを御覧ください。 5.15.4. DEC 21040, 21041, 21140, Tulip 状況 -- サポートされています DEC 21040はAMDのPCnetチップと同様の,Digitalが販売しているバスマスタ ワンチップイーサネットです。21040はPCIバスアーキテクチャ用に設計され ています。SMCの新しいEtherPower PCIカードがこのチップを使用していま す。 このチップを使用したカードでは2つにドライバを選択できます。先述のDE425 ドライバと,Donaldが書いた汎用21040ドライバです。 新たに生産されているSMC EtherPowerカードでは,従来の21040の代わりに 変更を受けた21041チップも見受けられます。21140は100Base-?をサポート するもので,21040チップ用Linuxドライバで動作します。非DECカードで Davidのde4x5ドライバを使用するには,詳細がREADME.de4x5にありますので 御一読ください。 Donaldは`tulip'ドライバを開発するためにSMC EtherPower-10/100カードを 使用していました。現時点で標準カーネルに含まれているドライバは,最新 バージョンではないことに注意してください。このドライバを使用するつも りなら,Donaldのftp/WWWサイトから最新版を入手してください。 Tulip Driver <http://cesdis.gsfc.nasa.gov/linux/drivers/tulip.html> 上記のURLには21040を使用した(完全網羅ではないですが)様々なカード/ ベンダーのリストもあります。 現時点では,tulipドライバはまだアルファ版ドライバであると考えられて いることにも注意してください(「アルファ版ドライバ」参照)。ですから それなりの意識を持って使用してください。使用するには, arch/i386/config.inを編集し,CONFIG_DEC_ELCP supportの行のコメントを 外さなくてはなりません。 5.16. Farallon FarallonはEtherWaveアダプタとトランシーバを売っています。このデバイス は複数の10BaseTデバイスをディジーチェインすることが可能です。 5.16.1. Farallon Etherwave 状況 -- サポートされています これはEtherWaveトランシーバを内蔵した3c509のクローンであると報告され ています。これらのカードをLinuxで3c509ドライバを用いて多くの人が利用 しています。一般的な用途には高価すぎますが,特別な場合にはよい選択肢 です。Hubletの価格は$125からで,EtherWaveはボードの$75-$100増しとい うところです。 5.17. Hewlett Packard 272**カードはNE*000ボードと同様にプログラムドI/Oを使用しますが,デー タ転送ポートはアクセスしない場合には`OFF'にできますので,ドライバが 自動検出する際に生じる問題を回避できます。 HPのハードウェアのバージョン番号に関して,このセクションにあった混乱 を整理するにあたって,Glenn Talbottが協力してくれました。 5.17.1. 27245A 状況 -- サポートされています 8 bit 8390ベースの10BaseTで,8 bitであるという理由だけでお勧めできま せん。2,3年前,集積度を上げるため再設計されましたが,初期化タイミン グに変化したものがあり,テストプログラムには影響が出ましたが,LANド ライバには関係ありません。(ループバックモードへあるいはループバック モードから切り替わった直後は,あたらしいカードは`ready'になっていま せん。) このドライバをローダブルモジュールとして使用するなら,「モジュールと して使用するイーサネットドライバ」と「モジュールとしての8390ベースの カード」にモジュール特有の情報がありますので御覧ください。 5.17.2. HP PC Lan+ (27247, 27252A) 状況 -- サポートされてます HP PC Lan+は標準的なHP PC Lanカードとは異なっています。このドライバは v1.1.xの開発サイクルの中で標準カーネルのドライバリストに追加されまし た。ne2000のようなPIOモードでもwd8013にような共有メモリモードでも動作 することができます。 47Bは16 bit 8390ベースの10BaseTとAUIで,52Aは16 bit 8390ベースの10Base2 とAUIです。これらのカードはボード上に通常の16kではなく32kの送受信パケ ット用のバッファRAMを持っており,どちらも使用しているコネクタの自動認 識を備えています。 このドライバをローダブルモジュールとして使用するなら,「モジュールと して使用するイーサネットドライバ」と「モジュールとしての8390ベースの カード」にモジュール特有の情報がありますので御覧ください。 5.17.3. HP-J2405A 状況 -- サポートされています これらは27247/27252Aよりは低価格でかつ高速ですが,たとえばAUIや10Base2 ,起動PROMソケットのような一部機能が省かれています。これはかなり一般的 なLANCEの設計ですが,一部設計の違いにより汎用の`NE2100'ドライバとは互 換性がありません。このカード専用のサポート(ボードからのDMAチャネルの 読みだしを含みます)は,HPのGlenn Talbottからの情報提供のおかげで採り 入れることができました。 LANCEベースのカードに関するより詳細な技術情報は「AMDに関する...」にあ ります。 5.17.4. HP-Vectra On Board Ethernet 状況 -- サポートされています HP-Vectraはマザーボード上にAMD PCnetチップを持っています。初期のバー ジョンのカーネルはそれをHP-J2405Aとして検出しようとしますが,Vectra がJ2405AのようにIRQとDMAチャネルを報告してくれないため,検出に失敗 します。この問題を避けるには,v1.1.53より新しいカーネルを入手してく ださい。 DMAの選択とチップの番号に関する情報は「AMD LANCE」にあります。 LANCEベースのカードに関する情報は「AMDに関する...」にあります。 5.17.5. HP 10/100 VG Any Lan Cards (27248B, J2573, J2577, J2585) 状況 -- サポートされています 初期の1.3.xカーネルから,このドライバをJaroslav Kysela(perex@pg.jcu.cz) が提供しています。ドライバが新しいこと,またVGカードが比較的使われてい ないことから,このドライバに対するフィードバックは少ないです。 Donaldもこれらのカード用のドライバを書きました。先のドライバとは異 なり,現在は標準カーネルソースには含まれていません。Donaldの100VG の作業に関する情報は,以下のURLをチェックしてください。 Donald's 100VG Page <http://cesdis.gsfc.nasa.gov/linux/drivers/100vg.html> 5.18. IBM / International Business Machines 5.18.1. IBM Thinkpad 300 状況 -- サポートされています これはIntelベースのZenith Z-noteと互換性があります。より詳細な情報 については「Z-note」を参照してください。 たぶん以下のサイトはThinkPadの新しいバージョンに関してわかりやすい データベースを公開しています。わたし自身はまだチェックしたことがな いですが。 Thinkpad-info <http://peipa.essex.ac.uk/html/linux-thinkpad.html> WWWブラウザを利用できない方は,peipa.essex.ac.uk:/pub/tp750/ へ行っ てみてください。 5.18.2. IBM Credit Card Adaptor for Ethernet 状況 -- セミサポート LinuxでもこのPCMCIAカードが使われています。他のPCMCIAと同様な点が重 要で,ノートパソコンのPCMCIAチップセットがサポートされていること, および標準カーネルにPCMCIAサポートを追加することが必要です。 この文書の「PCMCIAサポート」を御覧になることと,可能であれば Don's PCMCIA Stuff <http://cesdis.gsfc.nasa.gov/linux/pcmcia.html> を御覧ください。 5.18.3. IBM Token Ring 状況 -- セミサポート token ringをサポートするには,単にドライバを書くだけではなく,token ring用のソースルーティングルーチンも書く必要があります。ソースルーテ ィングを書くのにもっとも時間が掛かるのです。 Peter De Schrijverは最近token ringに時間を割き,IBM ISAおよびMCA token ringカードに関する作業を行ないました。 現在のtoken ringのコードは1.3.xシリーズのカーネルへ初めて取り込まれ ました。 Peterは,元もとはMCA 16/4メガビットToken Ringボードでテストされまし たが,他のTropicベースのボードでも動作するはずです,と言っています。 5.19. ICL Ethernet Cards 5.19.1. ICL EtherTeam 16i/32 状況 -- サポートされています Mika Kuoppala(miku@pupu.elt.ici.fi)がこのドライバを書きました。 1.3.4x初期のカーネルへ取り込まれました。at1700カードでも使用されて いる富士通のMB86965チップを使用しています。 5.20. Intel Ethernet Cards 5.20.1. Ether Express 状況 -- セミサポート このカードはIntelのi82586チップを使用しています。(驚きました?) ドライバは,標準のカーネルにアルファ版ドライバとして含まれています。 Linuxでアルファテスト版ドライバを使用する際に重要な情報が,「アルフ ァ版ドライバ」にあります。 遅いマシンではドライバが良好に動作するのに,速いマシンではハングして しまう理由は,i82586がパケットバッファの取り合いでしばしばハングして しまうからです。報告されたハック/修正法の1つには,すべてのoutw()呼 び出しをoutw_p()に書き換えるというものがあります。また,このドライバ は無差別およびマルチキャストモードがありません。(「マルチキャストお よび...」を参照) マニュアルに記載されているチップの標準的な使用法(読み出しをゆっくり 行なう)もありますし,他のi82586ドライバを使用することもできますが, そうするとドライバ全体を書き直す必要があります。 「Intelチップのプログラミング」にi82586に関する技術情報がありますし, ドライバ`eexpress.c'のソースコードも参考になります。ソースを読むこと を恐れちゃいけません。;-) 5.20.2. Ether Express PRO/10 状況 -- サポートされています Bao Chau Haは初期の1.3.xカーネルに取り込まれたこれらのカード用ドライ バを書きました。i82595チップを使用したCompaqの内蔵イーサネットシステ ムでもこのドライバが動作するかもしれません。 5.20.3. Ether Express PRO/100 状況 -- サポートされていません これらのPCIおよびEISAカードはPRO/10カードとは異なったチップを使用し ています。Baoは現在,NDA[情報非公開への同意]なしにIntelからデータ シートを入手しようと試みています。幸運を祈る! 5.21. LinkSys 5.21.1. LinkSys Pocket Ethernet Adapter Plus (PEAEPP) 状況 -- サポートされています これはDE-620のクローンと思われ,DE-620のドライバで良好に動作すると 報告されています。さらなる情報については「DE-620」を参照してくださ い。 5.21.2. LinkSys PCMCIA Adaptor 状況 -- サポートされています。 これはDE-650のロゴ違いであると思われます。さらなる情報については 「DE-650」を参照してください。 5.22. Microdyne 5.22.1. Microdyne Exos 205T 状況 -- セミサポート i82586ベースのカードの1つです。Dirk Niggemann(dabn100@hermes.cam.ac.uk) が,「プレアルファ」という状態のドライバを書きました。多くの人にテスト して欲しいそうです。詳細については,彼にメールを出してください。 5.23. Mylex Mylexに何か問い合わせたいことがある場合の連絡先は以下の通りです。 MYLEX CORPORATION, Fremont Sales: 800-77-MYLEX, (510) 796-6100 FAX: (510) 745-8016. 5.23.1. Mylex LNP101 状況 -- サポートされています これはDECの21040チップを使用したPCIカードです。出力は,10BaseT, 10Base2および10Base5から選択できます。LNP101カードは汎用21040ドライ バで動作することが確かめられました。 21040チップに関するセクション(「DEC 21040」)にさらなる情報があり ます。 5.23.2. Mylex LNP104 状況 -- サポートされていません LNP104は4つの独立した10BaseTポートを駆動するためにDEC 21050チップを 使用します。21040ドライバで動作するかもしれませんが,誰も挑戦した人 はいません。 5.23.3. Mylex M390B EISA 状況 -- サポートされていません Russは「...おおむねvanilla8390ベースのアダプタといえます。1箇所だけ 本当にトリッキーな点は,Interlanのes3210のように,ボードへのおよび ボードからの転送が32-bitでしかできないということです。Crynwrのパケ ットドライバを参考にして,自分自身で変更してみてください...」と書い ています。 5.24. Novell Ethernet, NExxxx and associated clones. 頭の文字`NE'はNovell Ethernetに由来します。Novellはもっとも安価な NatSemiのデータブック内の設計に従い,製造権をEagleに売りました (スピンアウト?)。そのおかげで安価なイーサカードが市場に出回っ たのです。(いまではどこにでもNE2000カードがあります。) 5.24.1. NE1000, NE2000 状況 -- サポートされています 注: v1.2.9より古いカーネルをお使いの場合は,新しいカーネルにアップ グレードすることを強くお勧めします。neドライバには,1.2.7で重要な バグフィックスがなされ,さらに1.2.9で上位層(dev.c)に別の重要なバ グフィックスがなされました。どちらのバグも,ne2000がコンピュータを ハングさせてしまいます。 ne2000は今ではNatSemiの8390チップを中心の基本的な設計を指す総称と なっています。共有メモリではなくプログラムドI/Oを使用し,インスト ールは簡単ですが,性能が若干落ちますしいくつか問題があります。繰り 返しになりますが,NE2000の代わりに8 bitのNE1000を使用して利点があ るのは,あまりデータ転送を行なわないときだけです。最近出て来たNE2000 クローンには,ナショナルセミコンダクタの`AT/LANTic' 83905チップを 使用したものがあり,8013と同様な共有メモリモードと,EEPROMあるいは ソフトウェアによる設定が可能です。貧弱なNE2000クローンでは,問題が 生じます。「NE1000/NE2000...」および「貧弱なNE2000のクローン達」の 項を参照してください。一般に,NE2000のクローンをI/Oアドレス0x300に 置くのはいい考えではありません。なぜならほとんどすべてのデバイスド ライバが起動時にそのアドレスを検出に行くからです。貧弱なNE2000のク ローンの中には間違った場所をつつかれることに寛容でないものがあり, そういうクローンはマシンをロックすることで応答するのです。 DonaldはNE2000の診断プログラムを書きましたが,まだアルファテスト版 です(ne2k)。詳細な情報については「診断プログラム」を参照してくだ さい。 このドライバをモジュールとして使用するなら,「モジュールとしてイー サネットドライバを使用する」と「モジュールとして使用する8390ベース のカード」にモジュール特有の情報がありますから御覧ください。 5.24.2. NE1500, NE2100 状況 -- サポートされています これらのカードはAMDの7990 LANCEチップを使用し,Linux lanceドライバ でサポートされています。新しいNE2100クローンは,AMDの改良された PCnet/ISAチップを使用しています。 lanceドライバの初期のバージョンには,もともとのNovell/Eagleの7990 カードから自動IRQを通じてIRQ線を得るのに問題があるものがありました。 現在は幸いなことに修正されています。そうでなければ,LILO経由でIRQ を指定してやり,問題がまだ残っていることを私たちに連絡してください。 DMAの選択と,チップの番号に関する情報は「AMD LANCE」にあります。 LANCEベースのカードに関する技術情報は「AMDに関する...」にあります。 5.24.3. NE3200 状況 -- サポートされていません このカードは遅い8 MHz 80186を使用していますから,安いNE2000クローン を使用した方がましでしょう。ドライバを入手できたとしても,NE2000カ ードの方がほとんどの場合で速いことでしょう。 5.25. Pure Data 5.25.1. PDUC8028, PDI8023 状況 -- サポートされています PureData PDUC8028とPDI8023シリーズのカードは,動作することが報告され ています。Mike Jagdis(jaggy@purplet.demon.co.uk)が専用検出コードを 作成してくれたおかげです。サポートはWDドライバに集約されています。 5.26. Racal-Interlan 5.26.1. NI5210 状況 -- セミサポート Michael Hippがこのカード用のドライバを書きました。標準カーネルに 「アルファ版」のドライバとして含まれています。Michaelはこのカードの ユーザからのフィードバックを求めています。Linuxでアルファテスト版の イーサネットドライバを使用する上で重要な情報に関しては,「アルファ版 ドライバ」を参照してください。 Michaelは「内部のシステムバスが遅いような気がします。それで高速なリ モートホストから受信する際に,オーバーランを生じてパケットを落すこと がよくあります。」と言っています。 このカードもIntelのチップの1つを使用しています。技術情報に関しては, 「Intelチップのプログラミング」を参照してください。 5.26.2. NI6510 (not EB) 状況 -- セミサポート LANCEベースのNI6510にもドライバがあり,これもMichael Hippにより書かれ ました。繰り返しになりますが,これも「アルファ版」ドライバです。いく つかの理由により,このカードは汎用LANCEドライバとは互換性がありません。 Linuxでアルファテスト版のイーサネットドライバを使用する上で重要な情報 に関しては,「アルファ版ドライバ」を参照してください。 5.26.3. EtherBlaster (別名 NI6510EB) 状況 -- サポートされています カーネル1.3.23において,汎用LANCEドライバに0x52,0x44というNI6510EB 特有の「署名」をチェックするコードが追加されました。NI6510EBすべてが この署名ではないと報告する人もいますが,その場合はlanceドライバはカ ードを検出しません。検出できなかった場合,検出コード(lance.cの322行 付近)をprintk()に変更してそのカードの値を表示させ,それからデフォル トの0x52,0x44の代わりに得られた値を使用してください。 このカードは,lanceドライバで使用している場合は,たぶんNI6510互換モ ードではなく,「高性能」モードで動作しているに違いありません。 5.27. Sager 5.27.1. Sager NP943 状況 -- セミサポート これは3c501クローンで,異なったS.A. PROMプレフィックスを持っていま す。わたしは,オリジナルの3c501と同様に脳ミソが死んでいると思いま す。1.1.53以降のカーネルはNP943のi.d.をチェックし,その後は3c501と して処理します。これらのカードの使用を推奨しないすべて理由の理由の ついては,「3Com 3c501」を参照してください。 5.28. Schneider & Koch 5.28.1. SK G16 状況 -- サポートされています このドライバはカーネルv1.1の取り込まれ,PJD WeichmannとSWS Bernによ って書かれました。SK G16は,LANCEチップの初期の版(7990)に基づいて いるという点で,NI6510と同様なようです。再度になりますが,このカード は汎用LANCEドライバでは動作しません。 5.29. SEEQ 5.29.1. SEEQ 8005 状況 -- サポートされています このドライバは初期の1.3.xカーネルに取り込まれ,Hamish Colemanによっ て書かれました。このドライバに含まれているカードに関する情報が少し しかなく,それゆえにここのもあまり情報を書けません。疑問があれば, hamish@zot.apana.org.auにメールを出すのが最善でしょう。 5.30. SMC (Standard Microsystems Corp.) SMCのカードに関しては「Western Digital」を参照してください。 5.31. Thomas Conrad 5.31.1. Thomas Conrad TC-5048 これはPCIカードの1つで,DECの21040チップベースです。 詳細な情報については,21040チップに関するセクション(「DEC 21040」) を参照してください。 5.32. Western Digital / SMC Western Digitalのイーサネット部門はSMCに売却されました。人々がよくやる 誤りに,比較的新しいSMC Elite Ultraを古いSMC Elite16モデルと同一視する というのがあります -- これらは同一ではありません。 SMCの連絡先です(おそらく必要ないでしょうが)。 SMC / Standard Microsystems Corp., 80 Arkay Drive, Hauppage, New York, 11788, USA. 技術サポートの電話番号は: 800-992-4762 (USA) 800-433-5345 (Canada) 516-435-6250 (Other Countries) 資料請求は: 800-SMC-4-YOU (USA) 800-833-4-SMC (Canada) 516-435-6255 (Other Countries) 技術サポートのE-mailアドレスは: techsupt@ccmail.west.smc.com FTPサイト: ftp.smc.com 5.32.1. WD8003, SMC Elite 状況 -- サポートされています これらは8-bitのカードです。8 bit 8003は若干安価ですが,軽い負荷で使 用する場合以外ではお金を惜しむだけの価値はありません。非EEPROMの中に は(ジャンパ設定のクローンや,古い古い古いwd8003カードなど),使用し ているIRQ線を通知する方法がないものがありますので注意してください。 この場合は,自動IRQ検出が用いられますが,失敗するとドライバは黙って IRQを割り当てます。古い非EEPROMのwd8003カードのジャンパで何を設定で きるか,という情報はdorm.rutgers.eduのディレクトリ /pub/novell/nic_driversにあるSMCのセットアップ/ドライバディスクと 一緒にあります。より新しいSMCの`SuperDisk'プログラムの中には, EEPROM無しのカードの検出に失敗するものがあります。SMCDSK46.EXEが対 応範囲が広いように見えます。古いカードのジャンパ設定に関しても前述 のアーカイブにアスキーテキストファイルで含まれています。最新の(最 高の?)バージョンはftp.smc.comから入手できます。 16 bitバージョン(WD8013 / SMC Elite16)とは基本的に同一ですから, 詳細な情報については次のセクションを御覧ください。 5.32.2. WD8013, SMC Elite16 状況 -- サポートされています 何年かの間に,レジスタやEEPROMが追加されるなどの変更がありました。クロ ーンは通常`8013'の名前で通っており,通常非EEPROM(ジャンパによる設定) の設計を使用しています。新しいモデルのSMCカードはボード上に2つのメイン のPLCCチップを持っています; SMC 83c690とSMC 83c694です。共有メモリ設計 ではPIOのカードより10-20%速くなり,特に大きなパケットの時に顕著です。 ドライバの観点より重要なことには,8390のプログラムドI/Oモードにある, いくつかのバグを避けることができる,というものがあります。結果パケット バッファへのマルチスレッドなアクセスが安全に行なえますし,ウォームブー ト時の検出の際にマシンをハングしてしまうプログラムドI/Oのデータレジス タも持っていません。 選択されたIRQを読めない非EEPROMカードは自動IRQを試み,失敗すると黙って IRQ 10を割り当てます。(8 bitバージョンはIRQ 5を割り当てます。) ボード上のメモリ量が標準とは異なっているカードは,起動時にメモリサイズ を指定することができます(あるいはモジュールとして使用している場合は `insmod'時に)。例えば,古いWD8003EBTカードは32kBメモリにジャンパ設定 できます。RAM全部を使用するには,以下の例のようにします(i/o=0x280と IRQ 9の場合です): ______________________________________________________________________ LILO: linux ether=9,0x280,0xd0000,0xd8000,eth0 ______________________________________________________________________ よく遭遇する問題に関しては「8013の問題」も参照してください。 このドライバをモジュールとして使用するなら,「モジュールとして使用する イーサネットドライバ」と「モジュールとしての8390ベースのカード」にモジ ュール特有の情報があります。 5.32.3. SMC Elite Ultra 状況 -- サポートされています このイーサカードはSMCの新しいチップをベースにしており,新機能が追加さ れました。古いSMCのイーサネットカードと同様なモードを持っていますが, 古いWD80*3ドライバとは完全な互換性はありません。しかし,このモードでは 他の8390とほとんどのコードを共有しており,さらにWD8013クローンよりは若 干動作が高速です。 Ultraの一部は8013のように見えるため,Ultraの検出はその誤検出を避けるた め,wd8013の検出の前にUltraを見つけようとします。 Donaldは,受信バッファの利用効率は犠牲になるが,連続送信を可能にする Ultraの`Altego'モードのための別のドライバを書くことも可能だが,多分 そのドライバが書かれることはないだろう,と言っています。 バスマスタSCSIホストアダプタのユーザは注意が必要です: Interactive UNIX に同梱されているマニュアルには,SMC Ultraにバグがあってaha154Xホストア ダプタに接続されているSCSIディスク間で,データの衝突が起こるかもしれな い,との記載があります。このバグは,aha-154Xと互換のカード,例えば BusLogicのボードやAMI-FastDiskのSCSIホストアダプタでも問題になるかもし れません。 SMCはInteractiveと古いWindows NTで生じる問題を認識しています。これは, そのドライバ設計で動作するカードのうち,初期のバージョンで起こるハード ウェアの衝突です。現在のUltraドライバはカードがデータ転送する間に共有 メモリを有効にするだけで,この問題を防いでいます。カーネルバージョンが 最低でも1.1.84であることあるいは起動時に表示されるドライバのバージョ ンが少なくともsmc-ultra.c:v1.12であることを確認してください。そうでな い場合は問題が生じます。 もしこのカードをローダブルモジュールとして使用するのなら,「モジュー ルとして使用するイーサネットドライバ」と「モジュールとしての8390ベー スのカード」にモジュール特有の情報があります。 5.32.4. SMC 8416 (EtherEZ) 状況 -- サポートされています このカードはSMCの83c795チップを使用しており,プラグアンドプレイ仕様 をサポートしています。SMC Ultra互換モードも持っており,LinuxのUltra ドライバを使用することも可能です。この互換モードではプログラムドi/o の代わりに共有メモリを使用します。上述のUltraドライバに関する注意を 参照してください。 EtherEZ専用のチェックが1.1.84でSMC Ultraドライバに加えられ,それゆえ に初期のバージョンのカーネルではこれらのカードを正しく検出,動作させ ることができませんので,注意してください。 5.32.5. SMC 8432 PCI (EtherPower) 状況 -- サポートされています これらのカードは基本的なDEC 21040の実装で,1つの大きなチップと2,3 のトランシーバからなります。Donaldは汎用の21040ドライバ(別名tulip.c) を開発するのに,このカードを使用しました。繰り返しになりますが, 開発のためにカードを提供してくれたことに対し,Duke Kamstraに感謝し ます。 このカードのより新しいバージョンの中には,より新しいDEC 21041チップを 使用したものがあり,古いバージョンのtulipドライバで問題を起こすかもし れません。最新リリースのドライバを使用しているか,確認してください。 このカードを使用するにあたっての詳細な情報,およびドライバの現状に関 しては「DEC 21040」を参照してください。 5.32.6. SMC 3008 状況 -- サポートされていません これらの8 bitのカードは富士通のMB86950ベースで,Linuxのat1700ドライバ で使用されているMB86965の祖先にあたります。Russは,at1700.cのコードと, 彼のDOSのTiaraカード用のパケットドライバ(tiara.asm)を見れば,たぶん ドライバを作ることができるだろう,と言っています。 5.32.7. SMC 3016 状況 -- サポートされていません これは16bitのi/oマップトの8390カードで,普通のNE2000カードと大変よく 似ています。SMCから仕様を入手できたら,非常に簡単にNE2000のドライバを 移植できるでしょう。 5.32.8. SMC 9000 状況 -- サポートされていません このカードは91c92ベースのVLBカードです。かなり高価なため,現時点では このカード用のドライバに対する要求はかなり低いです。 5.33. Xircom 文書を提供してくれないグループの1つです。一切のカードをサポートしま せん。プログラムに関する情報が提供されない限り,未来永劫サポートは 期待されません。また,これも通常考えられないことですが,彼らはドラ イバのリバースエンジニアリングすら禁じています。すでに持っている場 合はDOSユーザと交換できないかどうか検討してみてください。 これが本当かどうか確かめてみたい場合は,Xircomの電話番号は 1-800-874-7875,1-800-438-4526あるいは+1-818-878-7600です。彼らは以 前「すべてのネットワークOSで動作する」と自分達の製品を宣伝していま したが,現在はやめています。何ででしょうねえ... 5.33.1. PE1, PE2, PE3-10B* 状況 -- サポートされていません 期待は持てません。が,もしこれらのパラレルポートアダプタを持っている のなら,Xircomが提供しているDOSドライバを使用して,DOSエミュレータの 中で使用することができるかもしれません。DOSEMUにパラレルポートの使用 を許可することと,多分SIG(DOSEMUの間抜けな割り込みジェネレータ)と 戯れる必要があるでしょう。 5.34. Zenith 5.34.1. Z-Note 状況 -- サポートされてます 内蔵Z-Noteネットワークアダプタは,2つのDMAチャネルを使用するi82593ベー スです。現在のバージョンのカーネルに利用できるドライバ(アルファ版?) があります。すべてのノートおよびポケットアダプタに関しては,make config する際の`Pocket and portable adaptors'のセクションにあります。「Intel チップのプログラミング」により詳細な技術情報があります。また,IBM Think Pad 300はZ-Noteと互換です。 5.35. Znyx 5.35.1. Znyx ZX342 (DEC 21040 based) 状況 -- サポートされています このチップベースのカードでは,ドライバは2つの中から選択できます。David によって書かれたDE425と,Donaldが書いた汎用21040ドライバがあります。 1.1.91において,Davidは非DEC(Znyxのカードのような)のカードでもこの ドライバが動作するように,コンパイル時オプションを追加しました。詳細 についてはREADME.de4x5を参照してください。 このカードに関する詳細な情報とドライバの現状については,「DEC 21040」 を参照してください。 5.36. 非イーサネットデバイスに対するドライバ linuxのソースには他にいくつかドライバがあり,実際にはイーサネットでは ないけれど,イーサネットに似たデバイスに対してネットワークのプログラ ムを提供します。完全を期すため,ここで簡単に説明します。 dummy.c - このドライバの目的はデバイスに,通過する経路を示すことです。 実際にはパケットは送信しません。 eql.c - Load Equalizer(負荷を平均化する)で,複数のデバイス(通常モ デム)を支配下に置き,1つのデバイスにネットワークプログラムを提供して いる時に,デバイス間の送信を平均化します。 ibmtr.c - IBMのToken Ringです。実際にはイーサネットではありません。 壊れたリングはソースルーティングと他の気難しいものが必要です。 loopback.c - ループバックデバイスで,マシンからのすべてのパケットが自 分自信に戻って来るためのものです。本質的に,送信キューから受信キュー にパケットを移動させるだけです。 pi2.c - オタワアマチュア無線クラブのPIおよびPI2インターフェースです。 plip.c - パラレルラインインターネットプロトコルで,ポイントトゥポイン ト方式で2つのコンピュータ間をパラレルポートで結んでパケットを送りあう ことが可能です。 ppp.c - ポイントトゥポイントプロトコル(RFC1331)です。ポイントトゥ ポイントリンク(これも通常はモデム)を通じて,マルチプロトコルデータを 転送するためのものです。 slip.c - シリアルラインプロトコルです。ポイントトゥポイント方式で,2つ のコンピュータ間をシリアルポートで結んで(通常モデム経由)パケットを送 りあうことが可能です。 tunnel.c - サブネット間のネットワークトラフィックを透過的にトンネルさ せるIPトンネル機能を提供します。 wavelan.c - IntelのEtherExpressのようなイーサカードで使用されている, 82586コプロセッサによって制御される,イーサネットに似た無線トランシー バです。 6. ケーブル,同軸,ツイストペア もし一からネットワークを始めるつもりなら,シンイーサネット,つまりBNC コネクタを持ったRG58同軸ケーブルを使用すると,古風なシックイーサネッ トつまりNコネクタを持ったRG-5ケーブルや10BaseT,つまりRJ45の8芯「電話」 コネクタを持った,ツイストペアの電話線タイプのケーブルに比べて随分安価 になります。ケーブルの外観については「ケーブルのタイプ...」を参照して ください。[繰り返しになりますが,バックボーンポート無しのハブは5,000円 くらいからあるので,10BaseTがお勧めだと思います。] comp.dcom.lans.ethernetのFAQにはケーブルその他に関する多くの有用な情報 があります。dorm.rutgers.eduのファイル/pub/novell/info_and_docs/Ethernet. FAQを御覧下さい。 6.1. シンイーサネット(シンネット) シンイーサネットは「ベストチョイス」です。ケーブルは安価です。もし自分 でケーブルを作るつもりなら,単芯線のRG58Aは1メートルあたり$0.27ですし, より芯線のRG58AUで1メートルあたり$0.45です。BNCコネクタは$2以下で,他の 部品も同様に安価です。ケーブルの両端を50オームのターミネータできちんと 終端処理することが重要で,それも1セット2$です。ケーブルに「スタブ」を つけないことも重要です -- `T'コネクタは直接イーサカードにつけなければ なりません。また,ただ1つの欠点は,接続したマシンが大きなループを作っ ていて,かつポカをしてTコネクタの片側からケーブルが外れていてループが 壊れていると,ネットワーク全体がダウンしてしまいます。これは,必要な 50オームの終端ではなく,インピーダンスが無限大(回路が開放状態)になっ てしまうからです。Tコネクタからケーブルを離さずに,Tコネクタ自身をカー ドから外せば,サブネット全体をダウンさせることなくカードをネットから切 り離せることに注意してください。もちろん,Tコネクタを外してしまったマ シンには何らかの影響が出ますけど。8-)また,2台のマシンで小規模なネット ワークを組んでいる場合でも,やっぱりTコネクタと50オームのターミネータ が必要です。ケーブルで直接つなぐわけにはいきません。 6.2. ツイストペア(より対線) ツイストペアネットワークにはハブが必要で,$200くらいします[バックボー ン用コネクタのないハブでは,もう1万円しないです]し,ケーブルだけの価 格もシンネットよりは高くなります。既存の電話用の線を利用できるという 触れ込みで売られていますが[うーん,こんなことは聞いたことありません] そのようなケースはまれです。より高速なネットワークにアップグレードで きるという売り文句も疑わしいです。というのは,提供されているアップグ レード手段が,あなたが予測して導入したものよりも,高級な(すなわち高 い)ケーブルと,より洗練された終端(ずっと高い)を必要とするからです。 マシンのディジーチェーンを可能にする機械が存在しています。例えば, FarallonはEtherWaveアダプタとトランシーバを販売しています。このデバイ スは複数の10BaseT装置をディジーチェーンすることが可能です。Farallonは また,EtherWaveトランシーバを内蔵した3c509クローンも販売しています。 欠点は,安価な($100-150)ミニハブや普通のイーサカードよりも高く,ま た信頼性に欠けるという点です。ハブを使うか,10Base2シンネットへ切替え た方がいいでしょう。 一方,ハブは急速に値段が下がっており,すべての100Mbpsイーサネットはツ イストペア線を使用しており,またほとんどの最近の業務利用ではツイスト ペアを使用しています。(これはたぶん,先に述べたようなBNCの間抜けな失 敗に伴う問題を避けるためでしょう。) また,Russ Nelsonは「新たに構築するなら,Category 5のケーブルを使用す べきです。それ以外のものは構築に掛かる時間の無駄です。というのは,100 Base技術はすべて,今後Cat 5を要求するからです。」と言っています。 もし,2台のマシンだけをつなぐつもりなら,ハブを使わない方法もあります。 RxとTxのペアを交差させるのです(1-2と3-6)。 RJ-45コネクタを自分の方に向けて持ち(自分の口にコネクタを挿すようにと いうことです。),ロックタブを上に向けると,左から右へ1〜8ピンとなり ます。各ピンは以下のようになります: Pin Number Assignment ---------- ---------- 1 Output Data (+) 2 Output Data (-) 3 Input Data (+) 4 Reserved for Telephone use 5 Reserved for Telephone use 6 Input Data (-) 7 Reserved for Telephone use 8 Reserved for Telephone use カードによっては,wd8013のように逆極性を感知するものもあり,そのよう に調整されます。また,3と6はツイストペアでなければなりません。もし3-4 をツイストペアに,また5-6を別のツイストペアにすると,1メートル以下で は使用できるかもしれませんが,それより長いと使えないでしょう。 10BaseTが標準として承認される前には,RJ-45コネクタを使用する10BaseT 以外のネットワークフォーマットが存在し,先述の配線と同じ物が使用され ていました。例えば,SynOpticsのLattisNetや,AT&TのStarLANです。場合 によっては(初期の3C503カードのように),異なったタイプのハブと会話 ができるように,ジャンパ設定できることもありますが,ほとんどの場合 これらの古いタイプのネットワーク用に設計されたカードは,標準的な 10BaseTネットワーク/ハブでは動作しません。(カードがAUIポートを持っ ている場合は,AUI→10BaseTトランシーバと組み合わせて,それを使わない 手はありません。) 6.3. シックイーサネット シックイーサネットはほとんど廃れてます。普通,既存の実装と互換性を維 持するためだけに使われています。$3のN−BNC変換コネクタを使って,短距 離のシックとシンイーサネットをつなぎ,延長することができます。これは 既存のシックネットを拡張するのに,しばしば最善の解決法となります。正 しい(しかし高い)解決法は,この場合リピータを使うことです。 7. ソフトウェアの設定とカードの診断 ほとんどの場合,設定をソフトウェアで行ないそれをEEPROMに保存するなら, たいていDOSを起動し提供されているDOSのソフトでカードのIRQ,I/O,メモリ アドレス,などなどを設定しなければなりません。その他,たぶん設定は一度 すればいいはずです。DOSのユーティリティを入手できないカードでは,かな りの数のNICセットアップ/ドライバディスク(例えば3Com,SMC/WDおよび Allied TelesisのNIC用)が,dorm.rutgers.eduのディレクトリ /pub/novell/nic_drvs/から入手できます。しかし,Linux用の設定ユーティリ ティが存在するカードもあり,それはここに列挙します。 また,DonaldはLinuxの下で走る小さなカード診断用プログラムもいくつか 書きました。これらのほとんどは,彼がさまざまなドライバを書くうちに作成 した,デバッグツールに由来しています。かっこいいメニュー式のプログラム は期待しないでください。このプログラムを最大限使うにはソースコードを 読まなければならないでしょう。あなたの持っているカード用の診断プログラ ムが無くても,単にcat /proc/net/devとタイプするだけで多くの情報を得る ことができます。最低限,起動時にカードが認識されている必要がありますけ ど。 どちらの場合も,これらのプログラムのほとんどはrootとして(ポートへの I/Oを許可するため)走らせる必要があり,またたぶんプログラムを走らせる 前にイーサカードを停止させるためにifconfig eth0 downとタイプする必要 があるでしょう(注: 適宜eth0をatp0で置き換えるなどしてください。) 7.1. イーサネットカード用設定プログラム wd80x3カードの所有者には,Linuxのftpサイトにあるwdsetup-0.6a.tar.gz という設定プログラムがあります。積極的にメンテナンスされているかどう かはわかりませんが,結構長い間アップデートされていません。うまく動作 すればラッキーですが,動かなかったらカードと一緒に入手したに違いない, DOSのプログラムを使用してください。DOSのプログラムを持っていなければ, 先に述べたdorm.rutgers.eduからSMCのセットアップ/ドライバディスクが 取れます。もちろん,このユーティリティを使用するにはEEPROMカードを持 っていなければなりません。古い,古いwd8003カードと,wd8013クローンの 中には,EEPROMを持ってないものがあり,これらはジャンパで設定します。 Digital EtherWorks 3カードは,DOSプログラムNICSETUP.EXEと同様な方法で 設定できます。David C. Daviesがこのプログラムと,ドライバに付随する EtherWorks 3の他のツールを書きました。sunsite.unc.eduのディレクトリ, /pub/linux/system/Network/managementにewrk3tools-X.XX.tar.gzという名 前のファイルがあります。 いくつかのNat Semi DP83905の実装(例えばAT/LANTICおよびNE2000+)は ソフトウェアで設定可能です。(このカードはwd8013をエミュレートできる ことに注意!)Donaldのftpサーバー,desdis.gsfc.nasa.govからこのカード を設定できる,ファイル/pub/linux/setup/atlantic.cを入手できます。 NE2000+カードを設定する際には,誤った設定をしてしまうとケースを開けて 真っ当な設定に戻すためのジャンパを切替えなければならなくなるので,注 意してください。 3Com Etherlink IIIファミリのカード(たとえば3c5x9)はDonaldの別の設定 ユーティリティを使用して設定が可能です。Donaldのftpサーバ, cedsis.gsvd.nasa.govから設定用ファイル,/pub/linux/setup/3c5x9setup.c を入手できます。(DOSの3c5x9B設定ユーティリティは,新しいEtherlink III ファミリの``B''シリーズに関係した,より多くのオプションを持っています。) 7.2. イーサネットカードの診断プログラム Donaldが書いた診断プログラムのうちいくつかは,以下のURLから入手できま す。 イーサカードの診断 <http://cesdis.gsfc.nasa.gov/pub/linux/diag/diagnostic.html> Allied Telesis AT1700 -- cesdis.gsfc.nasa.govの/pub/linux/diag/at1700.c ファイルを探してください。 Cabletron E21XX -- cesdis.gsfc.nasa.govの/pub/linux/diag/e21.cファイル を探してください。 HP PCLAN+ -- cesdis.gsfc.nasa.govの/pub/linux/diag/hp+.cファイルを探し てください。 Intel EtherExpress -- cesdis.gsfc.nasa.govの/pub/linux/diag/eexpress.c ファイルを探してください。 NE2000カード -- cesdis.gsfc.nasa.govの/pub/linux/diag/ne2k.cファイルを 探して下さい。 RealTek (ATP) Pocket adaptor -- cesdis.gsfc.nasa.govの/pub/linux/diag/atp- diag.cファイルを探してください。 他のすべてのカード -- cat /proc/net/devとタイプすると,件のカードに関 してカーネルが持っている有用な情報を表示してくれるので,これを読んで ください。 8. 技術情報 現在のドライバと戯れたい人や,あるいは現在はサポートされていないカード のためのドライバを作成したい人には,この情報が有用であるに違いありませ ん。もし関係ないと思うのなら,このセクションは飛ばしてください。 8.1. 検出するアドレス そこにどのイーサネットカードがあるか決定するため,カードのタイプと仕様 がカーネルにセットされていないものとして,以下のアドレスが自動検査され ます。以下のファイル名は/usr/src/linux/drivers/netにあります。 ______________________________________________________________________ 3c501.c 0x280, 0x300 3c503.c: 0x300, 0x310, 0x330, 0x350, 0x250, 0x280, 0x2a0, 0x2e0 3c505.c: 0x300, 0x280, 0x310 3c507.c: 0x300, 0x320, 0x340, 0x280 3c509.c: Special ID Port probe apricot.c 0x300 at1700.c: 0x300, 0x280, 0x380, 0x320, 0x340, 0x260, 0x2a0, 0x240 atp.c: 0x378, 0x278, 0x3bc depca.c 0x300, 0x200 de600.c: 0x378 de620.c: 0x378 eexpress.c: 0x300, 0x270, 0x320, 0x340 hp.c: 0x300, 0x320, 0x340, 0x280, 0x2C0, 0x200, 0x240 hp-plus.c 0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 0x340 lance.c: 0x300, 0x320, 0x340, 0x360 ne.c: 0x300, 0x280, 0x320, 0x340, 0x360 ni52.c 0x300, 0x280, 0x360, 0x320, 0x340 ni65.c 0x300, 0x320, 0x340, 0x360 smc-ultra.c: 0x200, 0x220, 0x240, 0x280, 0x300, 0x340, 0x380 wd.c: 0x300, 0x280, 0x380, 0x240 ______________________________________________________________________ NE2000クローンの中には,自動検出するドライバに対してブラックホールを開 けて待っているものがあります。多くのNE2000クローンは,それらが認識され るまで安全なんですが,セーフモードへリセットできないものも存在するので す。これらの危険なイーサカードは,そのカードが持っている「データポート」 のいずれかへI/Oアクセスするだけでハングしてしまいます。危険な場所の典 型的なアドレスは: ______________________________________________________________________ イーサカードのジャンパ 危険な場所 設定(ベースアドレス) (base + 0x10 - 0x1f) 0x300 * 0x310-0x317 0x320 0x330-0x337 0x340 0x350-0x357 0x360 0x370-0x377 ______________________________________________________________________ * 0x300の場所は,イーサカードが伝統的に置かれていた場所ですが,他のデバ イスにとっても人気があります(SCSIコントローラがよく置かれます)。0x320 は2番目によく置かれるところですが,AHA1542ドライバの検出に問題があります。 0x360はよくありません。理由は,0x378のパラレルポートと衝突するからです。 もし2台のIDEコントローラ,あるいは2台のFDDコントローラを持っていると, 0x360はやはり問題を起こします。NE2000カードがIDEやFDDコントローラと衝突 することになります。 1.1.7X以降のカーネルは,どのデバイスがどのi/oポートを使用しているかのロ グを残しますし,先に組み込まれたドライバが登録したi/oポートを,後のドラ イバに使わせないようにすることができます。これにより検出に失敗してもだ まっていることになります。procファイルシステムが有効になっていれば, cat /proc/ioportsとタイプしてみてください。これで何がi/oポートを使用し ているか確認できます。 このような潜伏しているイーサカードの問題を避けるには,以下のような対処 法があります。 o メモリ空間にあるデバイスのBIOSを検出する。これは簡単で,常に安全で すが,1台目のSCSIコントローラのように,常にBIOSを持っているカード でしか動作しません。 o 自分のデバイスを認識できるまで,上述のアドレスを他のデバイスに検出 させないようにする。NE2000クローンは,<base>+0x18から<base>+0x1fま で,0xffでリセットするアドレス範囲を持っていますので,可能であれば 先にそこを検出します。8390のアドレス空間,<base>+0x00から<base>+0x0f も検出した方が安全ですが,そのエリアの値は疑似乱数が返るでしょう。 o たとえば,目的デバイスのポートアドレスの選択範囲が狭いなどの理由で, 危険な範囲を検出しなければならないときは,まずその範囲にNE2000が存 在しないことをチェックします。/usr/src/linux/net/inet/ne.cの検出コ ードを見ると,このチェックの方法がわかります。 o 検出される場所から,消えてしまう領域を保護するため,起動時の「予約」 引数使用する。「予約コマンド」のLILOで用いる起動時引数に関する情報 を参照してください。 8.2. ドライバを書く Linuxでイーサネットカードを使用するのに,ただ一つ必要なものは適切なド ライバです。ドライバを入手するのに欠かせないのは,ドライバを書く人が, 自分の人生を放棄する書類にサインする必要なく,メーカがプログラム情報 を一般に公開してくれることです。ドキュメントを得ることができるかどう か(あるいは,もしコードを書くつもりがないなら,あなたが本当に本当に 必要なドライバを誰かが書いてくれるようになるかどうか)の良い指標は, Crynwr(旧姓Clarkson)のパケットドライバが入手できるかどうかです。 Russ Nelsonはこの作戦を実行し,Linux用ドライバの開発をサポートするの に,大変有用なことを実証しました。ネットサーファはRussのソフトウェア を以下のURLで見ることができます。試してください。 Russ Nelson's Packet Drivers <http://www.crynwr.com/crynwr/home.html> ドキュメントが入手できれば,自分のカード用のドライバを書いてLinuxで それを利用できるはずです(少なくとも理論上は)。XTタイプのマシン用に 設計された古いハードウェアの中には,Linuxのようなマルチタスク環境で はあまりうまく動作しないものがあることを心に留めておいてください。 このようなハードウェアを使用すると,あなたの使用するネットワークが 結構な量のトラフィックを処理しなければならなくなったときに,大きな 問題となります。 ほとんどのカードはNDISやODIといったMS-DOSのインターフェース用ドライ バがついてきますが,Linuxにとっては無意味です。多くの人がそのドライ バを直接リンクすることや自動翻訳することを提案してきましたが,これは ほとんど不可能です。MS-DOSのドライバは16 bitモードであること,また 「ソフトウェア割り込み」にフックされることを想定しており,どちらも Linuxカーネルと互換性がありません。この非互換性は,実際には仕様です。 というのは,Linuxドライバの中には,DOSのドライバに比べてずっと優れた ものがあるからです。たとえば「8390」シリーズのドライバは,ピンポン 転送バッファを使用します。これは最近になってMS-DOSの世界に導入された ものです。 (ピンポン送信バッファは,送信パケットに,最低2つの最大サイズのパケッ トバッファを使用することを意味します。1つは,カードが他のバッファから 送信中にデータをロードするのに使います。もう1つは,最初のバッファの送 信が終了すると直ちに送信するのに使われます。これを交互にやるわけです。 このように,カードはほとんど連続して,ぴっちりつまったパケットをケー ブルに送信することができます。) それでは,プログラム情報を入手できたので,あるイーサネットカード用のド ライバを書こうと決めたけども,まだ完成してないとしましょう。(この2つ がこの節の要件なんですよ;-) まず,Linuxのカーネルソースとともに提供さ れているネットワークドライバの骨格から始めるべきです。 最近のカーネルはすべて,/usr/src/linux/drivers/net/skeleton.cというフ ァイルになっています。 8.3. カーネルへのドライバのインターフェース これは,新しいドライバを作成するには書かなければならない,関数に関す る注意書きです。上述のドライバ骨格と併せて読むと,要点がはっきりしま す。 8.3.1. 検出 起動時に,カードが存在するかどうかチェックするために呼ばれます。メモ リから読み込むなど,控え目にチェックできれば最高です。i/oポートから 読み出すこともできます。検出時にi/oポートへ書き出すのは,他のデバイ スを殺してしまうことがあるので,あまりよくありません。デバイスの初期 化の一部は,普通ここで行なわれます(i/o空間,IRQの割り当て,dev->??? フィールドの書き込み,など)。カードを設定するioポート/メモリがどれ か,(使用されるなら)どのように共有メモリを有効にするか,また割り込 み発生はどのように選択/有効にするか,などを知っておく必要があります。 8.3.2. 割り込みハンドラ カードが割り込みを発生したとき,カーネルにより呼ばれます。これはカー ドがなぜ割り込みを発生したのか決定するジョブを持っており,その原因に したがって動作します。通常,割り込み条件は受信すべきデータが存在する, 送信が完了した,エラー状況が報告される,などです。割り込み条件にした がって動作させられるよう,関連する割り込み状況ビットについて理解して おく必要があります。 8.3.3. 送信関数 dev->hard_start_xmit()にリンクされ,カーネルがデバイスに出力したい データが存在するときに,カーネルから呼ばれます。これはカードへデータ を送り,送信をトリガーします。データをどのようにまとめるか,およびそ れをどのようにカードへ送り込むか(共有メモリのコピー,PIO転送,DMA?) およびカード上のデータを送り込むべき正しい場所について知っていなけれ ばなりません。それから,カードに配線へデータを送らせる方法や(たぶん) 完了時に割り込みを発生させる方法を知っていなければなりません。ハード ウェアが追加のパケットを受け付けられない場合は,dev->tbusyフラグをセ ットしなければなりません。受け付ける余裕ができた場合は,通常,送信完 了割り込みの間に,dev->tbusyをクリアし,mark_bh(INET_BH)で上位に連絡 しなければなりません。 8.3.4. 受信関数 カード上にデータが存在するとカードが報告するとき,カーネル割り込みハ ンドラによって呼ばれます。カードからデータを取り出し,それをsk_buff に詰め,netif_rx(sk_buff)を実行することによりデータが存在することを カーネルに知らせます。データを受信したことによる割り込みの発生を有効 にする方法と,関連する受信状況ビットをチェックする方法,およびカード からデータを取り出す方法(再度ですが,共有メモリ,PIO,DMAなど)につ いて知っていなければなりません。 8.3.5. オープン関数 dev->openにリンクされ,誰かがifconfig eth0 upを実行したときにネットワ ーク層から呼ばれます - これはデバイスをオンラインにし,データの送受信 を可能にします。検出段階で行なわれなかった特殊な初期化の呪文(IRQの発 生を有効にする,など)もここで実行されます。 8.3.6. クローズ関数(オプション) これは,誰かがifconfig eth0 downしたときにカードを元の状態に戻します。 ハードウェアによりますが,可能であればIRQとDMAチャネルを開放し,そして 電力消費を低減するよう機器(トランシーバなど)の電源をOFFにします。 8.3.7. さまざまな関数 リセット関数のような機能は,何かおかしなことが起きた時に,ドライバが 最後のあがきとしてカードをリセットしようとするのに使われます。通常, 送信時のタイムアウトなどの時になされます。また,カードの統計レジスタ (存在する場合ですが)を読み出すような関数もあります。 8.4. 割り込みとLinux Linuxには2種類の割り込みハンドラがあります: 高速なものと低速なものです。 irqaction()に渡すフラグで,どちらをインストールするか決定します。高速 な方は,シリアルの割り込みハンドラのように,「すべての」割り込みを無 効にして実行します。通常の割り込みハンドラは,イーサカードのドライバ 用のように,他の割り込みを有効にしたままで実行します。 割り込みには2段階の構造があります。「高速な」部分はデバイスレジスタを 処理し,パケットを除去し,そしてたぶんフラグをセットします。以上が完 了したあとに割り込みが再度有効になり,フラグがセットされていれば,遅 い部分が実行されます。 2つの部分のフラグは,以下でセットされます: mark_bh(INET_BH); 通常,このフラグは受信パケット割り込みの間に,dev_rint()の中でセット され,また送信完了割り込みの間にデバイスドライバにより直接セットされ ます。 なぜすべての割り込みハンドラが他の割り込みも可能な「通常モード」で 実行されないのか不思議に思うかもしれません。Ross Biroは,問題をわかり やすくするため,以下のシナリオを使っています: o シリアル割り込みを受け取り,処理を始めました。シリアル割り込みは今 マスクされています。 o ネットワーク割り込みを受け取り,最大サイズ,1500バイトのパケットを カードから転送しはじめました。 o 他のキャラクタがやってきましたが,この時割り込みはマスクされていま す! 「高速の」割り込み構造は,制限時間割り込みハンドラを実行することにより, 他の割り込み要求から,割り込み線をマスクしたままにするという危険を犯 すことなく,この問題を解決しています。 高速と低速の割り込みハンドラを使い分けるためのさらなる条件があります -- ハンドラに渡す引数です。「遅い」ハンドラは以下のように定義されます。 ______________________________________________________________________ static void handle_interrupt(int reg_ptr) { int irq = -(((struct pt_regs *)reg_ptr)->orig_eax+2); struct device *dev = irq2dev_map[irq]; ... ______________________________________________________________________ 一方,高速なハンドラは直接番号を受け取ります ______________________________________________________________________ static void handle_fast_interrupt(int irq) { ... ______________________________________________________________________ ネットワーク性能を決定する最終的な局面は,割り込み頻度(レイテンシ) です。本当にこれに該当する唯一のボードは3c509で,予測割り込みを発生す ることが可能です。ドライバがどれくらいの時期に割り込みを発生させれば よいか,をドライバが最適にチューニングできるよう,割り込み応答タイマ が提供されています。 8.5. Intelチップのプログラミング(i82586とi82593) これらのチップは多くのカード,すなわち3c507('86),Intel EtherExpress 16('86),Microdyneのexos205t('86),Z-Note('93)およびRacal-Interlan ni5210('86)で使われています。 Russ Nelsonは書いています: 「ほとんどの82586ベースのボードは,コードの ほとんどを再利用可能です。実際,再利用可能なコードは8390ベースのアダプ タより多いです。これらの中で異なるのは以下の3点です: o イーサネットアドレスを得るためのコード o 82586上でCAをトリガするためのコード o 82586をリセットするためのコード Intel EtherExpress 16は例外で,82586をI/Oマップします。本当にI/Oマップ するのです。間抜けですが,動作します。 Garrett WollmanはBSDの著作権に従うコードを使用するBSD用のAT&Tドライ バを書きました。わたしが持っている最新版('92年9月)は,1つの送信バッ ファのみ使用しています。メモリが実装されているなら,これより良いもの が書けますし,書くべきです。AT&Tと3c507アダプタはメモリが十分にありま すが,ni5210はありません。 Intelの人が,複数の転送パケットをキューに貯める方法について,大きな糸口 をわたしにくれました。NOP-> XMIT-> NOP-> XMIT-> NOP-> 最初に戻る,とい うようなブロックのリストを作り,それからすべてのNOPブロックの「次の」ポ インタに自分自身を指すようにセットします。ここで,このチェインでコマン ド群を実行します。コマンドは最初のNOPを連続して処理します。パケットを転 送するためには,パケットを次の転送ブロックに詰め,それからそれへのNOPを 指します。このように,直前の転送の終了を待つ必要なく,また,カードが受 け付けてくれるかどうか迷う必要もなく,複数のパケットをキューに貯めるこ とができ,またコマンド群の起動時の遅延を避けることができます。 8.6. 3Comの技術情報 もし3Comのカードのドライバに関わるつもりなら,3Comから技術情報を得るこ とができます。Cameronは親切にも以下のような入手法を教えてくれました。 3Comのイーサネットアダプタの情報は,`Technical References'(TRs)とい う文書でドライバの作者に提供されています。これらのマニュアルは,ボード へのプログラマ向けインターフェースについて記述していますが,エンドユー ザが使用する,診断やインストールプログラムなどについては触れていません。 ネットワークアダプタ部門のマーケティング課は,TRsを配布してきました。 この配付作業を効率的にするため,我々は`CardFacts'にこれを集めました。 CardFactsというのは,電話による自動応答システムです。DTMFトーン付の電 話で掛けることにより,文書がファックスで送信されます。TRを得るには, 408-727-7021のCardFactsに電話してください。開発者用注文書(Devieloper's Order Form)文書番号9070を要求してください。電話を掛ける前に,自分の ファックス番号を確認しておいてください。注文書に記入し,408-764-5004 へファックスします。マニュアルはFederal Expressの2日目サービスで発送 されます。 マニュアルを得たあとに,それでもボードをどのようにプログラムしたらい いかわからない場合は,`CardBoard' BBS,1-800-876-3266に接続してみて ください。それができない場合は,Andy_Chan@3Mail.3com.comへメールを出し, 代替案を聞いてみてください。もし,それがまだ誰も知らないような難問で あるなら,それを知るべき人であるSteve_Lebus@3Mail.3com.comへメールを 出して下さい。 われわれがこのマニュアルに配付に関していい加減だと考える人がおり,そ ういう人達はこの配付システムにあまりにコストが掛かるとか,あるいは多く の時間や努力を必要とする,という証拠を探しています。そんなわけで,こ こに名前を上げた人に電話を掛けたりメールを出す前にCardFactsを使用し てみることが重要なのです。 我々がDiamondやXircomのようになって,性能が悪いドライバが書かれるのを 防ぐため,ドライバの作者と緊密な「パートナーシップ」を取るべきだ,と さえ考える人もいます。今まで,3Comの顧客はこの点に関して素晴らしく, 我々が受け取った要求のレベルに問題はありません。これからもこのプログ ラムを維持して行くため,皆様の協力をお願いします。 Cameron Spitzer, 408-764-6339 3Com NAD Santa Clara work: camerons@nad.3com.com home: cls@truffula.sj.ca.us 8.7. AMD PCnet / LANCEベースのカードに関する注 AMD LANCE(Local Area Network Controller for Ethernet)として元々は 提供されていましたが,その後`PCnet-ISA',あるいは79C960として知られ ているチップに取って換わられました。AMDからの比較的新しいチップ, 79C960は,現在新しく発売されるカードによく使われています。`LANCE'と いう名前も残っていて,中には旧名で新しいチップのことを指す人もいます。 AMDのネットワーク製品部門のDave Robertsは親切にも,この情報に関する 以下の情報を提供してくれました: 「LANCEを使用したアーキテクチャに関しては,AMDがもともとそれを開発し, それを1つのチップにまとめたのです -- PCnet(tm)-ISAです。1年以上前の ことです。以来,ホットケーキのようによく売れています。 機能的には,それはNE1500と変わりありません。レジスタセットは古い LANCEにNE1500/2100アーキテクチャを追加したものと同一です。古いNE1500/ 2100ドライバは,PCnet-ISAでも動作することでしょう。NE1500とNE2100の アーキテクチャは基本的に同一です。最初Novellはそれを2100と呼んでいま したが,その後同軸と10Base-Tのカードを区別しようとしました。10Base-T のみを装備したものが,1500系の番号を振られました。違いはそれだけです。 多くの会社は,PCnet-ISAベースの製品を提供しており,そこにはHP,Racal- Datacom,Allied Telesis,Boca Research,Kingston Technologyなどが含ま れています。カードは基本的に同一ですが,メーカーの中にはソフトウェア でカードを設定できるように「ジャンパ無し」機能を追加しているものもあ ります。ほとんどはジャンパ設定です。AMDはPCnet-ISAを使用するカード用 に,標準的な設計パッケージを提供しており,多くのメーカが我々の設計を 変更することなく使用しています。これが意味することは,ほとんどのPCnet- ISAベースのカードに対応するドライバを書こうとする場合,単にAMDからデー タシートを入手すればよい,ということになります。われわれの文献配布セ ンター,(800)222-9323に電話し,Am79C960,PCnet-ISAデータシートを要求 してください。無料です。 「AMDの設計例そのまま」のカードかどうかを素早く見分けるには,カードを 見ることです。そのまま,であれば,そこに大きなチップ,水晶,小さな IEEEアドレスPROM,それからたぶん起動用ROMのソケット,およびコネクタ (装備しているメディアオプションにより,1〜3個)があるはずです。同軸 のカードであれば,そこに組み込まれたトランシーバ部品もあるでしょうが, PCnet-ISAから離れた,コネクタの側にあるはずです。」 LANCEのチップに関しては,標準のカーネルに含まれているlance.cファイル にも情報があります。 カードハッカーな方への注意としては,LANCEの実装の中には,異なった方法 でリスタートするものがあることです。ringバッファに残っているものをその まま利用するものもありますし,初期化の場合と同様にリングバッファの先頭 から開始するものもあります。これはマルチキャストのリストを設定する際に 関連します。 8.8. マルチキャストと無差別モード Donaldが作業を行なったものの中には,マルチキャストと無差別モードフック の実装があります。リリースされているもののすべて(すなわちアルファ版で はありません)のISAドライバは現在,無差別モードをサポートしています。 Donaldは書いています: 「まず,/dev/*あるいはDDIインターフェースを実装 しているときに無差別モードを実装しようと計画しました。が,それは正しい 方法ではありませんでした。何かがパケットを見たときだけマルチキャストあ るいは無差別モードを有効にし,そのアプリケーションが終了したときにはそ のモードを終了させるべきで,そのどちらもハードウェアがオープンされたり 解放されるときにはそんなに関係がありません。 無差別モードについて議論するところから始めようと思いますが,それは概念 的には実装が容易です。ほとんどのハードウェアではレジスタビットをセット するだけで,その後すべてのパケットを受信することができます。ええ,それ くらい簡単です; 特定のハードウェアではボードを終了させ(数パケットを落 すことになるかもしれません),再設定し,再度イーサカードを有効にします。 これは汚く危ない方法ですが,代替案は起動時にイーサカードをオープンする 前にすべてのアプリケーションレジスタを持つことくらいです。 確かに簡単です。ですからそんなに明白ではないことに話題を移しましょう。 すなわちマルチキャストです。2つの方法で実現できます。 1. 無差別モードと,Berkeleyパケットフィルタ(BPF)のようなパケットフィ ルタを使用します。BPFはパターンマッチングスタック言語で,これであな たが必要としているアドレスを選択するプログラムを書けます。この方法の 利点は,大変一般的でプログラム可能な点です。欠点はカーネルが無差別 モードへ移行して,すべてのパケットをすべての登録されたパケットフィ ルタを通じて受信してしまうのを防ぐ一般的な方法が無いことです。 詳細については,「Berkeleyパケットフィルタ」の項を参照してください。 2. ほとんどのイーサチップが持っている,内蔵マルチキャストフィルタを使用 する。 いくつかのイーサカード/チップが提供している機能を列挙しておきます。 チップ/カード 無差別 マルチキャストフィルタ ----------------------------------------------------------------- Seeq8001/3c501 Yes バイナリフィルタ (1) 3Com/3c509 Yes バイナリフィルタ (1) 8390 Yes Autodin II 6ビットハッシュ (2) (3) LANCE Yes Autodin II 6ビットハッシュ (2) (3) i82586 Yes Hidden Autodin II 6ビットハッシュ (2) (4) 1. これらのカードはフィルタを持っているといわれていますが,単に「すべ てのマルチキャストパケットを受け入れるか」あるいは「すべてのマルチ キャストパケットを受け付けないか」というだけの話です。 2. AUTODIN IIは標準的なイーサネットCRC(チェックサム)多項式です。この 方法では,マルチキャストアドレスはハッシュ化され,ハッシュテーブル で参照されます。相当するビットが有効になると,このパケットは受け入 れられます。イーサネットパケットは,これを処理するハードウェアが単 純になるよう,配置されます -- 最初の6つのオクテット(行き先アドレス) の後,CRCからの6ビット(通常)をラッチし(これはエラーチェックのた めにとにかく必要),それらをハッシュテーブルへのインデックスとして 使用するだけです(6ビット -- 64ビットテーブル)。 3. これらのチップは6ビットハッシュを使用し,ホストにより計算されロード されたテーブルが必要です。これは,カーネルにCRCコードを含んでいなけ ればならないということです。 4. 82586は内部的に6ビットハッシュを使用しますが,受け入れるマルチキャ ストアドレスのリストから自分でハッシュテーブルを計算します。 これらのチップのどれも完璧なフィルタリングを行なう訳ではないこと,およ び最終的なフィルタを行なう中位のモジュールがやはり必要であることに注意 してください。また,どの場合でも受け入れマルチキャストアドレスが変更さ れた時に,ハッシュテーブルを再計算する必要があるので,アドレスの完璧な リストを保持しておくことが必要です。 デバイスレベルでのサポートに関するわたしの第一歩は,ドライバの基本骨格, skeleton.cに詳しく記述してあります。 それは以下のようなものです: ______________________________________________________________________ #ifdef HAVE_MULTICAST static void set_multicast_list(struct device *dev, int num_addrs, void *addrs); #endif . . ethercard_open() { ... #ifdef HAVE_MULTICAST dev->set_multicast_list = &set_multicast_list; #endif ... #ifdef HAVE_MULTICAST /* このアダプタ用のマルチキャストフィルタをセット/クリアする num_addrs -- -1 無差別モード,すべてのパケットを受信 num_addrs -- 0 通常モード,マルチキャストリストをクリア num_addrs > 0 マルチキャストモード,通常およびMC パケットを受信し,最大限努力してフィルタ処理する */ static void set_multicast_list(struct device *dev, int num_addrs, void *addrs) { ... ______________________________________________________________________ コメント,御批判などは歓迎します。」 8.9 バークレイパケットフィルタ (BPF) 開発者の一般的な考え方では,BPFの機能はカーネルによって提供されるので はなく,(たぶんあまり使われない)互換ライブラリに入れられるべきです。 知らない人のために: BPF(バークレイパケットフィルタ)は,あなたが対象 としているパケットがどれか,カーネルのネットワーク層に指示するための 機構です。ネットワークコードの下位レベルに組み込まれた,特別なスタッ ク言語インタプリタとして実装されています。アプリケーションは,この言 語で書かれたプログラムをカーネルに渡し,カーネルは入って来るパケット それぞれについてプログラムを実行します。もしカーネルが複数のBPFアプリ ケーションを持っていると,それぞれのパケットでそれぞれのプログラムが 実行されます。 問題は,アプリケーションが対象としているのが,どの種類のパケットであ るのか,パケットフィルタプログラムから判断するのが困難なことで,その ため一般的な解決法は,常にフィルタを実行することになってしまうのです。 マルチキャストアドレスへ送られるデータの含まれる率が低いストリームを 取り出すBPFプログラムを考えてみます。ほとんどのイーサネットカードは, ほとんどの不要なマルチキャストアドレスを無視する64エントリのハッシュ テーブルとして,ハードウェアマルチキャストアドレスフィルタを実装して いますので,このようなプログラムを低い負荷で実行する能力を有していま す。しかし,BPFではカーネルを無差別モードに移行させ,すべてのパケッ トを受信し,そしてこのフィルタに通過させなければなりません。これは動 作しますけど,パケットを要求しているプロセスがどれか判断するのは困難 です。 9. ラップトップ/ノートブックコンピュータでのネットワーク ラップトップをネットワークにつなぐ方法は,現在のところあまりありませ ん。SLIPコードを使用する(そしてシリアルポートの速度で使用する)こと ができます; NE2000互換イーサカードを内蔵した数少ないラップトップのど れかを購入することができます; PCMCIAスロットをサポートするノートを購 入できます; ISAのイーサカードを挿せるドッキングステーション付のラップ トップを購入できます; あるいは,D-LinkのDE-600のような,パラレルポー ト用のイーサネットアダプタを使用できます。 9.1. SLIP これがもっとも安価な解決法なんですが,難しいことはまったくありません。 また,高速な転送速度は得られません。SLIPは実際にはイーサネットカード とは関係ないので,ここではこれ以上説明しません。NET-2 HOWTOを参照し てください。 9.2. NE2000内蔵マシン この解決法は,ラップトップの選択範囲を著しく狭めてしまいますし,か なり高価です。実際にマシンをネットワークを接続するには,標準的でな いトランシーバがさらに必要になることもありますので,仕様書をよく読 むようにしてください。そのノートパソコンをne2000をサポートしたカー ネルで起動して[店頭でですよ],そのNE2000がうまく検出され動作する ことを確認してから現金を払うのはよい考えでしょう。 9.3. PCMCIAのサポート この領域は,Linuxでは比較的最近開発されはじめたものなので,LAPTOP メーリングチャンネルに参加されることをお勧めします。メーリングリスト への参加法については「メーリングリスト...」の項を参照してください。 自分の持っているハードウェアが何であるか,正確に把握してください (すなわち,カードのメーカ,PCMCIAのコントローラチップのメーカ)。 それから,LAPTOPSチャンネルに尋ねてください。ですが,すべてが単純に 行くとは思わないでください。そこらじゅういじくったり,カーネルに パッチを当てたりする必要があるかもしれません。いつか`make config' とタイプできる日が来ることでしょう8-) [pcmcia-csパッケージのおかげで,パッチ当てなどの作業はほとんど いりません。また,pcmcia-csに同梱のSUPPORTED.CARDSに記載されてい るカードさえ購入すれば,さほど問題は生じないでしょう。] 現時点では,2つのPCMCIAチップセット,DatabookのTCIC/2とIntelの i82365がサポートされています。[i82365には多くの互換チップが存 在します。] いくつかの便利なプログラムがtsx-11.mit.eduの/pub/linux/packages/ laptops/にあります。PCMCIAイーサカードのドライバから,PCMCIAの コントローラチップと通信するためのプログラムまであります。これらの ドライバは,通常特定のPCMCIAチップ(すなわちintelの82365かTCIC/2) 用に開発されているので注意してください。 NE2000互換カードについては,DOS環境でカードを認識させ,それから loadlinを用いてDOSのコマンドプロンプトからlinuxを起動させること により,linuxでカードを認識させることに成功している人もいます。 ネットサーフィンができる方は: Don's PCMCIA Stuff <http://cesdis.gsfc.nasa.gov/linux/pcmcia.html> へ行ってみてください。とにかく,PCMCIAドライバの問題はLinuxの世界 に特有なわけではありません。MS-DOSの世界でも実際大災害でした。 DOSの世界では,マニュアルに従いさえすればカードが動作することを期 待されます。そのカードを他のハードウェアやソフトウェアと組み合わ せても使用できるとは思っていないかもしれませんし,最適条件で動作 することも期待してないかもしれません。しかし,カードと同梱のソフ トウェアは確実に動作することが期待されます。多くのPCMCIAカードは この条件すらパスすることができません。 PCMCIAのサポートを望んでいるLinuxユーザに朗報です。この分野はかな り進歩しつつあります。David Hindsがこの分野の開拓を始めました。 彼の最新のPCMCIAサポートパッケージはcbiris.stanford.eduのディレク トリ/pub/pcmciaから入手できます。ファイル名はpcmcia-cs-X.Y.Z.tgz のようになっていて,X.Y.Zが最新のバージョン番号です。これはたぶん tsx-11.mit.eduにも置かれるはずです。 DonaldのPCMCIAイネーブラはユーザレベルの処理として動作し,David Hindのpcmcia-csはカーネルレベルの解決法であることに注意してくださ い。Davidのパッケージの方が,ずっと広く用いられているため,そちら を利用した方がいいでしょう。 9.4. ドッキングステーションのISAのイーサカード ラップトップ用のドッキングステーションは大体250ドル程度し,2つの フルサイズISAカード,2つのシリアルと1つのパラレルポートを使用で きます。ほとんどのドッキングステーションはラップトップ本体のバッ テリから給電され,短いISAカードを使用する場合には,ドッキングス テーション内部に追加のバッテリを内蔵できるものもあります。安価な イーサカードを追加することで,フルスピードのイーサネットの性能を 享受することができます。 9.5. ポケット/パラレルポートのアダプタ `ポケット'型のイーサネットアダプタもあなたの要求に合致するかもし れません。最近になってようやく,価格がドッキングステーション+ 安価なイーサカード並になりましたし,コンセントの邪魔をするACアダ プタから解放されました。現在,D-LinkとRealTekのアダプタから選択 することができます[PlanetはD-Link DE-620と互換でした]。他のほ とんどの会社,特にXircom(「Xircom」の項参照)は,プログラムに必 要な情報を企業秘密扱いにしているので,サポートは遅々として進んで いません(永久に無理かも!)。 パラレルポートの制限のため,転送速度はそれほどすごい,というわけ には行きません(たぶん100kB/sがいいとこ?)。 「DE-600 / DE-620」および「RealTek」の項にポケットアダプタのサポ ートに関する情報があります。 ラップトップのキーボードポートから電力を供給してもらうケーブルを 購入あるいは自作することにより,壁に貼りつくタイプのACアダプタを 使用しなくても済むことがあります(「キーボード電源」の項参照) [一部サブノートでは,電流供給能力に問題があるかもしれません]。 10. その他もろもろ ほかの章に該当しないようなもろもろの項目をここに集めました。関連 がないかもしれませんし,みなさんの興味を引くものではないかもしれ ませんが,とにかく書いておきます。 10.1. カーネルへのイーサネット関連の引数の渡し方 起動時にカーネルに渡すことのできる広く利用できるコマンドは2つあり ます。これは,LILOやloadlin,あるいはオプション引数を受け付ける, それ以外の起動ユーティリティで実行可能です。 例えば,コマンドが`blah'で,3個の引数(例えば123,456,789)を取る 場合,LILOでは以下のように用います。 LILO: linux blah=123,456,789 注: PCIカードは起動時にBIOSによりそのi/oポートとIRQを割り当て ます。ですから,通常はPCIカードに対するIRQやi/oポートの起動時引 数を与えても無視されることになります。 起動時引数に関する情報(およびその一覧)については,BootPrompt-HOWTO を参照してください。 <http://sunsite.unc.edu/mdw/HOWTO/BootPrompt-HOWTO.html> 10.1.1. イーサのコマンド もっとも広く用いられているコマンドの形式は,以下の通りです: ether=IRQ,BASE_ADDR,PARAM_1,PARAM_2,NAME すべての引数は必須ではありません。最初の数字でない引数は名前として 認識されます。 IRQ: おわかりですね。`0'というIRQ値(通常はデフォルトです)は,IRQを 自動割り当てすることを意味します。IRQの設定がベースアドレスより先 にあるのは,偶然そうなってしまったものが続いているためです -- 何か の変更の機会に,修正されることでしょう。 BASE_ADDR: これもおわかりですね。値`0'(通常はデフォルト)ではイーサ ネットのアドレスを,カードの種類に応じたアドレスリストの中から検出 します。 PARAM_1: 元々は,WD80*3のような共有メモリのイーサカードで使用される メモリの開始アドレスを指定するために使用されていました。ドライバの 中には,デバッグメッセージのレベルを設定するために,下位4 bitを使用 するものもあります。0 -- デフォルト,1-7 -- レベル1..7(7がもっとも 詳しいメッセージとなります),8 -- レベル0(メッセージ無し)です。 また,LANCEのドライバはDMAチャンネルを選択するために,この値の下位 4 bitを使用します。指定なき場合は,DMAを自動選択します。 PARAM_2: 3c503ドライバは,内部/外部のトランシーバの選択にこの値を 使用します。0 -- デフォルト/内部,1 -- AUI外部 です。Cabletron E21XXカードも出力メディアの選択にPARAM_2の下位4 bitを使用します。 指定なき場合は自動検出します。 NAME: 値が指し示すネットワークデバイスを選択します。標準カーネルは バスに接続されたイーサカードに対して`eth0',`eth1',`eth2'および `eth4'という名前を使用し,パラレルポートに接続される「ポケット」イ ーサネットアダプタに対しては`atp0'という名前を使用します。arcnet ドライバは名前として`arc0'を使用します。1つのカードだけ検出される 場合のデフォルトの設定では,`eth0'という名前が使用されます。複数の カードを有効にするには,LILOのコマンドラインで,これらのカードのベ ースアドレスを引数として明示的に与えなければなりません。1.0のカー ネルでは,LANCEベースのカードだけは例外になっています。LILOの引数 は無視され,LANCEのカードは常に`eth0'から始まる`eth<n>'という値を 与えられます。追加の非LANCEベースのイーサカードは,明示的に `eth<n+1>'に割り当てられねばならず,また,通常の`eth0'に対する検出 は,`ether=0,-1,eth0'などとして無効にしなければなりません。(ええ, これはバグです。) 10.1.2. 予約(reserve)コマンド 次のliloコマンドは先述の`ether='のように使われますが,lilo.confで 指定される起動選択の名前の後に追加されます。 reserve=IO-base,extent{,IO-base,extent...} マシンの中には,デバイスドライバが特定の領域でデバイスのをチェックす ること(自動検出)を割けなければならないものがあります。これは,起動 時にシステムをフリーズさせてしまうような貧弱な設計のハードウェア(い くつかのイーサカードのように)や,誤って認識されてしまうハードウェア や,あるいは単にカーネルに初期化して欲しくないハードウェアのためです。 予約起動時引数は,検出させないI/Oポート領域を指定することでこの問題 に対処します。指定された領域はカーネルのポート登録テーブルに予約され, デバイスがあたかもすでにその領域で発見されたかのように振舞ます。この 機構は,ほとんどのマシンでは必要ないことに注意してください。問題があ ったり,特別な場合にのみこれを使用する必要があるのです。 指定された領域のI/Oポートは,デバイスの検出がされなくなります。これ は,ドライバの中にNE2000でハングしてしまったり,他のデバイスを自分 の管轄であると誤認識してしまうものがあった頃に使われるようになりま した。正しいデバイスドライバは,他の起動時引数で検出するよう指定さ れない限り,予約された領域では検出しません。このことは,予約コマン ドは他の引数とともに用いられることがほとんだ,ということを意味して います。ですから,特定のデバイスを保護するために,予約領域を指定し たなら,通常そのデバイスを検出させるための指定を明示的に行なわなけ ればなりません。ほとんどのドライバは,明示的にアドレスを与えられた 場合にはポート登録テーブルを無視します。 例えば,起動行が LILO: linux reserve=0x300,32 ether=0,0x300,eth0 であるなら,イーサネットカードを除くすべてのデバイスドライバは 0x300-0x31fを検出しません。 起動時の指定子は通常なら,パラメータが11個という制限がありますので 1つのreserveキーワードごとに5つの予約領域しか指定できません。もし 特別複雑な要求があるなら,複数の予約指定子を使用することもできます。 10.2. モジュールとして使用するイーサネットドライバ 現在,すべてのモジュールはあなたのLinuxカーネルソースツリー(通常は シンボリックリンク)のサブディレクトリ,modulesに置かれています。実 際にモジュールを生成するには,カーネルを適切に構築した後にmake modules とタイプしなければなりません。初期にカーネルはモジュールを自動的に 作っていましたが,4MBメモリの386SX-16マシンでコンパイルするのは適切 ではありませんでした。 ほとんどのモジュールはinsmodのコマンドラインでio=0x340とかirq=12の ようなパラメータを受け付けます。カードの自動検出を避けるために,こ れらのパラメータを与えることを「強くお勧め」します。PCIやEISAのデバ イスとは異なり,ISAのデバイスを本当に安全に自動検出する方法はありま せん。ですから,ドライバをモジュールとして使用する際には自動検出を 避けるべきなのです。 それぞれのモジュールが受け付けるすべてのパラメータのリストは,以下 のファイルにあります: /usr/src/linux/Documentation/networking/net-modules.txt お持ちのカードで使用できるオプションをチェックするため,この文書を 読むことをお勧めします。 使用する引数/オプションが決まったら,rootになって以下のようにタイ プすることでモジュールを導入できます: ______________________________________________________________________ insmod mod_name.o [io=val1[,val2,...]] [irq=val7[,val8,...]] ______________________________________________________________________ コンマで区切ったリストは,1つのモジュールで複数のデバイスを扱う能 力を持つモジュールで使用されます。例えば,すべての8390ドライバと, PLIPドライバです。 ロードされるモジュールに引数を渡す方法については,manページinsmod(8) を参照してください。コマンドlsmodはどのモジュールがロードされてい るか表示し,rmmodはロードされているモジュールを削除します。 モジュールが一旦導入されると,通常のドライバと同様に利用でき,また ifconfigコマンドを与えることもできます。起動時にネットワークを設定 するなら,ifconfigコマンドが実行される前にinsmodコマンドが実行され るよう/etc/rc*ファイルを設定しておいてください。 また,使用中のモジュールは削除できないことに注意してください。これ は,モジュールを削除する前にifconfig eth0 down(イーサカードを停止 させる)しなければならないことを意味します。 10.2.1. モジュールとしての8390ベースのカード 8390ベースのカードのリストは現在,3c503,ac3200,e2100,hp,hp-plus, ne,smc-ultraおよびwdとなっています。これらのカードは1.3.42以前のバ ージョンのカーネルではモジュールとしてはサポートされていません。 (別のパッケージで配布されている,やはり8390ベースであるPCMCIAのドラ イバ(例えばde-650)の中には,これに含まれないものもあり,つい最近モ ジュールのサポートがなされました。) もし8390ベースのカードを持っているなら,2つのモジュール,すなわち 8390.oとその後に自分のカードに対応したモジュールを導入しなければなら ないでしょう。もし8390サポートがすでにカーネルに組み込まれていたら, 8390モジュールを導入する必要はありません。(8390サポートは,8390ベー スのカードをカーネルに組み込むことにした場合は,常に組み込まれること になります。)カーネルに8390サポートが組み込まれているかどうかは, cat /proc/ksyms | grep 8390で確認できます。 8390ベースのカードでは,8390のモジュールを外す前にカードのモジュール を外さなければなりません。なぜなら,8390のモジュールはカードのモジュ ールによって使用されているので,ビジーとなってしまうからです。 8390系列のネットワークドライバは,今では複数のカードを使用するのに同 じモジュールを何度もロードする必要はありません(メモリ効率がいいです ね!)。これには,以下のようにコンマで区切った複数の値を指定すること で行ないます。 ______________________________________________________________________ insmod 3c503.o io=0x280,0x300,0x330,0x350 xcvr=0,1,0,1 ______________________________________________________________________ 上記の指定により,1つのモジュールで4つの3c503カードを制御でき,2,4 番目のカードは外部トランシーバを使用します。 自動検出ではなく,"io="を使用することを「強くお勧め」します。引数 "io="を指定しないと,ISAの8390ドライバは自動検出はお勧めしないよ,と 文句を言い,出し惜しみして「1つのカードだけ」しか自動検出してくれま せん -- もし複数のカードを使用したいんなら,"io=0xNNN,0xQQQ"という引 数を与えなければ「なりません」。 neのモジュールは上記にあてはまりません。NE2000は本質的には8390チップ, バスライン,およびRAMからなっています。このため,neの検出は他のカード より侵略的です。ですから,起動時にすべての8390カードの最後にneの検出 されることが必要です(そうすれば,neの検出が他の8390カードの上を踏み 歩くことはありません)。モジュールを使用すると,すべての非neの8390カ ードがすでに検出されているかどうかを確認することはできません。このた め,neモジュールにはinsmodを通じて引数io=0xNNNを与えることが「必要で す」。自動検出は拒否されます。 自動IRQが信頼できないということも注意しておく価値があるでしょう。動 作中のマシンの割り込み状況というのは刻々と変化していますから。ne2000 のような,EEPROMや設定レジスタからIRQ設定を取得できないカードでは, 引数irq=Mも与えた方がよいでしょう。ファイル /usr/src/linux/Documentation/networking/net-modules.txt には,値irq=Nが与えられなかった場合に,どのように割り込みの設定が決 定されるか,ということについても列挙してあります。 10.3. メーリングリストとLinuxのニューズグループ イーサネットカードに関して質問があるなら,この文書をまず読んでくだ さい。LinuxメーリングリストのNETチャンネルに参加したいなら, majordomo@vger.rutgers.eduへメールを出すと,どのようなリストを入手 できるか,またメーリングリストへの加入方法に関するヘルプが得られま す。 さらに心に留めておいていただきたい点は,NETチャンネルは開発に関す る議論のみ行なわれている,ということです。システムの設定法に関する 一般的な質問については,あなたがLinuxのネットワーク部分の開発に積 極的に関わってないかぎりはcomp.os.linux.setupへ投稿すべきです。 メーリングリストとニューズグループの内容に関して,この全般的なガイ ドラインを尊重していただければ幸いです。 また,Linux固有の話ではない場合は,ニューズグループ comp.sys.ibm.pc.hardware.networkingとcomp.dcom.lans.ethernetへ質問 すべきでしょう。 [日本国内では,fj.os.linuxやfj.sys.ibmpcなどが該当します。 質問する際には,障害の状況(エラーメッセージなど),ハードウェア 構成,ソフトウェア構成(版やバージョンなど)を書くようにしましょ う。回答しようにもできない質問が多くみられます。私も肝に命じてお ります。] 10.4. 関連文書 この文書の情報のほとんどは,comp.os.linuxのグループに投稿された情 報を保存しておいたもので,情報源としてcomp.os.linux.*が価値あるも のであることがお判りいただけるでしょう。他の有用な情報はDonald自 身の手によるこまごまとしたファイル群を元にしています。もちろん, もしイーサネットカードを設定するところなら,使用するソフトウェア を設定するためにNET-2 Howtoをお読みになったほうがよいでしょう。 また,自分はいっぱしのハッカーであると自負をお持ちのあなたは,ド ライバのソースファイルからもより多くの情報を絞り出すことができま す。ソースには,実際のコードの前に1段落か2段落の文書が存在し,重 要な点について解説してあります。 Linuxに固有ではない情報(10BaseTって何?,AUIって何?ハブって何する の?などなど)を探している方には,ニューズグループcomp.dcom.lans. ethernetに定期的に投稿されている,Ethernet-FAQを読むことを強くお 勧めします。以下のURLから入手できます: Ethernet FAQ <ftp://dorm.rutgers.edu/pub/novell/info_and_docs/Ethernet.FAQ> いわゆる`Ethenet-HomePage'も御覧になれます。URLは以下の通りです: Ethernet-HomePage <http://wwwhost.ots.utexas.edu/ethernet/ethernet- home.html> 10.5. 協力者一覧 Ethernet-Howtoに(直接あるいは間接に)貢献してくださった方は,以下の 通りです(アルファベット順です): Ross Biro <bir7@leland.stanford.edu> Alan Cox <iialan@www.linux.org.uk> David C. Davies <davies@wanton.enet.dec.com> Bjorn Ekwall <bj0rn@blox.se> David Hinds <dhinds@allegro.stanford.edu> Michael Hipp <mhipp@student.uni-tuebingen.de> Mike Jagdis <jaggy@purplet.demon.co.uk> Duke Kamstra <kamstra@ccmail.west.smc.com> Russell Nelson <nelson@crynwr.com> Cameron Spitzer <camerons@NAD.3Com.com> Dave Roberts <david.roberts@amd.com> Glenn Talbott <gt@hprnd.rose.hp.com> 以上の方,およびここでは言及できなかった他のテスターの方々には大変 感謝しております。 [日本語版翻訳にあたっては,JFプロジェクトの方々に数々の御助言をいた だきました。どうもありがとうございました。] 10.6. 終わりに この文書に明らかなタイプミス,時代遅れな情報を見つけられた場合は, ぜひわたしたちにお教えください。[日本語版のミスについては訳者へ お願いします。]文書が大きくなってきたので,ミスを見落としやすく なっております。 ではよろしく, Paul Gortmaker, Paul.Gortmaker@anu.edu.au Donald J. Becker, becker@cesdis.gsfc.nasa.gov [嶋崎 保任,yamatori@ab11.yamanashi.ac.jp]