<!doctype linuxdoc system>

<article>

<title>Linux PCMCIA HOWTO
<author>David Hinds, <tt/dhinds@allegro.stanford.edu/
<date>v1.42, 1 June 1995(翻訳版:1995/06/15)
<trans> 小島三弘(<tt/kojima@komae.denken.or.jp/), 
播口陽一(<tt/hariguti@lsidiv.lawasak-steel.co.jp/)

<abstract>
この文書は Linux に PCMCIA Card をインストールして使う方法について説
明し、いくつかのしばしば問われる質問に答えています。この文書の最新
バージョンは <tt/cb-iris.stanford.edu/ の <tt>/pub/pcmcia/doc</tt>
ディレクトリにあります。
</abstract>

<toc>

<sect>概要と必要なハードウェア

<sect1>イントロダクション

<p>
Linux 用のカードサービス・システムは PCMCIA をサポートするためのソフト
ウエア一式を揃えたものです。PCMCIA カードを利用するアプリケーションプ
ログラムとのインターフェースを提供する動的にロード可能なカーネルモジュー
ル、それぞれのカード用のクライアントプログラム、カードの着脱に反応する
カードマネージャー・デーモンなどが含まれています。カードマネージャー・
デーモンは必要に応じてドライバをロードしたりアンロードする機能を持って
おり、PCMCIA カードの「活線挿抜(hot swapping)」も可能で、いつでもカー
ドを着脱することができます。

これはベータ・テスト段階のソフトウェアです。多分バグがあるでしょうし、
利用の際には注意も必要です。問題を報告してもらえば、全力で修正するよう
にしますが、報告してくれないと問題そのものを知ることができません。あ
なたがこのプログラムを使うなら、良い事でも悪い事でも結構ですから、感想
を教えてくださるように希望します。

もし、この文書について改善点があればぜひ教えてください
(<tt/dhinds@allegro.stanford.edu/) 

&lsqb;訳注 : 日本語版については <tt/kojima@komae.denken.or.jp/ までお
願いします。&rsqb;

<sect1> 著作権の表示と免責事項

<p>
Copyright (c) 1995 David A. Hinds

この文書は私の事前の同意なしにあらゆる形で複製、再配布できます。この著
作権の表示と完全な文書へのポインタを示せば、この文書の一部を再配布する
ことも可能です。特に、私の事前の同意なしに商的な配布することも可能です
が、そのような利用に際しては連絡してくれるように希望します。

この文章は、著作権表示がそのまま示される限り、どのような言語に翻訳す
ることも可能です。

この文書にはいかなる保証もありません。この文書にある情報はあなた自身の
責任において利用してください。

Copyright (c) 1995 David A. Hinds

This document may be reproduced or distributed in any form without my
prior permission.  Parts of this document may be distributed, provided
that this copyright message and a pointer to the complete document are
included.  Specifically, it may be included in commercial
distributions without my prior consent.  However, I would like to be
informed of such usage.

This document may be translated into any language, provided this
copyright statement is left intact.

This document is provided ``as is'', with no explicit or implied
warranties.  Use the information in this document at your own risk.


<sect1>最新のバージョンは？どこで入手できるの？<label id="where">

<p>
カードサービス・システムの最新バージョンは 2.6.2 です。

最新バージョンは常に <tt/cb-iris.stanford.edu/ の <tt>/pub/pcmcia</tt>
 ディレクトリにあります。複数のバージョンが同一のディレクトリに存在す
ることもありますが、その場合、古いものの方がより安定しているでしょう。
新しいバージョンには実験的なコードがより多く含まれています。どちらのバー
ジョンを使うかを決めるのはあなた自身です。バージョンごとの重要な
違いについては、<tt/CHANGES/ ファイルに要約しておいたので参考にしてく
ださい。

<tt/cb-iris.stanford.edu/ は <tt/sunsite.unc.edu/ の
<tt>/pub/Linux/kernel/pcmcia</tt>にミラーされています。また、
<tt/tsx-11.mit.edu/ の <tt>/pub/linux/laptops/pcmcia/drivers</tt> にも
随時主要なリリースをアップロードするつもりです。

<sect1>サポートされるシステムは？
<p>
このプログラムはほとんど全ての Linux が動くラップトップ機で使えるは
ずです。Intel, Cirrus, Vadem, VLSI, Ricoh, Databook といった一般的な PCMCIA
コントローラーは全てサポートしています。IBM や Toshiba で使われて
いる専用コントローラーもサポートしています。PCMCIA カードアダプタ
を持つデスクトップ機で使っている人もいます。

いくつかの Hyundai(現代)製のラップトップ機で使われている Motorola の 
6AHC05GA コントローラーはサポートされていません。HP Omnibook で使われ
ている専用の PCMCIA コンローラーもサポートされていません。

<sect1>サポートされている PCMCIA カードは？
<p>
最新版では、さまざまなイーサネットカード用のドライバ、モデムカードや
シリアルポートカード用のドライバ、SCSI アダプタ用のドライバ、ほとんど
の SRAM カードといくつかの Flash カードで使えるドライバが入っています。
附属の <tt/SUPPORTED.CARDS/ ファイルに、現時点までに少なくとも一つの実
際のシステムで動いたカードが全て記録されています。

リストにないカードが動くかどうかはカードの種類によります。モデム
カードは全て現存のドライバで動くはずです。ネットワークカードについては、
サポートされているカードの OEM 版なら動くかも知れません。その他のタイ
プの IO カード(ハードディスク、サウンドカード等)は誰かが専用のドライバ
を書かない限り動かないでしょう。

<sect1>いつになったら X というカードがサポートされるんでしょう？
<p>
残念ながら、メーカーの人たちは私がデバイスドライバを書いてもお金を払っ
てくれません。だから、もしあなたのお気にいりのカード用のドライバが欲し
ければ、多分、あなた自身で何とかしなければならないでしょう。
<tt/SUPPORTED.CARDS/ の中には、現在開発が進行中のカードも記載されてい
ます。私もできるかぎりのお手伝いはします。

<sect1>メーリング・リスト
<p>
私は Linux 用 PCMCIA ユーザーのデータベースとメーリング・リストを運営
しています。新しい PCMCIA パッケージのリリースに関するアナウンスはこの
メーリングリストに流します。メーリングリストに参加したければ、以下の内
容を含むメールを私宛に送ってください。
<itemize>
<item>名前と e-mail アドレス
<item>使っているラップトップ機
<item><tt/probe/ コマンドが報告する PCMCIA コントローラーの種類
<item>使っている PCMCIA カード
<item>何か特殊な設定:コンパイル時のオプション、irq やポートの設定、
<tt>/etc/pcmcia/config</tt> のエントリー, <tt/insmod/ オプション、など
など
</itemize>

<sect>コンパイル、インストール、設定
<sect1>準備とカーネルの設定<label id="prereq"> 
<p>
カードサービス・システムの最新バージョンを使うには 1.2.8 以上のカーネ
ルが必要です。PCMCIA 使うためにカーネルにパッチをあてる必要はありませ
ん。モジュール・ユーティリティも新しいものが必要ですが、お手持ちの 
<tt/insmod/ のマニュアルページに、<tt/[symbol=value ...]/ という文法に
ついての説明があれば、十分新しい <tt/insmod/ です。

PCMCIA パッケージにはカーネルのソースを参照している部分があるので、コ
ンパイルする際にはコンパイル済のカーネルイメージだけでなく、カーネルの
ソースツリーそのものが必要です。

最新のカーネルのソースとパッチは、<tt/sunsite.unc.edu/ の
<tt>/pub/Linux/kernel/v1.2</tt> か <tt/tsx-11.mit.edu/ の
<tt>/pub/linux/sources/system/v1.2</tt> にあります。最新のモジュールユー
ティリテイも同じところにあり、<tt/modules.1.1.87.tgz/ というファイル名
になっています。

カーネルを設定する際、PCMCIA のイーサネットカードを使うつもりなら、
``networking support'' という問を &lsqb;Y&rsqb; にして、``pocket and
portable adapters'' を含む一般の Linux 用のネットワークカードドライバは
全て使わないように設定します。PCMCIA ネットワークカードは必要なときに
ロードされるモジュールとして提供されています。3Com の 3c589 ドライバ以
外の全ての PCMCIAネットワークカードドライバは Linux カーネルの一部であ
る<tt/8390.o/ ドライバモジュールを利用しています。

SLIP や PPP, PLIP を使う場合、これらを使うようにカーネルを設定するか、
これらのドライバの実行時ロードモジュールを使う必要があります。残念なが
らカーネルの設定プロセスに問題があり、実行時ロードモジュール用の細かな
設定(例えば SLIP の圧縮)ができません。そのため、必要ならば SLIP を(モ
ジュールではなく)カーネルに組みこんでしまう方がいいでしょう。

もし PCMCIA SCSI アダプタを使うなら、カーネルの設定時に CONFIG_SCSI を
設定します。使うつもりの SCSI デバイス(SCSI ディスク、テープ、cdrom、 
generic)用のドライバも設定します。特定のホストアダプタ用の低レベルドラ
イバ(AHA152x, futuredomain 等)は使わないように設定します。

PCMCIA モジュールをコンパイルする際には、カーネルのバージョンを記録し
たファイル <tt/versions.h/ が必要です。このファイルはカーネルの構築時
に最初に作られ、最後に削除されます。``<tt/make modules/'' すれば、
<tt/version.h/ は再度作られますが、Linux のソースツリーの一番上で 
``<tt>make include/linux/version.h</tt>'' を実行して明示的に作ることも
可能です。

<sect1>インストール
<p>
バージョン 2.4.8 からは X-Window System 上で動く <tt/cardinfo/ という PCMCIA 
カードの状態表示用プログラムが附属しています。<tt/cardinfo/ は Forms
Library と呼ばれるパブリックドメインのユーザーインターフェース・ツール
キットを使っているので、<tt/cardinfo/ をインストールするためには Forms
Library が必要になります。Forms Library のバイナリは 
<tt/cb-iris.stanford.edu/ の 
<tt>/pub/pcmcia/extras/bxform-0.61.tgz</tt> です。このパッケージの 
Makefile には小さなバグがあり、``<tt/ln -s/'' で始まっている行の最後に
は ``<tt/; fi/'' を付け加える必要があります。

<tt/pcmcia-cs-2.6.2.tgz/ を <tt>/usr/src</tt> などの適切なディレク
トリで展開します。

<tt/make.options/ にある設定があなたのマシンの設定にあっているか確認し
ます。``<tt/make prereq/'' とすれば、システムの設定がカードサービス・
システムをインストールするのに適切かどうかチェックをします。

``<tt/make all/''、引き続いて ``<tt/make install/'' を実行すれば、カー
ネルモジュールとユーティリティプログラムがコンパイル、インストールされ
ます。カーネルモジュールは<tt>/lib/modules/&lt;version&gt;/pcmcia
</tt>
 ディレクトリにインストールされます。<tt/cardmgr/ と <tt/cardctl/ プロ
グラムは<tt>/sbin/</tt> にインストールされます。<tt/cardinfo/ は
<tt>/usr/bin/X11</tt> にインストールされます。

設定ファイルは <tt>/etc/pcmcia</tt> ディレクトリに保存されます: 
もし、以前のバージョンをインストールしていれば、新しい設定ファイルは
``<tt/.N/'' の拡張子が付いたファイルとしてインストールされます。自分
で設定ファイルを置きかえるなり書きかえるなりしてください。

もしどのような PCMCIA コントローラー・チップが使われているかわからなければ、
<tt>cardmgr/</tt> サブディレクトリにある<tt/probe/ コマンドで調べるこ
とができます。コントローラーには大きく Databook TCIC-2 と Intel i82365SL
 互換チップの2 つのタイプがあります。

<tt/cardmgr/ というユーザーレベルのデーモンがカードの着脱を管理してい
ます。このプログラムは、機能的には初期の PCMCIA リリースに入っていた
Barry Jaspan 作の<tt/pcmciad/ とよく似ています。<tt/cardmgr/ は
<tt>/etc/pcmcia/config</tt>から既知のPCMCIA カードの設定について読みこ
みます。このファイルには PCMCIA デバイスを使うために割りあてるリソース
についても記述するので、あなたのシステムにあわせて変更する必要があるか
も知れません。このファイルについての詳細は<tt/pcmcia/ の man ページを
ご覧ください。

<tt>/etc/rc.d</tt> ディレクトリにインストールされる rc.pcmcia というスクリプト
は PCMCIA システムの起動と終了を管理します。``<tt/make install-etc/'' 
を実行すれば、<tt/probe/ コマンドを使ってあなたのコンピュータが使って
いるコントローラーの種類を識別し、<tt/rc.pcmcia/ を適切に修正します。
<tt>/etc/rc.d/rc.pcmcia</tt> を起動するために、システムのスタートアッ
プファイルである <tt>/etc/rc.d/rc.M</tt> に以下の 1 行を加えて下さい:

<tscreen><verb>
/etc/rc.d/rc.pcmcia start
</verb></tscreen>

ごくまれに <tt/probe/ コマンドで自動的にコントローラーを設定できないこ
とがあります。Tadpole P1000 を始めとするいくつかの PCI ベースのラップ
トップ機は Cirrus の特殊な PCI-PCMCIA ブリッジチップを使っているため、
<tt/probe/ コマンドで検出できません。もし、この種のシステムを利用され
ているならば、<tt/rc.pcmcia/ を手動でインストールする必要があります。

<sect1>各マシンごとの設定オプション<label id="timing">
<p>
カードサービス・システムは他の標準的なデバイスが既に使っている IO ポー
トと割り込みは自動的に回避しようとします。この機能は、Linux 用のドライ
バが存在する全てのデバイス --シリアルポートやパラレルポート、IDE ドラ
イブ、サウンドカードなど -- で働くはずです。もし Linux でサポートされ
ていないデバイスの場合、そのデバイスが利用している IO ポートなどは
<tt>/etc/pcmcia/config</tt> で、明示的に使わないように設定する必要があ
るかも知れません。
<itemize>
<item>
AMS Soundpro の場合、irq 10 を使わないように設定します。
<item>
BMX 486DX2-66 の場合、irq 5 と 9 を使わないように設定します。
<item>
NEC Versa M では irq 9 を使わないようにします。
<item>
NEC Versa P/75 では 5 と 9
<item>
NEC Versa S では irq 9 と 12
<item>
ProStar 9200, Altima Virage, Acquiline Hurricane DX4-100 では irq 5 と 
IO ポートの 0x330-0x35f を使わないように設定します。メモリの 0xd8000 -
0xdffff を使うように指定する必要があるかも知れません。
<item>
Toshiba T4900 CT では irq 5 と IO port 0x2e0-0x2e8, 0x330-0x338 を使用
しないように設定します。
<item>
Twinhead 5100, HP 4000, Sharp PC-8700, PC-8900 では irq 9(サウンド用)
と irq 12 を除外します。
<item>
MPC 800 シリーズでは CD-ROM 用に irq 5 と 0x300-0x30f を除外します。
</itemize>

ある種の PCMCIA コントローラーは、特定のシステムでしか使えない、あるい
は特定のシステムでは使えないような、特殊な機能を持っている場合がありま
す。この種の機能が使えるか否かは、ソケットドライバには検知することがで
きません。使っているドライバの man ページをチェックして、どのようなオ
プション機能が利用できるか調べてみてください。

低レベルのソケットドライバ、<tt/tcic/ と <tt/i82365/ はバスタイミング
を設定するためのパラメータを多数持っており、特に高速なプロセッサを使っ
たシステムではそれらを調整する必要があるかも知れません。タイミングが原
因となる問題としては、カードが認識されない、負荷が高いとハングアップす
る、エラーがよく起きる、パフォーマンスがあがらない、などがあります。詳
細については関連のマニュアルを見てもらうこととして、ここでは簡単な説明
にとどめます。

<itemize>
<item>
Cirrus 製のコントローラーにはタイミングを設定するためのパラメーターが
たくさんあります。そのうち、最も重要なものは <tt/freq_bypass/ フラグで、
このフラグを設定することで、PCMCIA のバスクロックを全てのオペレーショ
ンについて何分の一かに減速させます。
<!-- 
Cirrus controllers have numerous configurable timing parameters.  The
most important is the <tt/freq_bypass/ flag which changes the
multiplier for the PCMCIA bus clock to slow down all operations.
-->
<item>
Cirrus PD6729 PCI コントローラーには <tt/fast_pci/ というフラグがあり
ます。もし PCI バスのスピードが 25MHz 以上の場合、このフラグをセットす
る必要があります。

<item>
Vadem VG-468 コントローラーと Databook TCIC-2 コントローラーには 
<tt/async_clock/ フラグがあり、PCMCIA のバスとホストのバスのサイクルの
相対的なクロック周波数を変更します。このフラグをセットすれば、いくつか
のオペレーションについて余分のウエイトサイクルが入ります。

<item>
<tt/pcmcia_core/ モジュールには <tt/cis_speed/ パラメータがあり、
PCMCIA カードのカード情報領域(CIS:Card Information Structure)にアクセ
スするスピードを変化させます。バスクロックの速いシステムではこのパラメー
タを多くする(すなわち、カードへのアクセス速度を遅くする)といいかも知れ
ません。
</itemize>

これら全てのオプションは <tt>/etc/rc.d/rc.pcmcia</tt> ファイルを修正す
ることで設定できます。例えば、

<tscreen><verb>
# i82365 または tcic の場合
PCIC=i82365
# ソケットドライバのタイミングに関するパラメータ
OPTS="async_clock=1"
</verb></tscreen>

NEC Versa M など、Cirrus 製のコントローラーを使っているシステムでは、
BIOS が起動時にPCMCIA コントローラーを特別のサスペンドモードに設定して
します。そのため、<tt/probe/ コマンドが PCMCIA コントローラーを検出で
きなくなります。このような場合、<tt>/etc/rc.d/rc.pcmcia</tt> を手で以
下のように修正します。

<tscreen><verb>
# i82365 か tcic の場合
PCIC=i82365
# ソケットドライバのタイミングに関するパラメータ
OPTS="wakeup=1"
</verb></tscreen>

ARM Pentium-90 か Midwest Micro Soundbook Plus 製のラップトップを使っ
ているなら、``<tt/freq_bypass=1 cmd_time=8/'' として、PCMCIA のバスサ
イクルを遅くします。この設定は他の PCI 対応でない Cirrus チップ(PD672x 
シリーズなど)を使ってる高速なシステムでも利用できます。

<sect1>PCMCIA ネットワークカードを使い NFS 経由で Linux をインストールできるでしょうか？
<p>
Slackware 2.2 をベースに、PCMCIA をサポートした 1.44MB のブート FD と
ルート FD を作りました。<tt/pcboot14.gz/ と <tt/pcroot14.gz/というファ
イル名で<tt/cb-iris.stanford.edu/ と <tt/sunsite.unc.edu/にあります
(<ref id="where" name="1.3"> 節を参照してください)。root FD には 
<tt/cardmgr/, 基本的な PCMCIA モジュール、全てのネットワークドライバが
入っています。これらを使うには Slackware のインストールに慣れているほ
うがいいでしょう。PCMCIAドライバは自動的にロードされ、インストールの手
順は、PCMCIA でないネットワークカードを用いた場合と同じです。ただし、
Slackware のルート FDにはネットワークで使うユーザー用のプログラム
(<tt/ftp/, <tt/telnet/等)が一切入っていないことに注意してください。こ
の FD に入っているネットワーク用のコマンドはNFS マウントするのに必要な
ものだけです。

もしこれらの FD を IBM Thinkpad で使う場合、pcboot FD から起
動する際、lilo に ``floppy=thinkpad'' というオプションを指定します。

インストールが終了すると、PCMCIA を使わない設定の root ディスク &lsqb;
訳注 root partition のこと&rsqb; ができあがります。ブート FD とルート 
FD から必要なプログラムをハードディスクにコピーして、ネットワークを使
えるようにすることも不可能ではありませんが、手動で全てを正しい場所に置
くことは少々トリッキーな手段が必要です。新しくインストールした Linux 
をハードディスクから起動して、Slackware のブート FD を <tt>/mnt</tt> 
にマウントし、

<!-- 原文では
cp /mnt/vmlinuz /linuz
rootflags /vmlinuz 1
lilo
となってるけど、/linuz ってことはないですよね
-->

<tscreen>
<verb>
cp /mnt/vmlinuz /vmlinuz
rootflags /vmlinuz 1
lilo
</verb></tscreen>

とします。次に Slackware のルート FD を /mnt にマウントして、

<tscreen><verb>
cp /mnt/sbin/cardmgr /sbin
(cd /mnt ; tar cf - etc/pcmcia lib/modules) | (cd / ; tar xf -)
</verb></tscreen>

とし、<tt>/etc/pcmcia/config</tt> を修正して、ネットワーク用カードドラ
イバに対する ``start'' と ``stop'' コマンドのコメントを外します。
<tt>/etc/pcmcia/ntwork.sample</tt> を <tt>/etc/pcmcia/network</tt> に 名前
を変えて、あなたのシステムの設定に合うように修正します。Slackware のルー
ト FD にある <tt>/etc/rc.local</tt> のように、<tt>/etc/rc.d/rc.M</tt> 
を手で修正して、PCMCIA の起動ファイルを自動的に実行するようにしておき
ましょう。

インストール元に新しいソースファイル一式があるなら、NFS マウントし
ている間に最新のカーネルと pcmcia のソース、モジュール・ユーティリティ
などを手元のハードディスクにコピーしておく手もあります。リブート後、新
しいカーネルをコンパイルして PCMCIA を通常の方法でインストールします。

Slackware の boot/root FD は多くのシステムで利用できるように設定されて
いますが、全ての状況に対応できるわけではありません。もし、これらの FD 
の PCMCIA の設定が問題を起したら、あらかじめ用意されているツールが皆無
なので解決は難しいでしょう。<tt/cardmgr/ が動いていると
<tt>/etc/stab</tt> に使用中のカードが記録されています。起動時に PCMCIA 
モジュールから出力されるメッセージは、あっという間にスクロールしてしま
うので読みとることは難しいでしょう。その場合、手で 
``<tt>/etc/rc.d/rc.pcmcia restart</tt>'' とやれば、有益な情報が得られ
るかも知れません。

pcboot/pcroot に用意した PCMCIA は、Slackware をインストールするためだ
けのものです；これらを使って PCMCIA 全体をソースからコンパイルしないで
済まそう、というのは賛成できません。pcboot/pcroot に入っている PCMCIA 
はあまり頻繁にバージョンアップしていませんし、重要な機能をいくつか欠い
ています。

<sect1>なぜ私のシステムはカードの装着に反応しないんでしょう？
<p>
たいてい、ソケットドライバ(<tt/i822365/ か <tt/tcic/) はカードの状態変
化を検出するために必要な割り込みを自動的に見つけます。しかし、いくつか
のインテル互換のコントローラー(例えば IBM ThinkPad が使っているCirrus 
のチップ)ではこの機能がうまく働きません。このような場合、<tt/i82365/ 
ドライバは他のデバイスが既に使っている割り込みを選択してしまうことがあ
ります。

<tt/i82365/ ドライバでは <tt/irq_mask/ オプションを使って、検出対象と
する割り込みを制限することができます。このオプションでマスクした割り込
みは PCMCIA カードが選ぶ割り込みの対象からも、カードの状態変化のモニタ
リングの対象からも外れます。<tt/tcic/ ドライバでは <tt/cs_irq/ オプショ
ンを使ってカードの脱着を監視する割り込みを明示的に指定できます。

もし使える割り込みが見つからなければ、呼出し(poll)モードで使うこともで
きます。<tt/i82365/ も <tt/tcic/ も <tt/poll_interval=100/ オプション
を受けつけ、1 秒に 1 度呼出しをかける設定にできます。

<sect>利用法と機能
<sect1>ちゃんと動いているか確認するには？
<p>
<tt/cardmgr/ デーモンは、通常、カードが挿入された時にビープ音を鳴らし
ます。そのビープ音の音色によって新しく挿入されたカードの状態を示します。
高いビープ音が 2 回した時は、カードはきちんと識別され、正しく設定され
たことを示します。高いビープ音と低いビープ音の場合は、カードは識別され
たものの何らかの理由で設定に失敗したことを示します。低いビープ音が一度
しかしなかった場合はカードの識別に失敗しています。

もし X を使っているのなら、きれいなグラフィック画面を使って 全ての 
PCMCIA ソケットの状態を表示する <tt/cardinfo/ プログラムも使えます。

全てのモジュールが正しくロードされれば、<tt/lsmd/ のコマンドは以下のよ
うになります。ただし、これはカードが装着されていない場合です。

<tscreen><verb>
Module:        #pages:  Used by:
ds                 2
i82365             2
pcmcia_core        6	[ds i82365]
</verb></tscreen>

PCMCIA のモジュールと <tt/cardmgr/ デーモンは状態の変化をシステムのロ
グファイルに記録します。通常、このファイルは 
<tt>/usr/adm/messages</tt> になっています。もし問題が起きれば、最初に
このファイルをチェックしましょう。バグレポートの際にもこのファイルの内
容を忘れずに含めてください。<tt/cardmgr/ は各ソケット毎のデバイスの現状を
<tt>/etc/stab</tt> にも記録しています。

<sect1>PCMCIA イーサネットカードの使い方は？
<p>
イーサネットカードが挿されたことを検出すれば、自動的に空いている最初の
インターフェースの名前、多分 ``eth0''、 に割りあてます。イーサネットカー
ドが装着されれば、<tt/cardmgr/ は自動的に <tt>/etc/pcmcia/network</tt> 
スクリプトを実行してインターフェースを設定しますので、あなたのローカル
なネットワークの設定はこの <tt>/etc/pcmcia/network</tt> で行う必要があ
ります。

PCMCIA イーサネットを <tt>/etc/rc.d/rc.inet1</tt> で設定してはいけませ
ん。というのも、このスクリプトが実行される時にカードがささっているかど
うかは分からないからです。<tt/rc.inet1/ のコマンドは loopback を定義し
ている部分以外は全てコメントアウトします。代りに 
<tt>/etc/pcmcia/network</tt> スクリプトにネットワーク関係の設定を行な
います。この<tt>/etc/pcmcia/network</tt> スクリプトはカードが装着され
た時にのみ実行されます。

<sect1>PCMCIA モデムカードの使い方は？
<p>
シリアル、あるいはモデムカードが挿されたことを検出すれば、自動的に最初
の空いているシリアルデバイススロットに割りつけます。通常、これは 
<tt>/dev/cua1</tt> か <tt>/dev/cua2</tt> ですが、あらかじめ用意されて
いるシリアルポートの数によって変ります。シリアルデバイスが装着された時
に実行されるデフォルトのスクリプトは<tt>/etc/pcmcia/serial</tt> で、こ
のスクリプトが適切なデバイス(<tt>/dev/cua1</tt> とか 
<tt>/dev/cua2</tt>)から<tt>/dev/modem</tt> にリンクを張ります。

もし一つ以上の PCMCIA モデムを使っているならば、<tt>/etc/stab</tt> か
<tt/cardinfo/ をチェックしてどのデバイスがモデムと対応しているか確認し
てください。

PCMCIA モデムカードを設定するのに <tt>/etc/rc.d/rc.serial</tt> を使っ
てはいけません。このスクリプトは抜き挿しをしないデバイスを設定するため
にのみ使うものです。モデムに対して何か設定をしたい場合は 
<tt>/etc/rc.d/rc.serial</tt> ではなく、<tt>/etc/pcmcia/serial</tt> で
設定してください。

<sect1>PCMCIA SCSI カードの使い方は？
<p>
ラップトップ機の電源を入れる前、あるいはアダプタカードを挿しこむ前に、
 SCSI デバイスの電源を入れておき、アダプタカードが設定される時に
は SCSI バスが正しくターミネートされるようにしておいてください。

新たに SCSI ホストアダプタが検出された時、SCSI ドライバがデバイスを検
出しに行きます。<tt>/usr/adm/messages</tt> をチェックして、使っている
デバイスが正しく検出されているか確認してください。検出された SCSI デバ
イスは自動的に SCSI デバイスファイルに割りあてられます。すなわち、最初
に見つかった SCSI ディスクは <tt>/dev/sda</tt>、最初の SCSI テープは 
<tt>/dev/st0</tt>、 最初の CDROM は <tt>/dev/scd0</tt>、などとなります。

SCSI アダプタを抜く時は注意してください。カードを抜くまえに、全ての 
SCSI デバイスがクローズされ、アンマウントされていることを確認してくだ
さい。現在のところ、全ての SCSI デバイスは SCSI アダプタが挿入される前
に電源オンになっており、アダプタを抜く、あるいは/また、ラップトップ機
の電源を落すまでは継がったままにしておく必要があります。

さらに、Roger Pao (<tt/rpao@paonet.org/) によると、

デバイス側と PCMCIA SCSI カード側の双方のターミネーターに充分な電流を
供給するだけの余裕を持つデバイスが接続されていることを確認してください。
ほとんどの PCMCIA SCSI カードは SCSI バスのターミネーターにも自分自身
のターミネーターにも電流を供給しないので、カードの代りにターミネーター
に電流を供給する機器が接続されていることが重要です。また、カード以外か
ら電流を供給すればラップトップ機のバッテリーも助かるし、ラップトップ機
を SCSI バスから遮断するにも役立ちます。

&lsqb;訳注：以下は日本では無意味でしょう。&rsqb;

お薦めは、APS SCSI Sentry 2(&dollar;100) という外付けのセントロニクス
タイプのアクティブターミネーターブロックです(一端がオス、他端がメスになっ
ています)。このターミネーターは外部から電流の供給を受けて(115/230VAC)
自身と PCMCIA SCSI カードのターミネーター(アクティブでもパッシブでも)
に電流を供給します(5VDC 2.0A)。より詳しくは 800-334-7550 に電話して、
APS のテクニカルサポートに聞いてください。

<sect1>PCMCIA メモリカードの使い方は？
<p>
デフォルトのメモリカード起動用のスクリプトは、カードの最初の共通メモリ
(common memory)と属性メモリ(attribute memory)領域にアクセスするために、
ブロックデバイスとキャラクタデバイスを作ります。詳しくはマニュアルを見
てほしいんですが、多分使うであろうデバイスは <tt>/dev/mem0c</tt>(キャ
ラクタデバイス)か<tt>/dev/mem0b</tt>(ブロックデバイス)になるはずです。
ブロックデバイスはディスクのように(ファイルシステムを作ったりマウント
したり)使えます。キャラクタデバイスは "raw" モードでメモリの好きな場所
を読み書きできます。

<!--  メモリカードって知らないんだけど、用語は合ってます？(共通メモリ、 
      属性メモリ等)
The default memory card startup script will create block and character
devices for accessing a card's first common memory and attribute
memory regions.  Check the man pages for all the details, but the
devices you'll probably be using will be <tt>/dev/mem0c</tt>
(character device) or <tt>/dev/mem0b</tt> (block device).  The
block device is used for disk-like access (creating and mounting
filesystems, etc).  The character device is for "raw" reads and writes
at arbitrary locations.
-->

フラッシュメモリカードを通常のディスクのようなブロックデバイスとして利
用するためには、まずフラッシュメモリ変換層(``flash translation
layer'') を<tt/ftl_format/ コマンドで作らなければなりません。

<!-- フラッシュメモリも知らない ^^;
To use a flash memory card as an ordinary disk-like block device,
first create a ``flash translation layer'' partition on the device
with the <tt/ftl_format/ command:
-->

<tscreen><verb>
ftl_format -i /dev/mem0c
</verb></tscreen>

このコマンドはメモリカードの ``raw''インタフェースを使ってカードにアク
セスすることに注意してください。いったんフォーマットしてしまえば、カー
ドは普通のブロックデバイスとして <tt/ftl_cs/ ドライバ経由で使えます。
例えば：

<tscreen><verb>
mke2fs /dev/ftl0
mount -t ext2 /dev/ftl0 /mnt
</verb></tscreen>

のようにして普通のディスクと同様にフォーマット、マウントできます。

<sect1>新しいカードをどのように <tt/cardmgr/ に認識させれる方法は？<label id="new-card">
<p>
もし使おうとしているカードが既存のドライバでサポートされているものなら
ば、必要なことは <tt>/etc/pcmcia/config</tt> に必要なエントリ
を加えて <tt/cardmgr/ がカードを識別し、必要なドライバをリンクできるよ
うにしてやるだけです。
config ファイルのフォーマットの詳細については 
<tt/pcmcia/ の man ページをチェックしてください。未知のカードを装
着すると、<tt/cardmgr/ は識別に必要な情報を <tt>/usr/adm/messages</tt>
に記録するので、それを手がかりに必要なエントリーを作ることができるでしょ
う。

サポートされていないカードを装着した場合、<tt/cardmgr/ は
<tt>/usr/adm/messages</tt> にこんな記録を残します。

<tscreen><verb>
cardmgr[460]: unsupported card in socket 1
cardmgr[460]: version info: "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"
</verb></tscreen>

このカードのための <tt>/etc/pcmcia/config</tt> のエントリーはこのよう
なものになります。

<tscreen><verb>
card "Megahertz XJ2288 V.34 Fax Modem"
  version "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"
  bind "serial_cs"
</verb></tscreen>

文字列のうち、バージョンナンバーのように正確にマッチしなくてもいい部分
には ``*'' を使うこともできます。config に新しいエントリーを追加する時
は、文字列を正しくコピーするように注意してください。大文字と小文字や空
白も正しくコピーしてください。また、config ファイルのエントリーには 
log ファイルに残されたものと同じ数の文字列があることを確認してください。

<tt>/etc/pcmcia/config</tt> を修正した後、以下のコマンドで 
<tt/cardmgr/ に HUP シグナルを送り、config ファイルを再ロードさせます。

<tscreen><verb>
kill -HUP `cat /var/run/cardmgr.pid`
</verb></tscreen>

新しいカードのエントリーを作った時には、ぜひそのコピーを私に送ってくだ
さい。次の <tt/sample.config/ にはそのエントリーも含めたいと思います。

<sect1>デバイスに利用される割り込みやポートはどのようにすればコントロールできますか？
<p>
理論的には、2 つのデバイスが同じ割り込みを使わない限り、どの割り込みが
どのデバイスに割りあてられても問題にはならないはずです。
<tt>/etc/pcmcia/config</tt> ファイルの最初には PCMCIA 以外のデバイスが
利用する割り込みを PCMCIA では使わないようにする項があります。

<tt/ibmcc_cs/, <tt/de650_cs/, <tt/3c589_cs/, <tt/serial_cs/ ドライバに
は <tt/irq_mask/ と呼ばれるパラメータがあり、どの割り込みを利用するか
をコントロールすることができます。iqr_mask の各ビットはそれぞれ一本の
割り込み線に対応しています(訳注: 0 が mask, 1 が unmask です): bit 0
は irq 0 、bit 1 は irq 1、以下同様に対応しています。
    
例えば 0x1100 というマスクは irq8 と irq12 を利用可能にします。ある特
定の割り込みのみを使うようにしたい場合、irq_mask には対応する1 ビットの
み 1 を立てた値をセットします。これらのオプションは 
<tt>/etc/pcmcia/config</tt> ファイルで設定するのがいいでしょう。例えば、

<tscreen><verb>
device "serial_cs"
  module "serial_cs" opts "irq_mask=0x1100"
  ...
</verb></tscreen>

と設定すれば、シリアルドライバは irq 8 と irq 12 のみを使うようになり
ます。カードサービス・システムでは、既に他のデバイスが使っている割り込
みは使いませんし、config ファイルで除外された割り込みは使わないことに
注意してください。

特定の PCMCIA カードが特定の I/O アドレスを使うように直接指定する方法
はありません。<tt>/etc/pcmcia/config</tt> ファイルでは全ての PCMCIA デ
バイスで利用可能なポートの範囲を指定します。

<tt>/etc/pcmcia/config</tt> を修正した後、``<tt/kill -HUP/'' を使って
<tt/cardmgr/ を再起動してください。

<sect1>PCMCIA カードを着脱するのに安全なタイミングは？
<p>理論的には、PCMCIA カードはいつでも着脱可能です。しかし、アプリケー
ションプログラムがそのカードを使っている時には抜かない方が無難です。
1.1.77 以前のカーネルでは、serial/modem カードが抜かれた時にハングアッ
プしてしまうことがありましたが、現在では修正されています。

<sect1>PCMCIA ドライバをアンロードする方法は？
<p>
PCMCIA 全体をアンロードするには、<tt/rc.pcmcia/ スクリプトを

<tscreen><verb>
/etc/rc.d/rc.pcmcia stop
</verb></tscreen>

として起動します。このスクリプトの実行には数秒間かかります。これは、
このスクリプトが、全てのクライアント・ドライバに対して正常にシャット
ダウンするだけの余裕をあたえるからです。もしその時点で使用中の 
PCMCIA ドライバがあると、シャットダウンは失敗します。

<sect1>カードサービス・システムはどのように suspend/resume を扱うの？
<p> 
APM(Advanced Power Management)パッケージをインストールしておけば、カー
ドサービス・システムも APM を利用することができます。Stephen Rothwell 
作のAPM パッケージはバージョン 0.5 が最新です。0.4 とは異なり、0.5では 
PCMCIA で使うための特別なパッチは必要ありません。利用可能なバージョン
の APM パッケージが見つかれば自動的に APM を使うように設定されます。

APM を使わない場合、PCMCIA カードを正しくシャットダウンして再起動する
には、ラップトップ機をサスペンドする前に ``<tt/cardctl suspend/'' し、
レジュームした後 ``<tt/cardctl resume/'' します。ただし、PCMCIA モデム
カードではこのようにしてもレジューム前の設定を復旧することはできません。
なぜなら、シリアルドライバはモデム操作用のパラメータをセーブしたりリス
トアしたりできないからです。

APM が不安定になるシステムもいくつか報告されています。もし APM と 
PCMCIA に関してトラブルが出た場合、バグを報告する前に、問題がどちらの
パッケージに由来するものか確認してみてください。

<sect1>PCMCIA カードを抜かずにカードの電源を切るにはどうすればいいですか？
<p> 
<tt/cardctl/ か <tt/cardinfo/ コマンドを使ってください。
``<tt/cardctl suspend &num;/'' (<tt/&num;/ はソケットの番号を表す整数
値)で、そのソケットをサスペンドして電源を切ります。同様に <tt/resume
&num;/ コマンドで以前の状態に復帰することができます。

<sect>特定のカードに関する問題

<sect1>なぜ私のモデムは動かないんでしょう？

<p>
これは漠然とした質問ですね。以下に簡単なトラブル回避策を示します
<itemize>
<item>
あなたのカードは modem として認識されていますか？
<tt>usr/adm/messages</tt> をチェックして <tt/cardmgr/ がカードを正
しく識別し、 <tt/serial_cs/ ドライバを起動しているか確認してください。
もし正しく識別されていない場合、<tt>/etc/pcmcia/config</tt> ファイル
に新しいエントリーを加える必要があるかもしれません。詳しくは <ref
id="new-card" name="3.2"> を見てください。

<item>
 serial_cs が modem を正しく設定していますか？もう一度、
<tt>/usr/adm/messages</tt> をチェックして serial_cs ドライバの出力を調
べてください。もし ``register_serial() failed'' というメッセージがあれ
ば、他のデバイスと I/O ポートが衝突している可能性があります。デバイス
が 8250 であると識別されている場合も I/O ポートが衝突している可能
性を示しています;ほとんどの新しい PCMCIA モデムは 16550A UART と識別される
はずです。もし使っている I/O ポートが他のデバイスと衝突している場合、
<tt>/etc/pcmcia/config</tt> を修正して、モデム用に割りあてられているポー
トを使わないようにしてみてください。

<item>
割り込みは衝突していませんか？もし <tt>/usr/adm/messagaes</tt> は正し
そうだけどモデムは動いていない、という場合、<tt/setserial/ コマンドを
使い、irq を 0 にしたら動くか確認してみてください。irq を 0 に設定すれ
ば、シリアルドライバは割り込みのかわりに、より遅い、「呼び出しモード
(polled mode)」を使うようになります。もしこれでうまく行くようなら、何
か別のデバイスがserial_cs が選んだ割り込みを使っている可能性があります。
この割り込みを使わないように/etc/pcmcia/config を設定してください。

<item>
モデムからの反応がきわめて遅いというのも割り込みが衝突している徴候のひ
とつです。

<item>問題が本当に PCMCIA に由来するものか確認してください。ベンダー製
のドライバを使って DOS なら動くか調べるのもいいでしょう。また、単純な接
続ができるようになるまで SLIP のような複雑な設定は試さないでください。
もし単純な接続はうまくいくが SLIP はだめ、という場合、問題は SLIP にあ
り、PCMCIAではありません。
</itemize>

<sect1>なぜ Megahertz モデムカードは時々動かなくなるんでしょう？
<p>
昔の PCMCIA ドライバでは、しばしば Megahertz のモデム、特に 2144 モデ
ル、を正しく初期化できませんでした。この問題は最近のバージョンでは解決
しています。

16550 タイプの UART を使っている新しい Megahertz の モデム
に関しての報告を受けとりました。それによると、モデムを

<tscreen><verb>
echo 'ATS=QV1X4&amp;C1&amp;D2S95=2W1&amp;K3S36=7S95=255' > /dev/modem
</verb></tscreen>

と設定しないと Linux の <tt/cu/ では使えないそうです。

この初期化の文字列は Megahertz の技術サポートから教えてもらったそうで
す。

<sect1>なぜ私のイーサネットカードは動かないの？

<p>
もう一つ、簡単なトラブル回避策を示します。
<itemize>
<item>
あなたのカードはイーサネットカードとして認識されていますか？
<tt>/usr/adm/messages</tt> をチェックして<tt/cardmgr/ がカードを正しく
認識し、ネットワークドライバを起動しているか確認してください。もしだめ
ならば、サポートされているカードと「互換」と称していてもあなたのカード
はまだ使えないのでしょう。これは、カードが「NE2000 互換」と称している
時によく起きるようです。

<item>
カードは正しく設定されていますか？もしサポートされているカードを使い、 
<tt/cardmgr/ に正しく認識されてるのにうまく動かない、という場合は、他
のデバイスと割り込みやポートの衝突が起きているのかもしれません。カード
が使っているリソースをチエックして (<tt>/usr/adm/messages</tt> を調べ
て)、カードが別の割り込みやポートを使うように 
<tt>/etc/pcmcia/config</tt> を設定し、問題となる割り込みやポートを使わ
ないようにします。

<item> Socket EA と 3Com 3c589 カードの場合、ドライバ・モジュールをロー
ドする際にトランシーバーのタイプ (10base2, 10baseT, AUI) を選択する必
要があります。 <tt>/usr/adm/messages</tt> に記録されているトランシーバー
の種類が実際の接続と適合しているか確認してください。

<!-- 
Socket EA って何でしょう？ 原文は以下の通り
With Socket EA and 3Com 3c589 cards, you need to pick the transceiver
type (10base2, 10baseT, AUI) when the driver module is loaded.  Make
sure that the transceiver type reported in <tt>/usr/adm/messages</tt>
matches your connection.
-->

<item>
Farallon EtherWave は3Com 3c589 を基にしていますが、独特のトランシーバー
を使っています。EtherWave は 10baseT タイプのコネクタを使っていますが、
3c589 が 10base2 モードに設定されていないと正しく動作しません。

<item>
問題が本当に PCMCIA にあるか確認してください。カードが DOS 上でベンダー
製のドライバで正しく動くか調べてみるのもいいでしょう。
<tt>/etc/pcmcia/network</tt> スクリプトの変更点をもう一度確認してくだ
さい。LAN との接続ケーブル、 10Base-T のコネクタ、ターミネーター、など
も確認してください。

<item>
もしカードは正しく設定されているものの、負荷の高い状態でときどきハング
アップしてしまう場合、ソケットドライバのタイミングを制御するパラメーター
を調整する必要があるかもしれません。<ref id="timing" name="2.3"> を参
考にしてください。

</itemize>

<sect1> 3c589 カードでトランシーバーの種類を選ぶには？
<p>
ドライバが自動的に10baseT で接続されているか 10base2 かを識別できれば
いいんのですが、どうすればそうできるのかわかりません。現時点では
<tt>/etc/pcmcia/config</tt> ファイルを修正して <tt/3c589_cs/ モジュー
ルの設定に <tt/if_ports=&num;/ というオプションを追加してください。よ
り詳しくは <tt/tc589_cs/ の man ページを見てください。ただし、
10base2(BSC, thin net, coax とも呼ばれています) を選ぶ場合は、
<tscreen><verb> 
module "3c589_cs" 
</verb>
</tscreen>
を
<tscreen><verb>
module "3c589_cs" opts "if_port=3"
</verb></tscreen>
と変更する必要があります。

<sect1>ネットワークの性能が悪いんですが、どうすればいいですか？
<p>
もし NE4100 か IBM CCAE アダプタを使っている場合は <tt/ibmcc_cs/ モジュー
ルの設定に <tt/mem_speed=&num;/ オプションを使って、メモリにアクセスす
る時間を増してみてください。このスピードを 1000(ナノセコンド)まで上げ
てみてください。

<!-- 原文では CCAE だけど、Credit Card Ethernet Adapter という気がする
If you have an NE4100 or IBM CCAE adapter, increase the memory access
time with the <tt/mem_speed=&num;/ option to the <tt/ibmcc_cs/ module
definition.  Try speeds of up to 1000 (in nanoseconds).
-->

その他のカードの場合ではソケットドライバのタイミングを制御するパラメー
タを変更すればいいかもしれません。どのようなパラメータが使えるかは、お
使いのソケットドライバ (<tt/i82365/ か <tt/tcic/) のマニュアルをご覧く
ださい。

<sect1>NE2000 互換のイーサネットカードを使うには？
<p>
まずカードが <tt/cardmgr/ に識別されているか調べてください。
<tt/SUPPORTED.CARDS/ の中には入っていないカードでも、実際にはサポート
されているカードの OEM バージョンのことがあります。このようなカードを
見つけたら私に連絡してください。リストに追加します。

もしお使いのカードが識別されていない場合、<ref id="new-card"
name="3.6"> 節に従って、config ファイルにあなたのカード用のエントリー
を作る必要があります。カード内部の設定を読み取る必要があるので、現時点
では、メモリカード用のドライバ <tt/pcmem_cs/ を使うように設定
(<tt/bind/ の項目)します。設定後、<tt/cardmgr/ を再起動して修正した 
config ファイルを読みこませます。

<!-- 
このへん、実際にやったわけじゃないし、よく理解してないんで、原文 
を残しておきます。
If your card is not recognized, follow the instructions in section
<ref id="new-card" name="3.6"> to create a config entry for your card,
but bind the card to the memory card driver, <tt/pcmem_cs/ for now.
Restart <tt/cardmgr/ to use the new updated config file.
-->

カードのハードウェア的なイーサネットアドレス(MAC アドレス)も知る必要が
あります。このアドレスは対になった 16 進数 6 つ組からなっており、しば
しばカード自身に書いてあります。もしカードに書いてなければ DOS のドラ
イバを使ってアドレスを調べることができます。とにかく何らかの方法で見つ
けて、

<!-- 
You will need to know your card's hardware ethernet address.  This
address is a series of six two-digit hex numbers, often printed on the
card itself.  If it is not printed on the card, you may be able to use
a DOS driver to display the address.  In any case, once you know it,
run:
-->

<tscreen><verb>
dd if=/dev/pcmem0a count=20 | od -Ax -t x1
</verb></tscreen>

を実行し、カードのアドレスに対応する部分の出力を調べます。アドレスの最
初が 16 進のオフセットでいくらになるかを記録しておきます。次に
<tt>modules/de650_cs.c</tt> を修正して <tt/hw_info/ の構造体を見つけま
す。この構造体の中にあなたのカード用のエントリを作らなければなりません。
最初のフィールドは 16 進のオフセットを 2 倍したもの、つぎの 3 つのフィー
ルドはカードのハードウェアアドレスの最初の 3 バイトです。最後のフィー
ルドはそのカードの名称になっています。

<!-- 
and search the output for your address.  Record the hex offset of the
first byte of the address.  Now, edit <tt>modules/de650_cs.c</tt> and
find the <tt/hw_info/ structure.  You'll need to create a new entry
for your card.  The first field is the offset multiplied by two.  The
next three fields are the first three bytes of the hardware address.
The final field is just a descriptive name.
-->

<tt/de650_cs/ を修正した後、コンパイルして新しいモジュールをインストー
ルします。<tt>/etc/pcmcia/config</tt> を修正し、あなたのカード用のエン
トリを <tt/pcmem_cs/ から <tt/de650_cs/ に変更します。<tt/cardmgr/ を
再起動して設定ファイルを読みこみなおせば完了です。作成された 
<tt/hw_info/ と config のエントリをぜひ私あてに送ってください。

<sect1>PCMCIA フロッピーインタフェースの使い方は？

<p> Compaq Aero や他のいくつかのラップトップ機で使われている PCMCIA の
フロッピーインタフェースはこのパッケージではまだサポートされていません。
もしお持ちのラップトップ機で Linux をブートする前にこのカードを初期化
できるなら、カードサービス・システムにそのソケットを無視するように設定
して利用することが可能です。ただしこのカードは抜き挿しできないことに注
意してください。

カードサービス・システムにフロッピーインタフェースが使っているソケット
を無視させるには、<tt/i82365/ か <tt/tcic/ ドライバをロードする際に 
<tt/ignore=&num;/ というパラメータを渡します。より詳しくはmanページを
ご覧ください。

<sect1>Xircom 製のカードのサポートはどうなっていますか？

<p>
Xircom は秘密保持契約 (non-disclosure agreement) を結んだベンダにのみ自
らのカードの技術情報を公開しています。そのため、自由に配布できる
Xircom カードのドライバを作るには DOS ドライバをリバース・エンジニアリ
ングするような法的に疑わしい方法を取るしかありません。

将来、Xircom 社が直接 Linux 用のドライバをサポートするかも知れません。
Xircom の技術サポートによると、将来の製品には Linux 用のドライバを含め
る予定だそうです。旧来の製品に対する彼らの方針は不明です。

Xircom 製の CreditCard Ethernet+Modem II カードは特別な設定をしなくて
も modem としては Linux で使えます。

<sect1>SCSI アダプタのサポートはどうなっていますか？

<p>
Qlogic 社の FastSCSI と New Media 社の Bus Toaster カード、Adaptec の 
APA-1460 SlimSCSI カードがカードサービス・システムから利用可能です。

Linux の 1.1.81 からは SCSI ドライバモジュールを動的にロードすることが
可能になっていますが、最新のカーネルを使う方がいいでしょう。これらのカー
ド用の PCMCIA ドライバモジュールは Linux の標準的な SCSI ドライバと 
PCMCIA 用のコード(<tt/qlogic_cs.c/ と <tt/toaster_cs.c/ をリンクして作
られています。Bus Toaster 用の PCMCIA ドライバが Adaptec の SlimSCSI 
もサポートしており、Linux 自身の Adaptec 152X ドライバとリンクされてい
ます。最近、Linux の低レベルドライバに重要な変更が行われたので、SCSI 
アダプタを使うならば 1.2.8 より新しいカーネルを使ってください。

Adaptec APA-460 SlimSCSI アダプタはサポートされていません。このカード
は元々 Trantor 社から発売されていたものですが、Adaptec 社が Trantor 社
を合併してからは Adaptec のラベルを付けて売っています。APA-460 はどの 
Linux 用のドライバとも互換性がありません。ドライバを書くのがどれくらい
難しいかはわかりませんが、Adaptec からこのカードについての技術情報を入
手することが可能だとは思えません。

Trantor 製の SlimSCSI は以下のような製品名になっており、SCSIworks! が
ソフトウェアとして附属しています。

Trantor / Adaptec APA-460 SlimSCSI
FCC ID: IE8T460

(カードサービス・システムがサポートしている) Adaptec の SlimSCSI は以
下のようになっているので間違えないでください。こちらには EZ-SCSI ソフ
トウェアが付いています。

Adaptec APA-1460 SlimSCSI
FCC ID: FGT1460
P/N: 900100

<sect>デバッグの際のヒントとプログラム情報

<sect1>有益なバグレポートを送るには？

<p>
以下に示すものは全てのバグレポートに必ず書いてほしいことです。
<itemize>
<item>システムタイプと <tt/probe/ コマンドの出力
<item>使っている PCMCIA カード
<item>Linux のカーネルのバージョンと PCMCIA パッケージのバージョン
<item><tt>/etc/pcmcia</tt> 下のスタートアップファイルに加えたあらゆる変更
<item>重要には思えなくても <tt>/usr/adm/messages</tt> の内容も送ってください。
</itemize>

<tt/make.options/ ファイルには、カーネルモジュールを様々な種類のデバッ
グコードをオンにして make するための設定が何種類か入っています。問題に
より、役に立つ設定も役に立たない設定もありますが、どれか一つ、と言われ
れば、全てのデバッグ情報を報告するオプションを使うのが最善でしょう。

もしカーネル自身がエラーを起す(fault)するようなら、問題となるアドレス、
EIP、を特定するためにはレジスタのダンプ情報しか役に立たないでしょう。
もしそのアドレスがカーネル本体をさしていれば、<tt/zSystem.map/ を参照
して、どの関数でエラーが起きたのか調べてください。もし実行時ロードモジュー
ルでエラーが起きていれば追及するのは多少難しくなります。現在のモジュー
ル用ツールでは、``<tt/ksyms -m/'' で各ロード可能モジュールのベースアド
レスがわかります。EIP アドレスを含んでいるモジュールを選び、モジュール
内部の offset を決めるために EIP からベースアドレスを引きます。そして、
<tt/gdb/ をそのモジュールに対して使って、 <tt/list/ コマンドを使って 
問題となる offset のあたりを調べます。ただし、この方法はモジュールを 
<tt/-g/ オプションを使ってデバッグ情報を含むようにコンパイルした時しか
使えません。
<!--  こんなデバッグもやったことないから、、^^;
If your problem involves a kernel fault, the register dump from the
fault is only useful if you can track down the fault address, EIP.  If
it is in the main kernel, look up the address in <tt/zSystem.map/ to
identify the function at fault.  If the fault is in a loadable module,
it is a bit harder to trace.  With the current module tools,
``<tt/ksyms -m/'' will report the base address of each loadable
module.  Pick the module that contains the EIP address, and subtract
its base address from EIP to get an offset inside that module.  Then,
run <tt/gdb/ on that module, and look up the offset with the <tt/list/
command.  This will only work if you've compiled that module with
<tt/-g/ to include debugging information.
-->

バグレポートは <tt/dhinds@allegro.stanford.edu/ まで送ってください。バ
グレポートは e-mail でお願いします。自宅や職場に電話しないでください。

<sect1>PCMCIA の低レベルデバッギング情報

<p> 
PCMCIA モジュールにはコンパイル時のオプションで決まるデバッグコードが
多数含まれています。 <tt/make.options/ ファイルにこのコードを使うため
のオプションがあります。<tt/PCMCIA_DEBUG/ を有効にしてコンパイルしたモ
ジュールでは <tt/pc_debug/ というパラメータが存在し、デバッグ情報の冗
長さをコントロールしています。このパラメータはモジュールがロードされる
際に調整可能なので、再コンパイルをしなくても、モジュールごとに出力をコ
ントロールすることが可能です。

PCMCIA パッケージの <tt>debug_tools/</tt> ディレクトリには、デバッグ用
のツールが入っています。<tt/dump_tcic/ と <tt/dump_i365/ コマンドは
PCMCIA コントローラーのレジスタを全てダンプし、多数のレジスタ情報をデ
コードします。これらのコントローラーチップのデータシートが利用できるなら
この情報は非常に有効でしょう。<tt/dump_tuples/ コマンドは、カードの
CIS(Card Information Structure) を示し、いくつかの重要なビットをデコー
ドします。<tt/dump_cisreg/ コマンドはカードのローカルな設定レジスタを示
します。

<tt/pcmem_cs/ メモリカードドライバもデバッグに利用できます。このドライ
バはどんなPCMCIA カードからでも利用でき、他のドライバと干渉しません。
このドライバを使えば、どのカードの属性メモリや共通メモリでも直接アクセ
スできます。

<sect1>カード X 用のドライバを書くには？

<p>
Linux PCMCIA プログラマガイドが Linux 用の PCMCIA インタフェースに関す
る最善の文書です。最新版は、<tt/cb-iris.stanford.edu/ の
<tt>/pub/pcmcia/doc</tt> にあります。

そのデバイスが普通の ISA デバイスによく似ていれば、既存の Linux 用の
ドライバの一部を流用することもできるでしょう。多くの場合、既存のドラ
イバを修正してブート後にもデバイスを追加したり外したりできるようにす
るのがもっとも苦労するところです。今あるドライバの中では、メモリカー
ド用のドライバが、あらゆる種類の汚れ仕事をするのに Linux カーネルの
他の部分を利用しない唯一の ``自己完結した'' ドライバです。

ドライバがカードサービス・システムとどのように通信するかを説明するため
に、多数のコメントを入れたドライバのヒナ型を作りました。
<tt>modules/skeletn.c</tt> がそれです。ドライバを作成する際の参考にし
てください。
</article>
