既存のドライバがお使いのカードをサポートしているとすると、必要なことは
/etc/pcmcia/config
にエントリを追加して、cardmgr
に認識
の仕方とこのカードにはどのドライバをリンクする必要があるのかを教えてや
ることだけです。設定ファイルのフォーマットの詳細については
pcmcia
のオンラインマニュアルをご覧ください。知らないカードが挿入
されると、cardmgr
は通常、設定エントリの作成に利用できるような何
らかの認証情報をシステムログに記録します。この情報は
``cardctl ident
'' コマンドでも表示することができます。
以下の例は、cardmgr がサポートしていないカードについて
/usr/adm/messages
に残した記録です。
cardmgr[460]: unsupported card in socket 1
cardmgr[460]: product info: "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"
cardmgr[460]: manfid: 0x0101, 0x1234 function: 2 (serial)
/etc/pcmcia/config
の該当エントリは以下のようになっていると思
います:
card "Megahertz XJ2288 V.34 Fax Modem"
version "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"
bind "serial_cs"
プロダクト ID コードがもっと短くて以下のようになっているかもしれません:
card "Megahertz XJ2288 V.34 Fax Modem"
manfid 0x0101, 0x1234
bind "serial_cs"
バージョン番号のように、正確にマッチする必要がない文字列については ``*'' を使ったマッチングを行うことができます。新しい設定エントリを作成 する時には、大文字・小文字の区別や空白文字などを含めて文字列を正確に コピーしてください。また、設定エントリの文字列の数は必ず、ログファイル に記録される文字列の数と同じになるようにしてください。
あるカードに対してどんなドライバでも指定することはできますが、それが
闇雲に突っ込んでいるだけであれば、あまり意味があるとは言えません。
お使いのカードを既存のドライバがサポートしていることに運良く気づくかも
しれません。しかし、もっとも起こりそうな結果はドライバが動作しないこと
で、その際にはシステムが固まってしまうといった不運なおまけも伴うかもし
れません。適切なカードの探査を行う通常のドライバの大部分とは異なり、
PCMCIA デバイスの探査は cardmgr
が行い、ドライバ自体はデバイスと
通信する前にそのデバイスが正しいかどうかの確認をあまり行わないことがあ
ります。
/etc/pcmcia/config
ファイルを編集したら、以下のコマンドを使っ
て cardmgr
にファイルを読み込み直させることができます:
kill -HUP `cat /var/run/cardmgr.pid`
新しいカードのエントリを設定したら、私がこれを標準の設定ファイルに取り 込めるように、そのコピーを私まで送ってください。
始める前に: この手続きが使えるのは、単純なイーサネットカードの場合だけ です。マルチファンクションカード(つまりイーサネットとモデムのコンボカード) には 2 つの機能をまとめるための複雑な追加のレイヤがあるため、一般的には カードのベンダーが用意した何らかの設定情報を使う以外には対応する方法が ありません。以下の手続きをマルチファンクションカードで試しても意味がな いでしょう。
まず、対象のカードが既に cardmgr
に認識されていることを確かめます。
SUPPORTED.CARDS
に書かれていないカードでも、実際には対応されてい
るカードの OEM 品ということがあります。このようなカードを見つけたら、
私までお知らせください。SUPPORTED.CARDS
のリストに追加します。
カードが認識されていなければ、
識別されないカードの設定の節の手順に従って
そのカード用の設定エントリを作り、pcnet_cs
ドライバに割り当ててく
ださい。それから cardmgr
を再起動し、修正した設定ファイルを使うよ
うにします。
pcnet_cs
ドライバが、お使いのカードのハードウェアイーサネット
アドレスを調べられないというメッセージを出力した場合には、新しい
設定エントリを修正して、そのカードをメモリカードのドライバ
(memory_cs
)に割り当ててください。そして cardmgr
を再起動して
書き換えた設定ファイルを読み込ませます。ここで知っている必要があるのは、
お使いのカードのハードウェアイーサネットアドレスだけです。このアドレス
は 2 桁の 16 進数を 6 つ並べたもので、多くの場合、カード自身に記載され
ています。カードに記載されていなければ、DOS 用のドライバを使ってアドレス
を表示させるとよいでしょう。何とかしてこのアドレスを調べたら、次のコマ
ンドを実行してください:
dd if=/dev/mem0a count=20 | od -Ax -t x1
そして、このダンプ出力の中からアドレスに相当する部分を探します。意味が
あるのは偶数バイトだけなので、ダンプ中の奇数バイトは無視してください。
このアドレスの最初のバイトへのオフセットを 16 進値で記録してください。
さて、ここで clients/pcnet_cs.c
ファイルを編集し、
hw_info
構造体を探します。この構造体を使って、対象となるカード用
の新しいエントリを作る必要があります。最初のフィールドがメモリの
オフセット値です。次の 3 つのフィールドは、ハードウェアアドレスの最初
の 3 バイトです。最後のフィールドは、カード特有の機能を表す何らかのフ
ラグです。このフラグの値はまずは 0 にしておきます。
pcnet_cs.c
の編集が終わったら、新しいモジュールのコンパイルと
インストールを行います。そして再び /etc/pcmcia/config
を編集
し、カードの割り当てを memory_cs
から pcnet_cs
に変更します。
最後に設定ファイルの再読み込みを手順通りに行えば、全ての設定が行われる
はずです。新しく作成した hw_info
と設定エントリは私まで送ってくだ
さい。
カードのハードウェアダンプが 16 進ダンプ出力の中に無かった場合は、最後
の手段として、pcnet_cs
モジュールが初期化される時に「直に書く」方法
もあります。/etc/pcmcia/config.opts
を編集して、hw_addr=
を以下のように追加してください:
module "pcnet_cs" opts "hw_addr=0x00,0x80,0xc8,0x01,0x02,0x03"
当然ながら、あなた自身が使っているカードのハードウェアアドレスを適切な 位置に書いてください。これでも駄目だったら、そのカードが本当に NE2000 互換ということはまずありません。実際、最初の 2 つの方法で扱えないカー ドを私は全く知りません。
Compaq Aero を含めたいくつかのラップトップ機で使われている PCMCIA フロッピーインタフェースは、現在の PCMCIA カードサービスではまだ サポートされていません。Aero のフロッピーへの対応の障害になっているの は、Aero ではフロッピーでも DMA を使えるように改造された独自の PCMCIA コントローラが使われていることです。DMA の制御がどのように行われている のかが正確に分からないと、Linux でも対応させようがありません。
Aero の場合、起動時にフロッピーアダプタカードが接続されていれば Aero の BIOS がカードを設定し、Linux からは通常のフロッピードライブとして 利用できます。PCMCIA ドライバがロードされた時、そのカードは既に設定済み であり、Linux のフロッピードライバと接続されていることが分かるはずです。 したがって、カードが挿さっているソケットは使われずに放っておかれます。 すなわち、起動時に FD カードが挿入されていればフロッピーデバイスは使用 可能ですが、そのカードは抜き挿しできないことに注意してください。