  Linux PCMCIA HOWTO
  David Hinds, dhinds@pcmcia.sourceforge.org
  v2.46, 1 December 1999
  こじまみつひろ と JF プロジェクト
  v2.46j, 18 December 1999

  この文書は Linux に PCMCIA カードサービスをインストールして使うための
  方法についてまとめたものです。また、しばしば尋ねられる質問(FAQ)にも答
  えています。この文書の最新版は <ftp://sourceforge.org/pcmcia/doc> にあ
  ります。 HTML 版は  <ftp://hyper.stanford.edu/pub/pcmcia/doc> です。
  ______________________________________________________________________

  目次

  1. 概略と必要なハードウェア
     1.1 イントロダクション
     1.2 著作権表示と免責事項
     1.3 最新のバージョンはいくつですか? どこで手に入りますか?
     1.4 サポートしているシステムは?
     1.5 サポートしているカードは?
     1.6 いつになったら私のお気に入りの(未サポート)カードがサポートされるんでしょう?
     1.7 メーリングリストとその他の情報源
     1.8 なぜ PCMCIA のバイナリを配布しないの?
     1.9 なぜ PCMCIA パッケージはこんなに大きいの?

  2. コンパイルとインストール
     2.1 必要なファイルとカーネルの設定
     2.2 インストール
     2.3 起動オプション
     2.4 システムリソースの設定
     2.5 個別ディストリビューションに関する注意
        2.5.1 Debian
        2.5.2 RedHat, Caldera, Mandrake
        2.5.3 Slackware
        2.5.4 SuSE

  3. インストールと設定における問題の解決
     3.1 ベースとなる PCMCIA カーネルモジュールがロードされません
     3.2 ロードできないクライアントドライバモジュールがあります
     3.3 割り込みのスキャンに失敗します
     3.4 I/O ポートのスキャンに失敗します
     3.5 メモリの検出に失敗します
     3.6 カードの抜き挿しを検出できません
     3.7 システムリソースの不足
     3.8 2 枚のカードを挿入した時だけリソースが衝突します
     3.9 デバイスの設定が終わりません

  4. 使い方と機能
     4.1 PCMCIA デバイスの設定と監視のためのツール
        4.1.1 設定用デーモン `cardmgr'
        4.1.2 ソケットの状態ファイルとスタブ
        4.1.3 cardctl, cardinfo ユーティリティ
        4.1.4 カードの抜き挿し
        4.1.5 カードサービスと APM(Advanced Power Management)
        4.1.6 PCMCIA システムの終了
     4.2 PCMCIA 設定スクリプトの概要
     4.3 PCMCIA ネットワークアダプタ
        4.3.1 ネットワークデバイスのパラメータ
        4.3.2 個別のカードに関するコメント
        4.3.3 ネットワークアダプタにまつわる問題の診断
     4.4 PCMCIA のシリアルデバイスとモデムデバイス
        4.4.1 シリアルデバイスのパラメータ
        4.4.2 特定のカードについてのコメント
        4.4.3 シリアルデバイスにまつわる問題の診断
     4.5 PCMCIA パラレルポートデバイス
        4.5.1 パラレルデバイスのパラメータ
        4.5.2 パラレルポートデバイスで起こる問題の診断
     4.6 PCMCIA SCSI アダプタ
        4.6.1 SCSI デバイスのパラメータ
        4.6.2 個別カードに関するコメント
        4.6.3 SCSI アダプタにまつわる問題の診断
     4.7 PCMCIA メモリカード
        4.7.1 メモリデバイスのパラメータ
        4.7.2 リニアフラッシュメモリカードの使い方
     4.8 PCMCIA ATA/IDE カードドライブ
        4.8.1 ATA/IDE 固定ディスクデバイスのパラメータ
        4.8.2 ATA/IDE アダプタにまつわる問題の診断
     4.9 マルチファンクションカード

  5. 高度な話題
     5.1 PCMCIA デバイスへのリソース割り当て
     5.2 家と会社で別々の設定を使い分けることができますか?
     5.3 PCMCIA デバイスからの起動
        5.3.1 補助スクリプト ``pcinitrd''
        5.3.2 initrd 起動ディスクの作成
        5.3.3 Linux 用でないドライブ上にある initrd イメージのインストール

  6. サポートされていないカードの扱い
     6.1 識別されないカードの設定
     6.2 NE2000 互換イーサネットカードへの対応
     6.3 PCMCIA フロッピーインタフェースカード

  7. デバッグのヒントとプログラム情報
     7.1 有益なバグレポートの送り方
     7.2 カーネルのトラップ通知の解釈
     7.3 PCMCIA の低レベルのデバッグを行うための情報
     7.4 /proc/bus/pccard
     7.5 出たばかりのカード向けに PCMCIA カードサービスのドライバを書くには
     7.6 PCMCIA クライアントドライバを書く人のための手引き
     7.7 Linux ディストリビューションのメンテナのための手引き

  8. 日本語訳について

  ______________________________________________________________________

  1.  概略と必要なハードウェア

  1.1.  イントロダクション

  Linux 用の PCMCIA カードサービスは、PCMCIA あるいは「PC カード」をサ
  ポートするためのソフトウェア一式です。このパッケージには、あるバージョ
  ンのカードサービス API を実装したカーネルモジュール、それぞれのカード
  ごとのクライアントドライバ、カードの着脱を監視し、必要に応じてドライバ
  をロードしたり外したりするカードマネージャーデーモンが含まれています。
  ほとんどの種類のカードの「活線挿抜」にも対応しているので、いつでも安全
  にカードを着脱することが可能です。

  このソフトウェアはまだ開発中のものです。多分バグがあるでしょうし、注意
  して使う必要があります。報告していただいたバグは可能な限り修正するつも
  りですが、報告がないと私はそのバグに気づかないかもしれません。もしこの
  プログラムを使ってもらえるならば、良いことでも悪いことでもいいですから
  経験談を送っていただけますよう希望します。

  この文書についての提案や改善点についても是非教えてください
  (dhinds@pcmcia.sourceforge.org まで)。

  [訳注: 翻訳に関することは JF プロジェクト (<JF@linux.or.jp>)までお願い
  します]

  1.2.  著作権表示と免責事項

  Copyright (c) 1998 David A. Hinds

  This document may be reproduced or distributed in any form without my
  prior permission.  Modified versions of this document, including
  translations into other languages, may be freely distributed, provided
  that they are clearly identified as such, and this copyright is
  included intact.

  This document may be included in commercial distributions without my
  prior consent.  While it is not required, I would like to be informed
  of such usage.  If you intend to incorporate this document in a
  published work, please contact me to make sure you have the latest
  available version.
  This document is provided ``AS IS'', with no express or implied
  warranties.  Use the information in this document at your own risk.

  この文書をコピーしたり再配布するのに私の事前の許可は必要ありません。他
  の言語への翻訳を含むこの文書の修正版も、それが修正版であることが明確に
  示されており、この著作権条項がそのまま含まれている限り、自由に再配布可
  能です。

  この文書は私の事前の許可なく商業的なパッケージに含めることも可能です
  が、そのような使用に際しては連絡していただくことを希望します。出版物に
  含める場合は最新版であることを確認するために是非私まで連絡してくださ
  い。

  この文書は「そのまま(as is)」の形で提供され、一切の保証はありません。
  この文書に記載されている情報を利用される際は自らの責任でお願いします。

  1.3.  最新のバージョンはいくつですか? どこで手に入りますか?

  PCMCIA カードサービスの最新のメジャーリリースはバージョンは 3.1 で、
  ちょっとした変更やバグの修正に応じて 3.1.1, 3.1.2 のようなバージョン番
  号が振られています。

  最新バージョンのソースコードは sourceforge.org の /pcmcia ディレクトリ
  に pcmcia-cs-3.1.?.tar.gz という名前で置いてあります。普通は複数のバー
  ジョンが同一のディレクトリにあります。普通はメジャーバージョン別に、最
  新版のマイナーバージョンだけが置かれています。新しいメジャーバージョン
  にはテストが不十分なコードが入っているので、比較的安心して使える予備と
  して、以前のバージョンの最終版も残すようにしています。現在の予備のバー
  ジョンは 3.0.14 です。どのバージョンを利用するか判断するのは読者の皆さ
  んですが、重要な違いは CHANGES ファイルにまとめておいたので参考にして
  ください。

  sourceforge.org は sunsite.unc.edu (そして sunsite のミラーサイト全て)
  の /pub/Linux/kernel/pcmcia にミラーされています。

  PCMCIA ドライバを最初からコンパイルしなくても、最近の主要 Linux ディス
  トリビューションのほとんどにはコンパイル済みのドライバが入っています。
  このようなディストリビューションには、Slackware, Debian, RedHat,
  Caldera, SuSE, Yggdrasil などがあります。

  [訳注: 国産ディストリビューションの大部分も含まれます]

  1.4.  サポートしているシステムは?

  このパッケージは Linux が動作する Intel ベースの PC のほとんどで動作す
  るはずです。Alpha ベースのプラットフォーム(つまり DEC Multia)でも動作
  します。どちらのエンディアンでも完全に動くようにするための作業を現在
  行っており、これによって PowerPC ベースのプラットフォーム(つまり Apple
  Powerbook)でも動作するようになるでしょう。一般的なソケットコントローラ
  のほとんどをサポートしています。サポートされているコントローラを使って
  おり、SCSI-PCMCIA アダプタや IDE-PCMCIA アダプタを使わずにコントローラ
  を直接 ISA バスや PCI バスに挿している限り、デスクトップ機用のカード
  ドックでも動作するはずです。以下に挙げるコントローラは、パッケージ付属
  のソケットドライバが認識するものです:

  o  Cirrus Logic PD6710, PD6720, PD6722, PD6729, PD6730, PD6732, PD6832

  o  Intel i82365sl B, C, and DF steps, 82092AA

  o  O2Micro OZ6729, OZ6730, OZ6832, OZ6833, OZ6836, OZ6860, OZ6812

  o  Omega Micro 82C365G, 82C092G

  o  Ricoh RF5C296, RF5C396, RL5C465, RL5C466, RL5C475, RL5C476, RL5C478

  o  SMC 34C90

  o  Texas Instruments PCI1130, PCI1131, PCI1210, PCI1220, PCI1221,
     PCI1225, PCI1250A, PCI1251A, PCI1251B, PCI1450

  o  東芝 ToPIC95, ToPIC97 (試験的に対応。不完全です)

  o  Vadem VG465, VG468, VG469

  o  VLSI Technologies 82C146, VCF94365

  o  VIA VT83C469

  o  Databook DB86082, DB86082A, DB86084, DB86084A, DB86072, DB86082B

  一般的には、i82365sl とレジスタ互換である他のコントローラも動作しま
  す。

  32 ビット CardBus への対応は、まだいくらか試験的なものです。バージョン
  3.0 より前のドライバは、CardBus ソケット内の 16 ビットカードしかサポー
  トしていません。ラップトップ機の技術の変化のペースが早いため、新しいコ
  ントローラが頻繁に登場しますし、新しく市場に出たモデルにドライバが対応
  するのが遅れることがあります。

  東芝は ToPIC95, ToPIC97 チップセットに関するドキュメントをいくつか公開
  しましたが、提供された情報は十分ではありません。相反する矛盾した報告が
  出ているにもかかわらず、東芝はこの状況を解決する有効な取り組みをしてい
  ません。 Linux の ToPIC チップセットのサポートには重大なバグがあります
  が、これは東芝からもっとまともな文書が出るか、東芝からの援助が得られな
  い限りは解決しないでしょう。現時点では、東芝のラップトップ機を使わない
  ことをお勧めします。16 ビットカードの場合は、BIOS の設定で ``PCIC'' へ
  のブリッジモードを設定することをお勧めします。CardBus カードの場合に
  は、自力で何とかしてください。

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

  1.5.  サポートしているカードは?

  最新版には、さまざまなイーサネットカード用のドライバ、モデムカードやシ
  リアルポートカード用のドライバ、いくつかの SCSI アダプタ用のドライバ、
  ATA/IDE ドライブカード、ほとんど のSRAM カードといくつかの Flash カー
  ドで使えるドライバが入っています。各リリースの PCMCIA カードサービスに
  付属の SUPPORTED.CARDS ファイルには、少なくとも一つの実働システムでの
  実績があるカードが全て記載されています。

  リストにないカードが動くかどうかはカードの種類に依存します。ほとんどの
  モデムカードはこのドライバで動くはずです。ネットワークカードは、サポー
  トされているカードの OEM 版なら動くかもしれません。その他のタイプの
  I/O カード(フレームバッファ、サウンドカード等)は誰かが専用のドライバを
  書かない限り動かないでしょう。

  1.6.  いつになったら私のお気に入りの(未サポート)カードがサポートされる
  んでしょう?

  残念ながら、私がデバイスドライバを書いても一文の得にもなりません。です
  から、もしあなたの使いたいカード用のドライバが欲しければ、多分あなた自
  身が何かしらの作業を行う必要があるでしょう。理想を言えば、私は Linux
  カーネルのようなモデルで作業をしたいと思っています。つまり、私が主に
  「コア(中心的な)」ドライバのコードを担当し、他の作者の方々が特定カード
  向けのクライアントドライバを提供・管理するのです。SUPPORTED.CARDS で
  は、現在開発が進行中のカードについても触れています。私もできるかぎりの
  お手伝いはするつもりですが、カーネルのデバイスドライバのデバッグを電子
  メールで行っても、あまり効率は上がらないことを言っておきます。

  自社製品の Linux 対応への支援を考えているメーカーがあれば、相談の取り
  まとめをしますので私に連絡を取ってください。

  1.7.  メーリングリストとその他の情報源

  私は Linux PCMCIA ユーザのためのデータベースとメーリングリストを運営し
  ています。私はごく最近、 Linux の PCMCIA 情報用の WWW ページを
  「HyperNews」サイトに移しました。ここには Linux の PCMCIA に関する話題
  を扱うメッセージリストをいくつか用意しています。メッセージリストには、
  インストールと設定の話題を扱うもの、色々な種類のカードに関するもの、プ
  ログラミングとデバッグの話題を扱うものがあります。Linux の PCMCIA 情報
  のページは <http://pcmcia.sourceforge.org> にあります。ユーザは特定の
  質問に対する新しい返答があると電子メールで通知を受けることができます
  し、特定の分野で新しいメッセージが投稿された場合にも通知を受けることが
  できます。私はこの HOWTO の範囲を超えるような質問に対して、このページ
  が便利な情報収集の場になることを期待しています。

  ラップトップ機の話題を扱う Linux 向けメーリングリストがあります。
  ``linux-laptop'' メーリングリストです。詳しい情報については、本文に
  ``help'' とだけ書いたメールを majordomo@vger.rutgers.edu 宛に送ってく
  ださい。このメーリングリストを購読するには、同じアドレスに ``subscribe
  linux-laptop'' と書いたメールを送ります。このメーリングリストは Linux
  の PCMCIA に関する話題を議論するための良い場所だと思います。

  「Linux Laptop Home Page(
  <http://www.cs.utexas.edu/users/kharker/linux-laptop>)」には、個別の
  ラップトップ機を Linux で設定するための情報が書かれたページへのリンク
  がたくさんあります。システム設定情報を検索できるデータベースもありま
  す。

  1.8.  なぜ PCMCIA のバイナリを配布しないの?

  私にとって、PCMCIA のバイナリを配布するのはとても大変だからです。この
  作業は面倒なのです。というのも、コンパイル時にしか設定できない機能もあ
  りますし、PCMCIA のモジュール類は「正しい」カーネルの設定に依存してい
  ます。そのため、もしコンパイル済みのモジュールを配布しようとすれば、対
  応するカーネルを添付するはめになるでしょう。この他にコンパイル済みの
  PCMCIA モジュールが必要とされる場合として、新しいマシンに Linux をイン
  ストールする時があります。この場合は普通、特定の Linux ディストリ
  ビューションのインストール処理に合わせてドライバを設定する必要がありま
  す。それぞれの Linux ディストリビューションには独自のインストール法が
  あり、一般的なドライバとディストリビューションを組みあわせた boot/root
  ディスクを用意することは私には不可能です。

  PCMCIA は RedHat, Caldera, Slackware, Yggdrasil, Craftworks, Nascent
  Technology といった Linux の主要ディストリビューションに含まれるように
  なりました。

  1.9.  なぜ PCMCIA パッケージはこんなに大きいの?

  最初に弁解しておきますが、実際のところそんなに大きいわけではないです
  よ。全てのドライバモジュールを合わせてもディスクを 500k ほど食うだけで
  す。各種のユーティリティ類がもう 70k 、/etc/pcmcia が 50 k ほどです。
  動いている時は PCMCIA モジュールの core の部分がシステムメモリを 55k
  ほど取ります。cardmgr デーモンは通常、カードが抜き挿しされた時以外はス
  ワップアウトされているはずです。パッケージ全体の規模としては DOS の
  カードサービスとそれほど変わりません。

  PCMCIA の特徴的な機能、すなわち省電力や活線挿抜を必要としない人々から
  見ると、DOS の ``point enabler'' に比べて、まだかなりのオーバーヘッド
  があるように思えるかもしれません。``point enabler'' は確かに小さいプロ
  グラムですが、ごく限られたカードしかサポートしていませんし、使える
  PCMCIA コントローラも限られています。試しに本当に「汎用」なモデムのイ
  ネーブラを書いてみれば、多くのベンダーからリリースされているカードをサ
  ポートし、PCMCIA コントローラの違いにも対応するためには、結局カード
  サービスの機能のほとんどをサポートしなければならないことが分かるでしょ
  う。

  2.  コンパイルとインストール

  2.1.  必要なファイルとカーネルの設定

  コンパイルをする前に、本当に自分自身で PCMCIA パッケージをコンパイルし
  なければならないのかどうかを考えてみてください。一般的な Linux ディス
  トリビューションの全てには、コンパイル済みのドライバパッケージが付属し
  ています。一般的に、最初からドライバをインストールする必要があるのは、
  最新ドライバの新機能が必要な場合か、カーネルの更新や再設定を行って
  Linux ディストリビューション付属のドライバとの互換性がなくなった場合だ
  けです。パッケージのコンパイルは技術的には難しくありませんが、 Linux
  全般に慣れている必要があります。

  作業を始める前には以下のツールがインストールされていなければなりませ
  ん:

  o  2.0.*, 2.1.*, 2.2.* のいずれかの系列のカーネルのソースツリー

  o  適切なモジュールユーティリティ群

  o  (なくても構いません) ``XForms'' と呼ばれる X11 用のインタフェース
     ツールキット

  最新のカーネルイメージだけでなく、カーネルのソースツリー全体が必要で
  す。 PCMCIA のプログラムの中には、カーネルのソースを参照している部分が
  あるからです。不要なドライバを除いた新しいカーネルをコンパイルしたくな
  るかもしれませんが、PCMCIA カードサービスをインストールするためにカー
  ネルを再構築する必要はありません。

  最新の「安定版」のカーネルのソースとパッチは、
  <ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0> や
  <ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.0> から入手できま
  す。開発版のカーネルは同じ場所の v2.1 ディレクトリにあります。最新のモ
  ジュールユーティリティも同じ場所にあります。

  [訳注: 翻訳の時点では安定版カーネルの最新は 2.2.x、開発版の最新は
  2.3.x です] Linux カーネルのソースツリーに入っている
  Documentation/Changesファイルには、そのバージョンのカーネルで必要とな
  る全ての種類のシステムコンポーネントのバージョンが書かれています。この
  ファイルを調べて、システムを最新の状態にするとよいでしょう。特にカーネ
  ルを更新した場合にはそうすべきです。開発版のカーネルを使っている場合に
  は、共有ライブラリとモジュールユーティリティの組合せが正しいかどうかを
  確認してください。

  カーネルを設定する際、PCMCIA のイーサネットカードを使うつもりなら、
  ``networking support'' を [Y] にして、``pocket and portable adapters''
  を含む一般の Linux 用のネットワークカード用のドライバは全て使わないよ
  うに設定します。PCMCIA ネットワークカード用のドライバは必要なときに
  ロードされるモジュールとして提供されていますので、カーネルにドライバを
  組みこむのはメモリの無駄でしかありません。

  SLIP や PPP, PLIP を使う場合には、カーネルの設定時にこれらを使うように
  指定するか、これらのドライバのローダブルモジュール版を使う必要がありま
  す。残念ながらカーネル 1.2.X では設定の手順に問題があり、ローダブルモ
  ジュール用の細かな設定(例えば SLIP の圧縮の有無)ができません。そのた
  め、SLIP が必要ならば(モジュールとして使うのではなく)カーネルに組み込
  む方がいいでしょう。

  PCMCIA トークンリングアダプタを使う場合、``Token Ring driver
  support''(CONFIG_TR) を設定しますが、CONFIG_IBMTR は使わないようにしま
  す。

  PCMCIA IDE アダプタを使いたい場合、カーネル 2.0.* から 2.1.7 では、
  CONFIG_BLK_DEV_IDE_PCMCIA を有効にしなければなりません。古いカーネルは
  リムーバブル IDE デバイスをサポートしていません。新しいカーネルでは、
  特別な設定は必要ありません。

  もし PCMCIA SCSI アダプタを使うなら、カーネルの設定時に CONFIG_SCSI を
  設定します。使うメディアごとの SCSI ドライバ(ディスク、テープ、CD-
  ROM、 汎用ドライバ)も設定します。特定のホストアダプタ用のハードウェア
  レベルのドライバは使わないように設定します。それらを組みこんでもメモリ
  の無駄です。

  PCMCIA デバイスが必要とするドライバをモジュール化する場合、
  /etc/pcmcia/config を修正して、カードの種類に合ったモジュールをロード
  するように設定します。例えば、シリアルドライバがモジュール化されている
  場合、/etc/pcmcia/configのシリアルデバイスの設定を

       device "serial_cs"
         class "serial" module "misc/serial", "serial_cs"

  のようにします。

  このパッケージには cardinfo という X 上でカードの状態を表示するための
  ユーティリティプログラムが入っています。cardinfo を使うために
  は、XForms Library という自由に配布できるユーザインタフェース用ツール
  キットが必要です。ほとんどの Linux ディストリビューションでは、このラ
  イブラリは PCMCIA と別のパッケージとして使うことができます。 cardinfo
  をコンパイルしたければ、PCMCIA パッケージの設定を行う前に XForms と
  X11 のヘッダファイルとライブラリをインストールする必要があります。

  2.2.  インストール

  以下が簡単なインストールの手順です:

  o  /usr/src で pcmcia-cs-3.1.?.tgz ファイルを展開する

  o  pcmcia-cs-3.1.? ディレクトリで ``make config'' を実行する

  o  ``make all'', ``make install'' を順に実行する。

  o  必要ならば、/etc/pcmcia ディレクトリにあるオプション指定用ファイル
     を環境に合わせて設定する。

  基本の PCMCIA 配布物に含まれていない、他の方が作成したクライアントドラ
  イバをインストールするつもりであれば、これらを PCMCIA ソースツリーの
  トップディレクトリで展開してください。その後は通常のインストール手順に
  従います。追加のドライバは、自動的にコンパイル・インストールされます。

  ``make config'' とすると、プログラムがいくつか設定のためのオプションを
  尋ね、PCMCIA カードサービスをインストールする環境が整っているかどうか
  をチェックします。多くの場合、デフォルトの設定オプションのままで大丈夫
  なはずですが、もし何か問題が起これば、このコマンドの出力を注意深く
  チェックしてみてください。以下のオプションが使えます:
     Alternate target install directory?(インストール先のディレクトリを
        変更するか?)
        別のマシンにインストールするためのパッケージ用にコンパイルする場
        合、「alternate target directory(別のインストール先)」を指定して
        ください。このディレクトリ名は絶対パスで指定する必要がありま
        す。PCMCIA 用のツール類は全てこのディレクトリに元にした相対的な
        ディレクトリにインストールされますので、そのディレクトリ以下を
        tar でまとめて、目的とするマシンにコピーし、適切な場所に展開して
        ください。

     Build 'trusting' versions of card utilities?(「信頼する」形式のカー
        ドユーティリティを作るか?)
        サポート用ユーティリティの一部(cardctl と cardinfo)は、「安全
        な(safe)」形式または「信頼する(trusting)」形式のどちらかでコンパ
        イルすることができます。「安全な」形式では、root 以外のユーザが
        カードの設定を変更することは禁止されます。「信頼する」形式では、
        カードのサスペンドとリジューム、カードのリセット、現在の設定ス
        キームの変更を行うコマンドを一般ユーザが発行することを許可されま
        す。デフォルトでは「安全」な形式を作ります。

     Include 32-bit (CardBus) card support?(32 ビット(CardBus) をサポー
        トするか?)
        32 ビットの CardBus カードを使いたければ、このオプションを選択し
        なければなりません。 16 ビットの PC カードしか使う予定がなけれ
        ば、CardBus ブリッジのサポートは必要ありません。

     Include PnP BIOS resource checking?(PnP BIOS によるリソースのチェッ
        クを行うか?)
        このオプションを選ぶと、追加のコードが PCMCIA のコアモジュール内
        に入ります。このコードはシステムの PnP BIOS と通信して組み込みの
        「マザーボード」デバイス(シリアルポート、パラレルポート、サウン
        ド等)のリソース情報を取得し、リソースの衝突を避ける役に立ちま
        す。このオプションを有効にすると、いくつかの追加のリソースファイ
        ルが /proc/bus/pccard の下に作られ、 lspnp ツールと setpnp ツー
        ルを使って PnP BIOS デバイスの参照と操作を行えます。しかし、この
        設定は一部のラップトップ機で問題を起こすので、デフォルトでは有効
        になっていません。

     How to set kernel-specific options?(カーネル固有のオプションの設定
        方法は?)
        PCMCIA の各種ツールに影響を与えるカーネルの設定オプションもいく
        つかあります。たいていの場合、設定用のスクリプトはこれらのオプ
        ションを稼働中のカーネルから推定します(デフォルト動作であり、最
        も一般的なケースです)。別のマシン用にコンパイルする場合などには
        これを行わないで、カーネルのソースコードから設定オプションを読み
        込むこともできますし、それぞれのオプションを対話的に設定すること
        も可能です。

  Configure スクリプトは、自動的に構築するためやカーネルの更新後に素早く
  再設定するために非対話的に実行することもできます。あまり使われないオプ
  ションのいくつかは、コマンドラインでしか指定できません。利用可能な全て
  のオプションを見るには、``Configure --help'' を実行してください。

  ``make all'' して ``make install'' すると、プログラムをコンパイルし、
  カーネル用モジュールとユーティリティプログラムを適切な場所にインストー
  ルされます。カーネル用のモジュールは /lib/modules/<version>/pcmcia
  ディレクトリにインストールされます。 [訳注: version の部分には、使って
  いるカーネルのバージョン番号 (2.0.36, 2.2.8 等)が入ります] プログラム
  cardmgr と cardctl は /sbin に、インストールされます。cardinfo を作っ
  ていれば、これは /usr/X11R6/bin にインストールされます。

  設定用のファイルは /etc/pcmcia ディレクトリにインストールされます。も
  し古いバージョンに上書きしてインストールすると、古い設定ファイルはバッ
  クアップ後に置き換えられます。保存されたスクリプトには *.O という拡張
  子が付けられます。

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

  たまに probe コマンドで自動的にコントローラを設定できないことがありま
  す。Halikan NBD 486 システムでは TCIC-2 コントローラが変わったアドレス
  にあります。したがって、rc.pcmcia を編集して tici モジュールをロードす
  るようにし、PCIC_OPTS のパラメータに``tcic_base=0x02c0''を指定する必要
  があります。

  Cirrus 製のコントローラを使っている一部のシステム(NEC Versa M 等)で
  は、システムの起動時に BIOS がコントローラに特殊なサスペンド状態を設定
  します。このようなシステムでは、probe コマンドは対応していてもホストコ
  ントローラの検出に失敗します。この場合には、rc.pcmcia を編集して、PCIC
  に i82365 を設定し、PCIC_OPTS に ``wakeup=1'' を設定してください。

  2.3.  起動オプション

  PCMCIA の起動スクリプトは、何種類かのグループの起動オプションを認識し
  ます。これは環境変数を使って設定します。オプションが複数個になる場合
  は、空白で区切り、全体をクォートしなければなりません。起動オプションを
  書く場所はディストリビューションによって違います。直接起動スクリプトに
  書いても構いませんし、独立したオプション用ファイルに書いてもいいでしょ
  う。ディストリビューション固有の事情については、 ``個別ディストリ
  ビューションに関する注意'' の節をご覧ください。

     PCMCIA
        この変数は、PCMCIA サポートを起動するかどうかを指定しま
        す。``yes'' 以外が設定されると、起動スクリプトは無効になります。

     PCIC
        このオプションは PC カードコントローラドライバモジュールを指定し
        ます。選択肢は 2 つ(``tcic'' または ``i82365'')です。事実上、現
        在利用可能なドライバは全て ``i82365'' に属しています。これは唯一
        必須なオプション設定です。

     PCIC_OPTS
        このオプションは、PCIC モジュール用のオプションを指定します。ホ
        ストコントローラによっては、実際のシステムでは実装されていること
        もされていないこともあるオプション機能があります。場合によって
        は、この機能が実装されているかどうかをソケットドライバが検出でき
        ないことがあります。指定できるオプションの詳しい説明については、
        該当するオンラインマニュアルをご覧ください。

     CORE_OPTS
        このオプションは、pcmcia_core モジュール用のオプションを指定しま
        す。このモジュールは、PC カードドライバサービスの中心部分を実装
        したものです。詳しくは ``man pcmcia_core'' を見てください。

     CARDMGR_OPTS
        このオプションは、cardmgr デーモンに渡すオプションを指定します。
        詳しくは ``man cardmgr'' をご覧ください。

     SCHEME
        このオプションが設定されていると、その内容がドライバの起動時の
        PC カードの設定スキームとして初期化されます。スキームについての
        説明は、 ``PCMCIA 設定スクリプトの概要''の節をご覧ください。

  ハードウェアレベルのソケットドライバ(tcic と i82365)はバスタイミングを
  制御するためのパラメータを多数持っており、バスクロックが通常とは異なる
  システムではそれらを調整する必要があるかもしれません。バスタイミングに
  起因する問題としては、カードが認識されない、負荷が高いとハングアップす
  る、エラーがよく起きる、デバイスの性能が出ない等があります。タイミング
  調整のパラメータを持っているのは特定のホストブリッジだけです。お使いの
  コントローラに対して指定できるオプションについては該当するオンラインマ
  ニュアルを見てもらうこととして、ここでは概要だけを説明します:

  o  Cirrus 製のコントローラーにはタイミングを設定するためのパラメーター
     が多数用意されています。そのうち、最も重要なものは cmd_time フラグ
     でしょう。このフラグは PCMCIA のバスサイクル長を設定します。高速な
     486 システム(つまり DX4-100)では、この値を 6 (デフォルト値)から 12
     または 16 に増やすと効果があるようです。

  o  Cirrus PD6729 PCI コントローラーには fast_pci というフラグがありま
     す。もし PCI バスのスピードが 25MHz 以上の場合、このフラグをセット
     する必要があります。

  o  Vadem VG-468 コントローラと Databook TCIC-2 コントローラーには
     async_clock フラグがあり、PCMCIA のバスクロックとホストのバスクロッ
     クの相対的なタイミングを変更します。このフラグをセットすれば、いく
     つかの操作ついて余分のウェイトサイクルが入るようになります。ただし
     私は、このフラグが必要なラップトップ機を聞いたことはまだありませ
     ん。

  o  pcmcia_core モジュールには cis_speed というパラメータがあり、
     PCMCIA カードのカード情報領域(CIS:Card Information Structure)にアク
     セスする速度を変化させます。バスクロックの速いシステムではこのパラ
     メータを大きくする(すなわち、カードへのアクセス速度を遅くする)と
     カード認識の問題が解決するかもしれません。

  o  これはタイミングの問題ではありませんが、システムに複数の ISA-PCMCIA
     コントローラがある場合や、ドッキングステーションに追加のソケットが
     ある場合には、i82365 モジュールは extra_sockets パラメータを 1 にし
     てロードしなければなりません。この設定は、 PCI-PCMCIA や PCI-
     CardBus ブリッジの検出では必要ないはずです。

  個別システムでのタイミングの設定例をいくつか紹介します:

  o  ARM Pentium-90 や Midwest Micro Soundbook Plus では ``freq_bypass=1
     cmd_time=8'' と設定します。

  o  Midwest Micro Soundbook Elite では ``cmd_time=12'' を指定します。

  o  Gateway Liberty では ``cmd_time=16'' を試してください。

  o  Samsung SENS 810 では ``fast_pci=1'' を指定します。

  2.4.  システムリソースの設定

  カードサービス・システムは他の標準的なデバイスが既に使っている I/O
  ポートや IRQ は自動的に回避しようとします。非標準的なデバイスとぶつ
  かっていることを検知しても自動的に別のリソースを使おうとしますが、この
  機能はまだ完璧ではありません。場合によっては、使わないリソースを
  /etc/pcmcia/config.opts で明示的に指定する必要があるかもしれません。

  以下は、特定のラップトップ機で必要なリソースの設定です。このリストを信
  用しすぎないでください。このリストは問題解決のためのヒントになるかもし
  れませんが、どうしても内容は古くなってしまいますし、きっと間違いもある
  でしょう。訂正・追加は歓迎です。

  o  AMS Soundpro の場合、irq 10 を使わないように設定します。

  o  AMS TravelPro 5300 の一部のモデルでは、0xc8000-0xcffff のメモリ領域
     を使うように設定します。

  o  BMX 486DX2-66 の場合、irq 5 と 9 を使わないように設定します。

  o  Chicony NB5 では 0xda000-0xdffff のメモリ領域を使うように設定しま
     す。

  o  Compaq Presario 1020 では 0x2f8-0x2ff のポートと irq 3, 5 を使わな
     いように設定します。

  o  HP Omnibook 4000C では 0x300-0x30f のポートを使わないように設定しま
     す。

  o  IBM ThinkPad 380 および、たぶん 385, 600 シリーズでは 0x230-0x233
     のポートと irq 5 を使わないように設定します。

  o  内蔵モデム付きの IBM ThinkPad 600 と 770 では、ポート 0x2f8-0x2ff
     を使わないように設定します。

  o  IBM ThinkPad 600E と 770Z では、ハイメモリウィンドウを
     0x60000000-0x60ffffff に変更します。

  o  Micron Millenia Transport では irq 5, 9 を使わないように設定しま
     す。

  o  NEC Versa M では irq 9 と 0x2e0-2ff のポートを使わないようにしま
     す。

  o  NEC Versa P/75 では irq 5 と irq 9 を使わないようにします。

  o  NEC Versa S では irq 9 と 12 を使わないようにします。

  o  NEC Versa 6000 シリーズでは、0x2f8-0x33f のポートと irq 9, 10 を使
     わないようにします。

  o  ProStar 9200, Altima Virage, Acquiline Hurricane DX4-100 では irq 5
     と I/O ポートの 0x330-0x35f を使わないように設定します。メモリは多
     分、 0xd8000-0xdffff を使うように指定する必要があるでしょう。

  o  Siemens Nixdorf SIMATIC PG 720C では、メモリ 0xc0000-0xcffff, ポー
     ト 0x300-0x3bf を使うように設定します。

  o  TI TravelMate 5000 では 0xd4000-0xdffff の領域を使うようにします。

  o  東芝 T4900 CT では irq 5 と I/O ポート 0x2e0-0x2e8, 0x330-0x338 を
     使用しないように設定します。

  o  東芝 Tecra 8000 では、irq 3, irq 5, irq 9 を使わないように設定しま
     す。

  o  Twinhead 5100, HP 4000, Sharp PC-8700, PC-8900 では irq 9(サウンド
     用)と irq 12 を使わないように設定します。

  o  MPC 800 シリーズでは CD-ROM 用に irq 5 と 0x300-0x30f を使わないよ
     うに設定します。

  [訳注: VAIO PCG-C1R に関する情報が JF 文書の VAIO PCG-C1R で Linuxにあ
  ります]

  2.5.  個別ディストリビューションに関する注意

  この節は未完成です。訂正・追加をよろしくお願いします。

  2.5.1.  Debian

  Debian では、システムの起動スクリプトの配置は System V 風になっていま
  す。PCMCIA の起動スクリプトは /etc/init.d/pcmcia にインストールされ、
  起動オプションは /etc/pcmcia.conf で指定されます。 Debian における
  syslog の設定では、カーネルからのメッセージは /var/log/messages に書き
  込まれ、cardmgr からのメッセージは /var/log/daemon.log に書き込まれま
  す。

  Debian は、PCMCIA システムを 2 つのパッケージで配布しています。すなわ
  ち、cardmgr やオンラインマニュアル、設定スクリプトを含む ``pcmcia-cs''
  パッケージと、カーネルドライバモジュールを含む ``pcmcia-modules'' パッ
  ケージです。

  2.5.2.  RedHat, Caldera, Mandrake

  [訳注: 日本語 RedHat Linux, LASER5 Linux, Vine Linux を含みます]

  これらのディストリビューションの起動スクリプトの配置は System V 形式で
  す。PCMCIA の起動スクリプトは /etc/rc.d/init.d/pcmcia にインストールさ
  れ、起動オプションは /etc/sysconfig/pcmcia に書かれます。RedHat のデ
  フォルトのインストールでは、PCMCIA を無効にした状態の起動オプション
  ファイルがインストールされるので注意してください。 PCMCIA を有効にする
  には、環境変数 ``PCMCIA'' に ``yes'' を設定します。RedHat のデフォルト
  の syslogd の設定では、関連メッセージは全て /var/log/messages に記録さ
  れます。

  RedHat の PCMCIA パッケージには、ネットワーク設定スクリプト
  (/etc/pcmcia/network)を置き換えるファイルが入っています。そのた
  め、RedHat の linuxconf 設定システムとうまく組み合わせて使えます。これ
  は 1 つだけのネットワークアダプタを 1 組のネットワーク設定で使っている
  時には便利ですが、通常の PCMCIA ネットワークスクリプトのような柔軟性は
  ありません。PCMCIA の素のソース配布物からコンパイルとインストールを行
  うと、RedHat のツール群へのリンクが壊れてしまいます。 RedHat のスクリ
  プトを使いたければ、RedHat の RPM だけを使うか、以下の内容の
  /etc/pcmcia/network.opts を作るようにしてください:

       if [ -f /etc/sysconfig/network-scripts/ifcfg-eth0 ] ; then
           start_fn () {
               /sbin/ifup $1
           }
           stop_fn () {
               /sbin/ifdown $1
           }
       fi

  linuxconf (または netconf)を使ってネットワークインタフェースを設定する
  場合は、``kernel module'', ``I/O port'', `irq'' パラメータは空のままに
  してください。これらのパラメータを設定すると、PCMCIA サブシステムの適
  切な動作の邪魔になるかもしれません。

  マシンの起動時にネットワークサブシステムが立ち上がる際に ``Delaying
  eth0 initialization'' と ``[FAILED]'' と出力されるかもしれません。これ
  は実際には問題ありません: これは、PCMCIA のネットワークデバイスが設定
  されるまではネットワークインタフェースが初期化されないという意味です。
  RedHat では、多少修正が入った PCMCIA のソース配布物がカーネルの SRPM
  に付いています。単独のソースパッケージでは配布されていません。

  2.5.3.  Slackware

  [訳注: Plamo Linux を含みます]

  Slackware の起動スクリプト配置は BSD 風です。PCMCIA 起動スクリプトは
  /etc/rc.d/rc.pcmcia にインストールされ、起動オプションは rc.pcmcia で
  直接指定されます。PCMCIA 起動スクリプトは /etc/rc.d/rc.S から呼び出さ
  れます。

  2.5.4.  SuSE

  SuSE の起動スクリプトは System V 形式です。起動スクリプトは
  /sbin/init.d に置かれます。PCMCIA の起動スクリプトは
  /sbin/init.d/pcmcia にインストールされ、起動オプションは
  /etc/rc.config に書かれます。SuSE の起動スクリプトには多少の制限があ
  り、lilo の起動プロンプトから PCMCIA の起動変数を上書きすることができ
  ません。

  3.  インストールと設定における問題の解決

  この章では、PCMCIA サブシステムで起こしやすい問題をいくつか説明しま
  す。現われた症状を例と比べてみてください。この章では、特定のクライアン
  トドライバやカードに固有でない一般的な問題だけを説明します。

  問題を分析する前には、システムログが記録される場所を知っておいてくださ
  い(``個別ディストリビューションに関する注意'' を参照)。また、dmesg や
  lsmod のような、基本的な診断ツールにも慣れておいてください。それから、
  ほとんどのドライバコンポーネント (カーネルモジュール全てを含みます)に
  は専用のオンラインマニュアルが付いていることも忘れないでください。

  問題をできるだけ絞り込みましょう。複数のカードを使っている場合は、それ
  ぞれを単独で使ってみたり、色々な組合せを試してみましょう。 Linux を
  コールドブートした結果と Windows からウォームブートした結果を比べてみ
  ましょう。カードを挿入したまま起動した結果と起動後にカードを挿入した結
  果を比べてみましょう。通常はラップトップ機をドックに接続しているのであ
  れば、ドックから切り離してみましょう。また、2 つのソケットの動作が異な
  る場合もあります。

  Linux を PCMCIA 経由でインストールしている時に遭遇したドライバの問題を
  デバッグするのはほとんど不可能です。症状に基づいて問題を特定しても、イ
  ンストール用ディスクを修正するのは困難でしょう(特に、動作している
  Linux システムがない場合)。インストール用ディスクの修正方法は選んだ
  ディストリビューションによって全く違い、これは本文書で扱う範囲を超えて
  います。一般的にはこういう場合の最善の策は、別の手段で Linux をインス
  トールすること、最新のドライバを入手すること、それでどうしようもなけれ
  ば問題をデバッグすることです。

  3.1.  ベースとなる PCMCIA カーネルモジュールがロードされません

  症状:

  o  PCMCIA の起動スクリプトの実行中に、カーネルバージョンの不整合に関す
     るエラーが出る。

  o  起動後に lsmod を実行しても PCMCIA モジュールが表示されない。

  o  cardmgr がシステムログに ``no pcmcia driver in /proc/devices'' と報
     告を出す。

  カーネルモジュールにはバージョン情報が書き込まれており、これはモジュー
  ルのロード時に現在動作中のカーネルのバージョンと比べられます。この
  チェックの種類は、カーネルのオプションである CONFIG_MODVERSIONS の設定
  によって変わります。これが No ならば、カーネルのバージョン番号はコンパ
  イル時に各モジュールに書き込まれ、insmod はこの値が実行中のカーネルと
  一致するかをチェックします。CONFIG_MODVERSIONS が Yes ならば、カーネル
  がエクスポートしたそれぞれのシンボルには、ある種のチェックサムが与えら
  れます。これらのコードは全て、モジュールに組み込まれている該当コードと
  比較されます。この目的は、モジュールをできるだけバージョンに依存しない
  ようにすることです。というのも、チェックサムが変わるのはカーネルのイン
  タフェースが変わる時だけであり、一般的にはカーネルのマイナーバージョン
  が上がっても変わらないからです。実際には、チェックサムの制限は厳しいこ
  とが分かっています。なぜなら、多くのカーネルインタフェースはコンパイル
  時のカーネルのオプション設定に依存するからです。また、チェックサムによ
  る互換性の判定は非常に厳しいことが分かっています。

  実際の結論としては、カーネルモジュールはカーネルのバージョンと多くの
  カーネル設定オプションの設定値の両方に密接に関係しています。一般的に
  は、バージョン 2.0.31 のカーネル用に設定したモジュール群は、同じような
  設定になるように注意して構築していなければ、バージョン 2.0.31 の別の
  カーネルではロードできないことがあります。そのため、コンパイル済みの
  カーネルモジュールを配布するのは非常にやりにくい作業です。

  選択肢はいくつかあります:

  o  コンパイル済みのドライバを Linux ディストリビューションの一部として
     入手した場合には、そのディストリビューションに付属している、変更さ
     れていないカーネルを使っていることを確かめてください。コンパイル済
     みのモジュールを使うつもりであれば普通、これに対応するカーネルを使
     い続けなければなりません。

  o  カーネルの再設定やバージョンアップを行っている場合には、PCMCIA パッ
     ケージのコンパイルとインストールを最初から行わなければならないで
     しょう。カーネルのソースがインストールしてあれば、この作業は簡単で
     す。詳しい手順については、``コンパイルとインストール'' の章を見てく
     ださい。

  o  場合によっては、他のシステムコンポーネントと互換性がないために、
     カーネルモジュールを正しくロードできないことがあります。カーネルの
     バージョンアップをしている場合には、カーネルのソースコードに入って
     いる Documentation/Changes ファイルに書かれている、モジュールユー
     ティリティと binutils の「最低条件」を確かめてください。

  3.2.  ロードできないクライアントドライバモジュールがあります

  症状:

  o  基本モジュール (pcmcia_core, ds, i82365) は正しくロードされている。

  o  カードを挿した時に高いビープ音 + 低いビープ音が鳴る。

  o  cardmgr がシステムログにバージョン不整合のエラーを残す。

  一部のドライバモジュールはカーネルのサービスを必要としますが、これは
  カーネルの設定によりあったりなかったりします。例えば、SCSI カードドラ
  イバはカーネルが SCSI をサポートする設定になっていることを必要とし、
  ネットワークドライバはネットワーク対応のカーネルを必要とします。もし
  カーネルが必要な機能を持っていなければ、insmod は「undefined symbols」
  というエラーを出し、そのモジュールのロードを拒否します。insmod のエ
  ラーでは、バージョン不整合のエラーとシンボル不足のエラーが区別できない
  ことに注意してください。

  もっと正確に書くと以下のようになります:

  o  シリアル用のクライアントドライバである serial_cs を使うには、
     CONFIG_SERIAL によってカーネルのシリアルドライバを有効する必要があ
     ります。このドライバはモジュールとして作られます。

  o  マルチポートシリアルカードや、シリアルデバイスやモデムデバイスを含
     むマルチファンクションカードをサポートするには、
     CONFIG_SERIAL_SHARE_IRQ を有効にする必要があります。

  o  SCSI 用のクライアントドライバを使うには、CONFIG_SCSI を有効にする必
     要があります。また、適切なトップレベルドライバオプションを設定する
     必要があります(バージョン 2.1 のカーネルでは CONFIG_BLK_DEV_SD,
     CONFIG_BLK_DEV_SR 等)。これらはモジュールとして構築されます。

  o  ネットワーク用のクライアントドライバを使うには、CONFIG_INET を有効
     にする必要があります。カーネルのネットワークサポートは、モジュール
     として組み込むことはできません。

  o  トークンリング用のクライアントドライバを使うには、CONFIG_TR を有効
     にする必要があります。

  解決方法は 2 通りあります:

  o  必要な機能を有効にしてカーネルを再構築します。

  o  この機能がモジュールとしてコンパイルされていれば、
     /etc/pcmcia/config を修正して、必要なモジュールを予めロードしておく
     ようにします。

  /etc/pcmcia/config では、特定のクライアント用にロードする必要がある追
  加のモジュールを指定することができます。例えばシリアルドライバを指定す
  る時には以下のように設定します:

       device "serial_cs"
         class "serial" module "misc/serial", "serial_cs"

  複数のパスを、現在のカーネルのバージョンに対応するモジュールのトップレ
  ベルディレクトリからの相対パスで指定します。相対パスが全く与えられなけ
  れば、パスのデフォルト値は pcmcia サブディレクトリになります。

  3.3.  割り込みのスキャンに失敗します

  症状:

  o  PCMCIA ドライバがロードされると、カードが挿さっていなくてもシステム
     が固まってしまう。

  o  システムログには、システムが固まる直前にちゃんとホストコントローラ
     が検出したことが記録されているが、割り込みの検出の結果は記録されて
     いない。

  ホストコントローラの種類を識別した後、ソケットドライバは空いている割り
  込みを探査します。この探査では、空いているように見える割り込みそれぞれ
  に対するコントローラのプログラミングが行われ、その後には「ソフト」な割
  り込みの生成が行われます。これは割り込みが正しく検出されたかどうかを調
  べるために行われます。場合によっては、特定の割り込みを探査すると他のシ
  ステムデバイスとの衝突が起こることがあります。

  探査を行う理由は、空いている(つまり、Linux の他のデバイスドライバに予
  約されていない)と思われる割り込みで、まだホストコントローラに物理的に
  接続されていないか、またはドライバを持っていない他のデバイスに接続され
  ているものを識別することです。

  探査が成功すると、システムログには以下のような記録が残ります:

       Intel PCIC probe:
         TI 1130 CardBus at mem 0x10211000, 2 sockets
         ...
         ISA irqs (scanned) = 5,7,9,10 status change on irq 10

  先に進む方法は 2 つあります:

  o  割り込みの探査は、ソケットドライバに対する irq_list パラメータを
     使った割り込みのリストによって制限されます。例えば
     ``irq_list=5,9,10'' を指定すると、探査は 3 つの割り込みに対してしか
     行われません。全ての PCMCIA デバイスは、これらの割り込みを使うよう
     に制限されます(探査はうまくいくものとします)。安全に検出できる割り
     込みを見つけるには、試行錯誤が必要かもしれません。

  o  ``do_scan=0'' オプションを付けてソケットドライバをロードすると、割
     り込みの探査は全く行われなくなります。この場合、デフォルトの割り込
     みリストが使われるので、既に他のデバイスに割り当てられた割り込みを
     避けることができます。

  いずれの場合も、探査用のオプションの指定には PCMCIA 起動スクリプト内の
  PCIC_OPTS の定義を用います。設定例を以下に示します:

       PCIC_OPTS="irq_list=5,9,10"

  割り込み探査で問題が起こった時には、/proc/interrupts を調べても全く役
  に立たないことは肝に命じておいてください。この探査は、Linux の他のドラ
  イバが既に使っている割り込みを使わないようにする程度には賢いのです。で
  すから、PCMCIA のドライバは既に /proc/interrupts の全ての情報を使って
  います。システムの設計によっては、動作中でないデバイスでも割り込みを占
  有し、PCMCIA が探査を行った時に問題を起こすことがあります。

  3.4.  I/O ポートのスキャンに失敗します

  症状:

  o  カードが挿さっていなくても、cardmgr を最初に起動した時にシステムが
     固まってしまう。

  o  システムログには、割り込み探査の結果も含めてホストコントローラの探
     査が成功したと記録されるが、I/O 探査の結果は記録されない。

  o  I/O 探査は正常終了するが、でたらめなアドレスがたくさん除外されると
     いう症状が出ることもある。

  /etc/pcmcia/config.opts に挙げられている I/O ポート領域を cardmgr が処
  理する時、カーネルはこれらの範囲を探査し、I/O 空間を占有しているけれど
  Linux のドライバには割り当てられていない隠れたデバイスを検出します。探
  査では読み取りしか行われませんが、デバイスからの読み出しが重要なシステ
  ム関数と衝突し、その結果システムが固まることが稀に起こります。

  お使いのシステムのユーザガイドを見れば、システムデバイスの割り当て表が
  載っており、I/O 領域とメモリ領域の範囲がわかるかもしれません。そうする
  と、config.opts でこれらの領域を明示的に除外することができます。

  別の方法として、システムの探査が信頼できない場合には、CORE_OPTS の設定
  を``probe_io=0'' とすることで探査を無効にすることができます。この場合
  にはデフォルトの設定を使わないで、ちゃんと使えるポートの範囲だけを注意
  深く config.opts に設定しなければなりません。

  3.5.  メモリの検出に失敗します

  症状:

  o  カードが挿さっていない時にはコアドライバが正常にロードされ、システ
     ムログにもエラーが残らない。

  o  カードを挿すと、ビープ音がすることなく、即座にシステムが固まったり
     リブートする。

  以下のような症状が出る場合もあります:

  o  どんなカードを挿しても必ず「高いビープ音 + 低いビープ音」が鳴る。

  o  どんなカードも ``anonymous memory cards(未知のメモリカード)'' と認
     識される。

  o  あちこちのメモリ領域が除外されていることがシステムログに記録され
     る。

  コアモジュールは、16 ビットカードが初めて挿入された時にメモリ走査を実
  行します。この操作はメモリにマップされている他のデバイスと衝突する可能
  性があります。またバージョン3.0.0 以前のパッケージでは、最近のドライバ
  よりもきわどい走査を行っていました。メモリウィンドウは
  /etc/pcmcia/config.opts で定義されています。デフォルトのウィンドウは大
  きいので、走査をもっと狭い範囲に制限すればよいでしょう。試すのにちょう
  どよい範囲は 0xd0000-0xdffff, 0xc0000-0xcffff, 0xc8000-0xcffff,
  0xd8000-0xdffff あたりです。

  DOS または Windows の PCMCIA ドライバがあれば、これらのドライバが使っ
  ているメモリ領域を調べてもいいでしょう。DOS のメモリアドレスは多くの場
  合、「セグメント」の形で指定されており、最終的な 16 進アドレスとは離れ
  ている点に注意してください(絶対アドレス 0xd0000 が 0xd000 と与えられた
  りします)。config.opts を変更する時には、追加の桁を必ず足し戻してくだ
  さい。

  普通でない場合として、メモリ探査の失敗が、ホストコントローラに関するタ
  イミングレジスタの設定の問題である可能性があります。一般的なタイミング
  の問題の扱いについては、``起動オプション''の節をご覧ください。

  o  cs: warning: no high memory space available!

  CardBus ブリッジは、ISA バスのアーキテクチャにおける 640KB-1MB の「メ
  モリの隙間」の外にメモリウィンドウを割り当てることができます。高位のメ
  モリ領域を使うように CardBus ブリッジを設定するのは、一般的には良い考
  えです。なぜなら他のデバイスと衝突しにくいからです。また、 CardBus の
  カードは大きなメモリウィンドウを必要としますが、これを低位のメモリ領域
  に取るのは困難であったり不可能だったりします。カードサービスが CardBus
  ブリッジに対してはウィンドウを割り当てる際には、 config.opts に高位の
  メモリと低位のメモリが両方定義されていれば、カードサービスは優先的に高
  位のメモリを使います。現在のデフォルトの config.opts には高位アドレス
  のウィンドウ 0xa0000000-0xa0ffffff が含まれています。読者の皆さんが
  CardBus ブリッジを持っており、かつ古い PCMCIA ドライバからのバージョン
  アップを行った場合は、このアドレスがまだ定義されていないのであれば、こ
  れを追加しましょう。

  場合によっては、デフォルトの高位メモリウィンドウが使えないことがありま
  す。IBM ThinkPad の一部のモデルでは、デフォルトのウィンドウの代わりに
  0x60000000-0x60ffffff のウィンドウが使えます。

  3.6.  カードの抜き挿しを検出できません

  症状:

  o  起動時にカードが挿してあれば、カードの検出と設定がうまく行われる。

  o  カードの挿入と抜き取りを行ってもドライバが反応しない。すなわち、シ
     ステムログにも記録が残らないし、ビープ音もしない。

  大抵の場合、ソケットドライバ(i82365 または tcic)は適切な割り込みの探査
  と選択を行い、カードの状態変化を知らせます。割り込みの自動的探査は
  Intel 互換の一部のカードではうまく動作しません。このようなカードとして
  は Cirrus 製のチップがありますが、これが IBM の ThinkPad の一部で使わ
  れています。探査の時、あるデバイスが動作していなければ、その割り込みは
  使えるように見えるかもしれません。このような場合には、ソケットドライバ
  は他のデバイスが使っている割り込みを選ぶかもしれません。

  i82365 ドライバと tcic ドライバでは、irq_list オプションを使って調べる
  割り込みを制限することができます。このリストは PCMCIA カードが使える割
  り込みの組合せと、カードの状態変化を監視する割り込みの組合せを制限しま
  す。cs_irq オプションを使って、カードの状態変化の監視に使う割り込みを
  明示的に設定することもできます。

  使える割り込みを見つからなければ、呼び出しモード(polled status mode)を
  使うこともできます。i82365 と tcic のどちらでも poll_interval=100 と
  いったオプションを設定することができます。この設定を行うと、カードの状
  態は 1 秒間に 1 回 行われる呼び出しで調べられます。このオプション
  は、PCMCIA カードで使える割り込みが足りない場合にも使うべきです。特
  に、複数のホストコントローラを持つシステムの場合には、カードの状態の監
  視に専用の割り込みを割り当ててもいいことはありません。

  これらのオプションは全て、/etc/rc.d/rc.pcmcia または
  /etc/sysconfig/pcmcia ファイル内の PCIC_OPTS= 行で設定することになって
  いるはずです。どちらのファイルを使うかはサイトの設定によって異なりま
  す。

  3.7.  システムリソースの不足

  症状:

  o  カードを挿入すると、正しく認識されるが設定ができない( 高いビープ音
     + 低いビープ音が鳴ります)。

  o  以下のメッセージのいずれかがシステムログに出力される:

       RequestIO: Resource in use
       RequestIRQ: Resource in use
       RequestWindow: Resource in use
       GetNextTuple: No more items
       could not allocate nn IO ports for CardBus socket n
       could not allocate nnK memory for CardBus socket n
       could not allocate interrupt for CardBus socket n

  割り込みが不足する場合、割り込み探査に問題があることが多くあります( ``
  割り込みのスキャンに失敗します''の項を参照してください)。場合によって
  は、探査はうまく行われているように見えるけれど、利用できる割り込みが 1
  つあるいは 2 つしか報告されないこともあります。システムログを調べて、
  探査の結果がそれらしいかどうかを見てください。探査を行わず、割り込みを
  手動で選んでも問題が解決することがあります。

  割り込みの検出がうまく動作していない場合は、割り込みが全く足りなくて
  カード挿入の監視用に割り込みを割り当てることが好ましくないのに、ソケッ
  トドライバがカード挿入の監視用の割り込みを割り当てているのかもしれませ
  ん。このような場合には、PCIC_OPTS に ``poll_interval=100' を設定してコ
  ントローラの設定を呼び出しモードに切り替えるといいでしょう。あるい
  は、CardBus コントローラの場合には、 ``pci_csc=1'' を試してください。
  これはカードの状態変化の監視に (利用可能ならば) PCI 割り込み を使うた
  めの設定です。

  I/O ポートが不足することは普通はありませんが、必要とする I/O ポート空
  間が巨大かつ連続で、整列されてなければならないカードを使う場合や、特定
  小数の位置の I/O ポートしか認識しないカードを使う場合には、不足するこ
  ともあります。普通は /etc/pcmcia/config.opts に設定されているデフォル
  トの I/O ポート範囲で十分ですが、これを広げることもできます。稀にしか
  起きませんが、I/O ポートの不足が I/O ポートの探査の失敗によって起こる
  ことがあります( ``I/O ポートのスキャンに失敗します''を参照)。

  メモリの不足も、config.opts で設定されているデフォルトのメモリウィンド
  ウ設定を使っていれば普通は起こりません。CardBus カードは、典型的な 16
  ビットカードよりも大きなメモリ領域を必要とすることがあります。CardBus
  のメモリウィンドウは(PC システムが持つ 640KB-1MB の領域の単なる「隙
  間」でなく)ホストの PCI アドレス空間のどこにでもマップすることができる
  ので、高位メモリ領域(0xa0000000-0xa0ffffff など)に大きなメモリウィンド
  ウを取ると問題が解決することがあります。

  3.8.  2 枚のカードを挿入した時だけリソースが衝突します

  症状:

  o  2 枚のカードを別々に使うとうまく動作する。

  o  両方のカードを同時に挿入すると、片方しか動作しない。

  これは普通、Linux が認識していないシステムデバイスとリソースが衝突して
  いる時の症状です。PCMCIA デバイスは動的に設定されるので、例えば、割り
  込みは特定のカードやソケットに明確に割り当てられるのではなく、必要に応
  じた割り当てが行われます。利用可能と思われるリソースのリストを与える
  と、カードには設定された順にリソースが割り当てられます。この場合、最後
  に設定されたカードには、実際には空いていないリソースが割り当てられてい
  ます。

  システムログを調べて、動作していないカードが使っているリソースを探しま
  しょう。/etc/pcmcia/config.opts を編集してこのようなリソースを除外する
  設定にし、cardmgr デーモンを再起動してリソースデータベースを再読み込み
  させてください。

  3.9.  デバイスの設定が終わりません

  症状:

  o  カードを挿入すると、高いビープ音が 1 回だけ鳴る。

  o  それ以降はカードの抜き挿しを行っても無視される。

  この症状が示すのは、カードはうまく認識されているものの、何らかの理由で
  cardmgr が設定処理を終えられないということです。もっともありがちな原因
  は、カード設定スクリプトのどこかの処理がブロックされていることです。わ
  かりやすい例としては、物理的にネットワークに繋がっていないのにネット
  ワークカードを挿し込むとネットワーク設定スクリプトがブロックされること
  が挙げられます。

  原因を特定するためには、手動で設定スクリプトを実行し、どこでブロックさ
  れるかを調べるとよいでしょう。スクリプトは /etc/pcmcia ディレクトリに
  あります。スクリプトに与える引き数は、デバイス名と動作の 2 つで
  す。cardmgr デーモンは設定コマンドをシステムログに記録します。例え
  ば、``./network start eth0'' というコマンドが cardmgr が実行した最後の
  プログラムであるという記録がシステムログに残っていれば、以下のコマンド
  を実行するとスクリプトの動作をトレースすることができます:

       sh -x /etc/pcmcia/network start eth0

  4.  使い方と機能

  4.1.  PCMCIA デバイスの設定と監視のためのツール

  モジュールが全て正しくロードされれば、カードが全く挿入されていない時の
  lsmod コマンドの出力は以下のようになります:

       Module                  Size  Used by
       ds                      5640   2
       i82365                 15452   2
       pcmcia_core            30012   3  [ds i82365]

  システムログには、ソケットドライバが検出したホストコントローラとソケッ
  トの数も記録されるはずです。

  4.1.1.  設定用デーモン `cardmgr'

  cardmgr の仕事は、PCMCIA ソケットの監視を行い、必要に応じてクライアン
  トドライバをロードし、ユーザレベルで動作するスクリプトをカードの抜き挿
  しに応じて実行することです。cardmgr は自分自身の動作をシステムログに記
  録しますが、ビープ音を使ってもカードの状態変更を知らせます。ビープ音の
  音色は、特定の設定段階における成功または失敗を示します。高いビープ音が
  二度鳴った時は、カードは正しく認識・設定されたことが示されています。高
  いビープ音の後に低いビープ音が鳴った時は、カードは認識はされたものの何
  らかの原因により設定できなかったことが示されています。低いビープ音が一
  度だけ鳴った時は、カードが認識できなかったことが示されています。

  cardmgr デーモンは、/etc/pcmcia/config に置かれている既知のタイプの
  カードのデータベースに基づいてカードを設定します。このファイルは各種の
  クライアントドライバについて書かれています。それから、各種カードの識別
  方法と、どのカードにどのドライバを使うかが書かれています。このファイル
  の書式の説明は、オンラインマニュアルの pcmcia(5) にあります。

  4.1.2.  ソケットの状態ファイルとスタブ

  cardmgr は各ソケットについてのデバイス情報を /var/state/pcmcia/stab ま
  たは /var/lib/pcmcia/stab に記録します(どちらが使われるかはファイルシ
  ステムの配置によります)。以下に stab の例を示します:

       Socket 0: Adaptec APA-1460 SlimSCSI
       0       scsi    aha152x_cs      0       sda     8       0
       0       scsi    aha152x_cs      1       scd0    11      0
       Socket 1: Serial or Modem Card
       1       serial  serial_cs       0       ttyS1   5       65

  デバイスの状態を示している行の最初の欄がソケット番号、2 つ目がデバイス
  クラス、3 つ目がドライバ名、4 つ目がそのドライバが関係しているデバイス
  の数、5 つ目はデバイス名、最後の 2 つはそのデバイスのメジャーデバイス
  番号とマイナーデバイス番号です(使用できる場合)。詳しい情報については
  stab のオンラインマニュアルを見てください。

  4.1.3.  cardctl, cardinfo ユーティリティ

  cardctl コマンドを使うと、ソケットの状態をチェックすることや、ソケット
  がどのように設定されているかを調べることができます。このコマンドを使っ
  て、カードの設定状態を変更することもできます。 ``cardctl config'' コマ
  ンドの出力例を以下に示します:

       Socket 0:
         not configured
       Socket 1:
         Vcc = 5.0, Vpp1 = 0.0, Vpp2 = 0.0
         Card type is memory and I/O
         IRQ 3 is dynamic shared, level mode, enabled
         Speaker output is enabled
         Function 0:
           Config register base = 0x0800
             Option = 0x63, status = 0x08
           I/O window 1: 0x0280 to 0x02bf, auto sized
           I/O window 2: 0x02f8 to 0x02ff, 8 bit

  ``cardctl ident''を実行することにより、カードの識別情報を得ることもで
  きます:

       Socket 0:
         no product info available
       Socket 1:
         product info: "LINKSYS", "PCMLM336", "A", "0040052D6400"
         manfid: 0x0143, 0xc0ab
         function: 0 (multifunction)

  ``cardctl suspend'' コマンドと ``cardctl resume'' コマンドを使うと、対
  応するドライバを取り外すことなくカードを停止させることができま
  す。``cardctl reset'' コマンドはカードのリセットと再設定を行おうとしま
  す。``cardctl insert'' コマンドと ``cardctl eject'' コマンドは、カード
  を物理的に抜き挿しした時に実行する動作を疑似的に行います。この動作には
  ドライバのロードとアンロード、デバイスの設定と停止が含まれます。

  X を実行していれば、cardinfo を使って全ての PCMCIA ソケットの現在の状
  態をグラフィカルに表示することができます。この内容は ``cardctl
  config'' に似ています。cardinfo を使うと、 cardctl の他の機能のほとん
  どをグラフィカルに操作することもできます。

  4.1.4.  カードの抜き挿し

  理論的には、PCMCIA カードはいつでも抜き挿しすることができます。しか
  し、アプリケーションが使っている最中にカードを抜くのはよくありませ
  ん。1.1.77 より古いバージョンのカーネルは、シリアル/モデムカードを抜く
  と固まることがありましたが、この問題は既に修正されています。

  一部のカードは安全にイジェクトできません。特に ATA/IDE インタフェース
  カードと SCSI インタフェースカードは安全にホットスワップできません。こ
  の問題を完全に解決するには Linux のブロックデバイスのモデルの大幅な変
  更が必要なので、この問題はおそらく修正されないでしょう。また、CardBus
  カードはどんな種類のものであれ安全にホットイジェクトできません。こちら
  の次第に改善していくでしょう。CardBus ドライバ中のホットスワップに関す
  るバグの発見と修正が現在行われつつあるからです。これらの種類のカードを
  使う場合は、カードをイジェクトする前に必ず ``cardctl eject'' を実行す
  ることをお勧めします。

  4.1.5.  カードサービスと APM(Advanced Power Management)

  APM (Advanced Power Management) に対応するようにカーネルを設定してあれ
  ば、カードサービスに APM 対応を組み込むことができます。APM のカーネル
  ドライバを管理しているのは Stephen Rothwell さん
  (Stephen.Rothwell@canb.auug.org.au) です。 apmd デーモンを管理している
  のは Avery Pennarun さん (apenwarr@worldvisions.ca) であり、詳しい情報
  は <http://www.worldvisions.ca/~apenwarr/apmd/> で入手できます。システ
  ム上で互換バージョンの APM が検出されれば、PCMCIA モジュールは自動的に
  APM 用に設定されます。

  APM が設定されているかどうかに関わらず、ラップトップ機をサスペンドする
  前に ``cardctl suspend'' を使い、レジュームの後に ``cardctl resume''
  を使って、PCMCIA カードの停止と再起動を安全に行うことができます。この
  操作は使用中のモデムに対しては行えません。なぜなら、シリアルドライバは
  モデムの動作パラメータの保存と復元を行うことができないからです。

  システムによっては APM が不安定なことがあるようです。APM と PCMCIA を
  組み合わせると問題が起きる場合には、バグ報告を行う前にどちらのパッケー
  ジに問題があるかを絞りこんでください。

  一部のドライバ(特に PCMCIA の SCSI ドライバ)は、サスペンドするとレ
  ジュームを行うことができません。PCMCIA の SCSI カードを使う場合には、
  システムをサスペンドする前には必ず ``cardctl eject'' を実行してくださ
  い。

  4.1.6.  PCMCIA システムの終了

  PCMCIA パッケージ全体をアンロードするには、rc.pcmcia スクリプトを以下
  のように実行します:

  /etc/rc.d/rc.pcmcia stop

  このスクリプトの実行には数秒かかります。これは、全てのクライアントドラ
  イバが正常に停止するのを待つためです。あるデバイスが使用中の場合、停止
  が完全には行われず、カーネルモジュールがアンロードされないことがありま
  す。これを避けるには、rc.pcmcia スクリプトを実行する前に ``cardctl
  eject'' を実行して全てのソケットを停止させてください。 cardctl コマン
  ドの終了ステータスは、停止できなかったソケットがあるかどうかを示しま
  す。

  4.2.  PCMCIA 設定スクリプトの概要

  PCMCIA デバイスはどのように設定され機能するかについていくつかの「クラ
  ス」に分類できます。クラスは /etc/pcmcia/config のデバイスドライバと対
  応しています。現時点では I/O デバイスに 5 つのクラス(network, SCSI,
  cdrom, fixed disk, serial)があり、メモリデバイスには 2 つのクラ
  ス(memory, FTL)があります。それぞれのクラスごとに 2 つのスクリプトが
  /etc/pcmcia/config に用意されています: 一つが設定用のメインスクリプト(
  例えば SCSI デバイス用なら /etc/pcmcia/scsi)で、もう一つは設定オプショ
  ンを指定するスクリプト(/etc/pcmcia/scsi.opts)です。デバイスを設定する
  メインスクリプトは、カードが挿入された時にデバイスを設定するために起動
  され、カードが抜かれた時にはデバイスを停止させるために起動されます。複
  数のデバイスに対応しているカードが挿入された場合、このスクリプトはデバ
  イスごとに起動されます。

  設定用のスクリプトは、デバイスについての情報のいくつかを stab ファイル
  から取り出します。各スクリプトは「デバイスアドレス」を構築し、これを
  ADDRESS というシェル変数に設定します。この「デバイスアドレス」は、呼び
  出されたスクリプトの設定対象であるデバイスを一意に記述するものです。こ
  の「デバイスアドレス」は *.opts スクリプトに渡され、*.optsスクリプト
  は、このアドレスにあるデバイスをどのように設定すべきかの情報を返しま
  す。いくつかのデバイスではデバイスアドレスは単なるソケット番号ですが、
  その他のデバイスでは設定の仕方を決めるのに役立つ情報が含まれていること
  もあります。例えば、ネットワーク用のデバイスはハードウェアイーサネット
  アドレスをデバイスアドレスの一部として network.opts スクリプトに渡すの
  で、ハードウェアアドレスによって異なる設定を行うことも可能です。

  デバイスアドレスの最初の部分は、PCMCIA の現在の「スキーム(scheme)」を
  示します。このパラメータを使って、一つの外部ユーザー変数によって複数の
  デバイス設定を切り替えることが可能です。スキームの使い方の一つは、
  ``home'' スキームと ``work'' スキームの 2 種を用意して、それぞれに異な
  るネットワークパラメータを設定することです。現在使っているスキームは
  ``cardctl スキーム'' コマンドで変更できます。特にスキームを設定しない
  場合は、``default'' スキームが使われます。

  一般論として、ラップトップ機の Linux の場合、PCMCIA デバイスは PCMCIA
  デバイス用のスクリプトでのみ設定すべきで、常設のデバイスと同じように [
  訳注: /etc/rc.d/rc.inet* などで] 設定してはいけません。しかし Linux
  ディストリビューションによっては、ディストリビューション独自のデバイス
  設定ツールで PCMCIA パッケージの設定を行うようになっています。このよう
  な場合には、これ以降の章の内容が当てはまらないことがあります。理想を言
  えば、そういった部分の解説文書はディストリビューションの管理者が用意す
  べきでしょう。

  4.3.  PCMCIA ネットワークアダプタ

  Linux ではイーサネットタイプのネットワークインタフェースは eth0, eth1
  といった名前になっています。トークンリングのアダプタも同様ですが、イン
  ターフェイス名は tr0, tr1 となります。ネットワークインタフェースの状態
  のチェックや変更を行うには ifconfig コマンドを使います。Linux の特徴と
  して、ネットワークインタフェースが対応するデバイスは /dev の下には無い
  ので、デバイスファイルが無くても驚かないでください。

  PCMCIA イーサネットカードが検出されると、空いている最初のインター
  フェース名が割り当てられます。これは多分 eth0 でしょう。 cardmgr が自
  動的に /etc/pcmcia/network スクリプトを実行してインターフェースに関す
  る設定を行いますが、ネットワークに関する設定は /etc/pcmcia/network か
  ら読み込まれます。network スクリプトと network.opts スクリプトが実行さ
  れるのは、イーサネットカードが実際に存在する時だけです。ネットワークの
  自動設定機能をシステムが備えている場合、これが PCMCIA 対応であることも
  そうでないこともあります。お使いの Linux ディストリビューションの文書
  や ``個別ディストリビューションに関する注意'' の節を見て、PCMCIA の
  ネットワークデバイスの設定は自動化されたツールが行うのか、それとも
  network.opts を手で編集して行うのかを調べてください。

  network.opts に渡されるデバイスアドレスは、コンマで区切られた 4 つの
  フィールドから成っています。4 つのフィールドは、スキーム、ソケット番
  号、デバイスインスタンス、カードのハードウェアアドレスです。デバイスイ
  ンスタンスは複数のネットワークインタフェースを持つようなカードの(付加
  的な)デバイス番号なので、通常は 0 になります。もし異なる目的に使う複数
  のネットワークカードを持っているなら、ソケット番号によって設定オプショ
  ンを変えることが可能で、その場合の network.opts は以下のようになりま
  す:

       case "$ADDRESS" in
       *,0,*,*)
           # definitions for network card in socket 0
           ;;
       *,1,*,*)
           # definitions for network card in socket 1
           ;;
       esac

  あるいは、それぞれのカードのハードウェアアドレスを使って以下のように設
  定することもできます:

       case "$ADDRESS" in
       *,*,*,00:80:C8:76:00:B1)
           # definitions for a D-Link card
           ;;
       *,*,*,08:00:5A:44:80:01)
           # definitions for an IBM card
       esac

  4.3.1.  ネットワークデバイスのパラメータ

  network.opts では以下のパラメータを定義することができます:

     IF_PORT
        イーサネットのトランシーバの種類を自動検出できない特定の 16 ビッ
        トカードに対して、これを指定します。詳しくは ``man ifport'' を見
        て

     PUMP
        値には y か n を指定します。このパラメータは、RedHat の pump
        デーモンを用いて、ホストの IP アドレスと経路情報を BOOTP か DHCP
        を使って取得するかどうかを指定します。

     BOOTP
        値には y か n を指定します。このパラメータは、bootpc を使って、
        ホストの IP アドレスと経路情報を BOOTP プロトコルを使って取得す
        るかどうかを示します。

     DHCP
        値には y か n を指定します。このパラメータは、ホストの IP アドレ
        スと経路情報を DHCP サーバから取得するかどうかを示します。ネット
        ワークスクリプトは最初に dhcpcd を探し、その次に dhclient を探し
        ます。

     IPADDR
        このインタフェースに対する IP アドレス。

     NETMASK, BROADCAST, NETWORK
        ネットワークの基本的なパラメータです。詳しくはネットワーク関連の
        HOWTO 文書をご覧ください。

     GATEWAY
        このホストが所属するサブネットのゲートウェイの IP アドレスです。
        終点アドレスがこのサブネットの外部になっているパケットは、この
        ゲートウェイに送られます。

     DOMAIN
        このホストのローカルのネットワークドメイン名です。これは
        /etc/resolv.conf を生成する際に使います。

     SEARCH
        ホスト名参照の検索リストであり、/etc/resolv.conf に追加されま
        す。DOMAIN と SEARCH は互いに排他的です。詳しくは ``man
        resolver'' をご覧ください。

     DNS_1, DNS_2, DNS_3
        このインタフェースが使うネームサーバのホスト名または IP アドレ
        ス。これは /etc/resolv.conf に追加されます。

     MOUNTS
        このインタフェースがマウントに使う NFS マウントポイントを空白で
        区切って並べたリストです。

     IPX_FRAME, IPX_NETNUM
        IPX ネットワーク用のパラメータです。フレームタイプとネットワーク
        番号を表し、ipx_interface コマンドに渡されます。

  指定例を以下に示します:

       case "$ADDRESS" in
       *,*,*,*)
           IF_PORT="10base2"
           BOOTP="n"
           IPADDR="10.0.0.1"
           NETMASK="255.255.255.0"
           NETWORK="10.0.0.0"
           BROADCAST="10.0.0.255"
           GATEWAY="10.0.0.1"
           DOMAIN="domain.org"
           DNS_1="dns1.domain.org"
           ;;
       esac

  NFS ファイルシステムのマウントやアンマウントを自動的に行うには、まずマ
  ウントするファイルシステムを全て /etc/fstab に記述します。ただし、マウ
  ント用オプションとして noauto を指定してください。 network.opts では、
  ファイルシステムのマウントポイントを MOUNTS 変数に列挙します。NFS マウ
  ントを行っている最中は、ネットワークを停止させるのに cardctl コマンド
  や cardinfo コマンドを使うことが特に重要です。ネットワークカードが予告
  無しに抜かれると、NFS ファイルシステムが正常にアンマウントできないから
  です。

  通常のネットワーク設定オプションに加えて、network.opts ではインタ
  フェースの設定が終わった直後やインタフェースを停止する直前に行う追加の
  動作を指定することができます。network.opts で start_fn というシェル関
  数が定義されていれば、ネットワークスクリプトはインタフェースを設定した
  直後にこの関数を呼び出します。この際には、インタフェース名が最初の(そ
  して唯一の)引き数として関数に渡されます。同様に、stop_fn というシェル
  関数が定義されていれば、このシェル関数はインタフェースが停止する直前に
  呼び出されます。

  一部のカードでは、トランシーバの種類を IF_PORT の設定で選べます。これ
  は数値で選ぶか、トランシーバの種類を表すキーワードで選びます。全ての
  ネットワークドライバのデフォルト動作は、可能ならばインタフェースは自動
  検出し、検出ができなければ 10BaseT を使うというものです。ifport コマン
  ドを使うと、トランシーバの種類の現在値の確認や設定ができます。実行例を
  以下に示します:

       # ifport eth0 10base2
       #
       # ifport eth0
       eth0    2 (10base2)

  現在(3.0.10 以降)の 3c589 用ドライバは、トランシーバの変化をいつでも即
  座に自動検出するはずです。以前のバージョンの 3c589 用のドライバは、ト
  ランシーバの自動検出アルゴリズムがいくぶん遅く、問題点もありました。こ
  のようなバージョンでは、カードが設定されてから適切なネットワークケーブ
  ルをカードに繋ぐか、以下のようなコマンドを実行して強制的に自動検出を実
  行させなければなりません:

       ifconfig eth0 down up

  4.3.2.  個別のカードに関するコメント

  o  IBM CCAE と Socket EA カードではネットワークデバイスの設定の際にト
     ランシーバの種類(10base2, 10baseT, AUI)を指定する必要があります。シ
     ステムのログファイルを調べて、設定されているトランシーバの種類が、
     物理的に接続しているものと一致していることを確認してください。

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

  o  IBM CCAE, NE4100, Thomas Conrad, Kingston といったカードでトラブル
     が生じる場合は、pcnet_cs モジュールの mem_speed=# オプションを使っ
     てメモリへアクセスする時間を増やしてみてください。指定例は標準の
     config.opts ファイルにあります。 mem_speed=1000(ナノセコンド単位)ま
     で上げてみてください。

  o  New Media Ethernet アダプタなどの場合、I/O ポートにアクセスする時間
     を io_speed=# オプションで指定する必要があるかもしれません。このオ
     プションは pcmcia_core モジュールをロードする際に指定します。起動ス
     クリプト中の CORE_OPTS を編集して、このオプションを指定してくださ
     い。

  o  New Media Ethernet ドライバのマルチキャスト対応は不完全です。最新の
     ドライバはマルチキャスト対応のカーネルで動作しますが、マルチキャス
     トのパケットは無視します。無差別モードは正しく動作するはずです。

  o  IBM と 3Com のトークンリングアダプタが使うドライバは、初期化の際に
     カードがリングに接続されていなければ、非常におかしな動作をします。
     これらのカードは、必ず電源を入れる前にネットワークに接続しましょ
     う。 ifconfig が報告するハードウェアアドレスが全て 0 ならば、たぶん
     メモリウィンドウの設定に問題があります。

  o  Linksys, D-Link, IC-Card 製の 10baseT/10base2 カードは、Linux 用ド
     ライバでは扱えない独特の方法でトランシーバの種類を検出します。回避
     方法の 1 つは、DOS を起動して、ベンダーが提供しているユーティリティ
     を使ってトランシーバの種類を選択し、その後で Linux をウォームブート
     することです。別の方法として、この機能を実行する Linux 用のユーティ
     リティを <ftp://sourceforge.org/pcmcia/extras/dlport.c> で入手でき
     ます。

  o  WaveLAN 無線ネットワークアダプタ向けに、Jean Tourrilhes さん
     (jt@hpl.hp.com)が wireless HOWTO を書いています。これは
     <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/> にありま
     す。

  4.3.3.  ネットワークアダプタにまつわる問題の診断

  o  あなたのカードはイーサネットカードとして認識されていますか? ログ
     ファイルをチェックして、cardmgr がカードを正しく認識し、ネットワー
     クドライバを起動しているか確認してください。もしだめならば、サポー
     トされているカードと「互換」と称していてもあなたのカードはまだ使え
     ないのでしょう。これは、カードが「NE2000 互換」と称している時によく
     起きるようです。

  o  カードは正しく設定されていますか? もしサポートされているカードを使
     い、 cardmgr に正しく認識されてるのにうまく動かないという場合は、他
     のデバイスと IRQ やポートが衝突しているのかもしれません。カードが
     使っているリソースをチェックして(ログファイルを調べて)、カードが別
     の IRQ やポートを使うように /etc/pcmcia/config.opts  を設定し、問題
     となる IRQ やポートを使わないようにします。

  o  カードは正しく設定されているが(特に負荷が高い時に)固まってしまうこ
     とが時々起こる場合、ソケットドライバのタイミングを制御するパラメー
     タを変える必要があるかもしれません。詳細については ``起動オプショ
     ン''の節を見てください。

  o  ネットワークにアクセスしようとすると ``network unreachable'' という
     メッセージが表示される場合は、/etc/pcmcia/network.opts で指定してい
     る経路情報に間違いがあります。このメッセージはどう考えても経路情報
     エラーを示しているとしか考えられません。これに対して、カードの設定
     ミスの場合は普通、うまく動作できなくてもエラーを表示しません。

  o  DHCP を使ってネットワークインタフェースを設定しようとしている場合
     は、 DHCP ではなく固定の IP アドレスを使ったテストを行い、DHCP の設
     定による問題を除外します。
  o  /etc/pcmcia/network.opts の問題を見つけるためには、まず同じサブネッ
     ト上にある他のマシンに ping を打ってみましょう。マシンの指定には IP
     アドレスを使います。次にゲートウェイに ping を打ち、それから他のサ
     ブネット上にあるマシンに ping を打ちます。ホスト名を使って ping を
     打つのは、以上の簡単なテストが終わってからです。

  o  問題が本当に PCMCIA に起因することを確認してください。DOS 上で、ベ
     ンダー製のドライバなら動くかどうかを確認するのもいいでしょう。
     /etc/pcmcia/network.opts スクリプトを変更した部分があれば、そこを繰
     り返しチェックしてください。ケーブルや ``T'' 型ジャック、ターミネー
     タ等が正しく動作しているか確認してください。

  4.4.  PCMCIA のシリアルデバイスとモデムデバイス

  Linux のシリアルデバイスは、/dev/ttyS* と /dev/cua* という特殊なデバイ
  スファイルを経由してアクセスします。バージョン 2.2 より前のカーネルで
  は、ttyS* デバイスは端末などを直接接続するための入力用デバイスであ
  り、cua* デバイスはモデム等で利用するための出力用デバイスでした。現在
  のカーネルでは cua* デバイスを使わないことが推奨されており、全てのアプ
  リケーションで ttyS* を使います。シリアルデバイスの設定は、setserialコ
  マンドを使って確認、変更できます。

  シリアルカードあるいはモデムカードの挿入が検出されると、最初の空いてい
  るシリアルデバイスに自動的に割り当てられます。通常、これはシステムに最
  初から付いているシリアルポートの数によって /dev/cua1 (/dev/ttyS1)か
  /dev/cua2(/dev/ttyS2)のどちらかになります。/dev/ttyS* デバイスは stab
  に記録されます。デバイスを使いやすくするために、シリアルデバイス設定用
  のデフォルトのスクリプト(/etc/pcmcia/serial.opts)は、 /dev/modem から
  適切なデバイスファイルにシンボリックリンクを張ります。バージョン 2.2
  より前のカーネルでは、このリンクは cua* デバイスに張られます。

  PCMCIA モデムカードを設定するのに /etc/rc.d/rc.serial を使ってはいけま
  せん。このスクリプトは抜き挿しをしないシリアルデバイスを設定するための
  ものです。モデムにの設定を行う場合には、 /etc/rc.d/rc.serial ではなく
  /etc/pcmcia/serial.opt で設定してください。また、シリアルデバイスの
  I/O ポートと割り込みの変更を行うのに setserial を使ってはいけません。
  このコマンドは別のアドレスにあるデバイスをシリアルドライバに探させるも
  ので、カードのハードウェアに実際に設定されている情報を変えることはでき
  ないからです。シリアル設定用のスクリプトを使うと、setserial の別のオプ
  ションを指定することができますし、このポート用に /etc/inittab に行を追
  加するかどうかを指定することもできます。

  serial.opts に渡されるデバイスアドレスは、コンマで区切られた 3 つの
  フィールドから構成されています。一つ目のフィールドはスキーム、二つ目が
  ソケット番号、三つ目がデバイスインスタンスです。複数のシリアルポートを
  サポートしているカードではデバイスインスタンスが複数の値を持つことがあ
  りますが、ポートが一つしかないカードの場合には、デバイスインスタンスの
  値は必ず 0 です。普段から複数の PCMCIA モデムカードを使っているなら、
  挿入するソケットによって設定を変えることが可能です。その場合の設定は以
  下のようにします:

       case "$ADDRESS" in
       *,0,*)
           # Options for modem in socket 0
           LINK=/dev/modem0
           ;;
       *,1,*)
           # Options for modem in socket 1
           LINK=/dev/modem1
           ;;
       esac

  起動時に既に PCMCIA モデムカードが設定されていると、ハードウェアに最初
  から付いているシリアルポートと誤認される可能性があります。実害はありま
  せんが、PCMCIA ドライバがモデムを制御する場合、デバイスが異なるスロッ
  トに割り当てられる可能性があります。よって、アプリケーション側では
  PCMCIA モデムが常に同じデバイス(/dev/cua*)に割り当てられると仮定せ
  ず、stab を解析するかシンボリックリンク /dev/modem を使うのがいいで
  しょう。

  基本のシリアルポートドライバをモジュールとしてロードするようにカーネル
  の設定を行っている場合、/etc/pcmcia/config を修正してシリアルポートド
  ライバを予めロードするようにします。 /etc/pcmcia/configのシリアルデバ
  イスの項目を以下のように修正してください:

       device "serial_cs"
         class "serial" module "misc/serial", "serial_cs"

  4.4.1.  シリアルデバイスのパラメータ

  以下のパラメータを serial.opts で定義することができます:

     LINK
        「コールアウト用」デバイスに対して張られるシンボリックリンクのパ
        スを指定します(例: 2.2 より前のカーネルでは /dev/cua*, 2.2 では
        /dev/ttyS* です)。

     SERIAL_OPTS
        setserial コマンドに渡すオプションを指定します。

     INITTAB
        このパラメータを指定すると、その値を使って、対象となるデバイスの
        inittab 用のエントリが作られます。

  指定例を以下に示します:

       case "$ADDRESS" in
       *,*,*,*)
           LINK="/dev/modem"
           SERIAL_OPTS=""
           INITTAB="/sbin/getty"

  4.4.2.  特定のカードについてのコメント

  o  Uniden Data 2000 Wireless CDPD カードには、SLIP モードや PPP モード
     で通信を始めるための特殊なダイアル文字列があります。SLIP の場合には
     ``ATDT2'' を、PPP の場合には ``ATDT0'' を使います。

  4.4.3.  シリアルデバイスにまつわる問題の診断

  o  あなたのカードはモデムとして認識されていますか?  /usr/adm/messages
     をチェックして cardmgr がカードを正しく識別し、serial_cs ドライバを
     起動していることを確認してください。もし正しく識別されていない場
     合、/etc/pcmcia/config ファイルに新しいエントリを加えて、正しく識別
     できるようにする必要があるかもしれません。詳しくは ``識別されない
     カードの設定''の節を見てください。

  o  serial_cs ドライバがモデムを正しく設定していますか? もう一度
     /usr/adm/messages をチェックして、serial_cs ドライバの出力を調べて
     ください。もし ``register_serial() failed'' というメッセージが出力
     されていれば、他のデバイスと I/O ポートが衝突している可能性がありま
     す。デバイスが 8250 であると識別されることも I/O ポートが衝突してい
     る徴候の一つです。というのも、最近の PCMCIA モデムは 16550A UART と
     識別されるはずだからです。I/O ポートが他のデバイスと衝突している場
     合は、 /etc/pcmcia/config.optsを修正して、モデム用に割り当てられて
     いるポートを使わないようにしてみてください。

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

  o  モデムからの反応が異様に遅いというのも IRQ が衝突している徴候のひと
     つです。

  o

  o  問題が本当に PCMCIA に由来するものか確認してください。ベンダー製の
     ドライバを使って DOS で動くか調べるのもいいでしょう。また、単純な接
     続ができるようになるまでは、 SLIP や PPP のような複雑な設定は試さな
     いでください。もし単純な接続はうまくいくが SLIP は駄目という場合の
     原因は大抵 SLIP にあり、PCMCIA にはありません。 serial_cs モジュー
     ルがロードできないことを示すカーネルメッセージが残っていれば、カー
     ネルにシリアルデバイスのサポートが組み込まれていないということで
     す。シリアルドライバをモジュールとして作っていれば、
     /etc/pcmcia/config を修正して、serial_cs の前に serial モジュールを
     ロードするように設定しなければなりません。

  4.5.  PCMCIA パラレルポートデバイス

  Linux のパラレルポートドライバはレイヤ化されているので、いくつかのタイ
  プの高レベルデバイスは、ポート用の低レベルドライバについては同じものを
  共有できます。プリンタデバイスは特殊デバイスファイル /dev/lp* 経由でア
  クセスできます。プリンタデバイスの設定は、 tunelp コマンドで試験と修正
  ができます。

  parport_cs モジュールは parport ドライバと parport_pc ドライバに依存し
  ています。これらはカーネルに組み込んでも、モジュールとして作成しても構
  いません。ドライバの構成がレイヤ化されているということは、トップレベル
  のパラレルドライバ(PLIP ドライバやプリンタドライバ等) は全てモジュール
  としてコンパイルしなければならないということです。これらのドライバはモ
  ジュールの起動時しかパラレルポートを認識しないので、 PC カード用パラレ
  ルデバイスの設定を終えた後にモジュールをロードしなければなりません。

  parport.opts に渡されるデバイスアドレスは、コンマで区切られた 3 つの
  フィールドから構成されています。一つ目のフィールドはスキーム、二つ目は
  ソケット番号、三つ目はデバイスインスタンスです。複数のパラレルポートに
  対応しているカードの場合はデバイスインスタンスが複数の値を持つことがあ
  りますが、ポートが一つしかないカードの場合はデバイスインスタンスの値は
  必ず 0 になります。普段から複数の PCMCIA パラレルポートカードを使って
  いるなら、挿入するソケットの位置によって設定を変えることが可能です。そ
  の場合の設定は以下のようにします:

       case "$ADDRESS" in
       *,0,*)
           # Options for card in socket 0
           LINK=/dev/printer0
           ;;
       *,1,*)
           # Options for card in socket 1
           LINK=/dev/printer1
           ;;
       esac

  Linux の基本のパラレルポートドライバをモジュールとしてロードするように
  カーネルを設定しているならば、/etc/pcmcia/config を編集して、適切なモ
  ジュールが必ずロードされるようにしなければなりません。読み込まれるパラ
  レルデバイスの項目を編集してください:

       device "parport_cs"
         class "parport" module "misc/parport", "misc/parport_pc", "parport_cs"

  4.5.1.  パラレルデバイスのパラメータ

  以下のパラメータを parport.opts で定義できます:

     LINK
        プリンタポートに対して張られるシンボリックリンクのパスを指定しま
        す。

     LP_OPTS
        tunelp コマンドに渡すオプションを指定します。

  例を以下に示します:

       case "$ADDRESS" in
       *,*,*,*)
           LINK="/dev/printer"
           LP_OPTS=""

  4.5.2.  パラレルポートデバイスで起こる問題の診断

  o  割り込みは衝突していませんか? システムログに問題がないけれどポート
     が動作しているようには見えない場合は、tunelp を使って IRQ を 0 に変
     更し、これで状況が改善するかどうかを見てください。この操作はドライ
     バをポーリングモードに変えます。これで問題が解決するようであれば、
     parport_cs が選んだ割り込みをシステム上の他の何らかのデバイスが使っ
     ていると思われます。/etc/pcmcia/config.opts に設定を追加して、この
     割り込みを除外してください。

  o  parport_cs モジュールがロードできないことを示すカーネルメッセージが
     出ている場合は、カーネルがパラレルデバイスをサポートしていないとい
     うことです。パラレルドライバをモジュールとして作ったのであれば、
     /etc/pcmcia/config を編集して、parport モジュールと parport_pc モ
     ジュールを parport_cs モジュールの前にロードするように設定する必要
     があるでしょう。

  4.6.  PCMCIA SCSI アダプタ

  現時点までにサポートされている PCMCIA SCSI カードは、 Qlogic, Adaptec
  AHA-152X, Future Domain TMC-16x0 といった ISA バス用のカードと機能的に
  同等な PCMCIA カードです。これらのカード用の PCMCIA ドライバモジュール
  は PCMCIA 独自のコード(qlogic_cs.c, aha152x_cs.c, fdomain_cs.c)とLinux
  カーネルのソースコードから引っ張ってきた通常の SCSI ドライバをリンクし
  て作成されています。 Adaptec APA1480 CardBus ドライバは、カーネルの
  aic7xxx PCI ドライバをベースにしています。 Linux の SCSI ドライバの設
  計に由来する制限のため、取り外しができるカードはドライバごとに 1 つず
  つしかサポートできません。

  新しく SCSI カードが挿されたことを検出すると、SCSI ドライバはそのカー
  ドに接続されているデバイスを調べます。システムログをチェックして、挿し
  たデバイスが正しく検出されているかどうかを確認してください。検出された
  SCSI デバイスは、空いている最初の SCSI デバイスファイルに自動的に割り
  当てられます。すなわち最初に見つかった SCSI ディスクは /dev/sda に、最
  初の SCSI テープは /dev/st0 に、 最初の CD-ROM は /dev/scd0 になりま
  す。

  このホストアダプタに接続されている SCSI デバイスのリストは stab に記録
  されます。また SCSI 設定スクリプト (/etc/pcmcia/scsi)が割り当てられた
  デバイスをごとに一度呼び出され、そのデバイスの設定や停止を行います。デ
  フォルトのスクリプトは、 SCSI デバイスの設定は全く行わず、カードが抜か
  れた時に SCSI デバイス上のファイルシステムを正しくアンマウトする処理だ
  けを行います。

  SCSI アダプタには色々な機器が接続できるため、scsi.opts に渡すデバイス
  アドレスはかなり複雑です。フィールドはコンマで区切られた 6 個あるいは
  7 個のフィールドからできています：それぞれのフィールドは、スキーム、デ
  バイスタイプ、ソケット番号、SCSI チャンネル、ID、論理ユニット番号、(こ
  れは省略可能ですが)パーティション番号です。デバイスの種類は ``sd'' が
  ディスク、``st'' がテープ、``sr'' が CD-ROM で ``sg'' がジェネリック
  SCSI デバイスです。ほとんどの設定では SCSI チャンネルと論理ユニット番
  号は 0 です。複数のパーティションを持つディスクデバイスについては、ま
  ず scsi.opts スクリプトが、5 つのフィールドを持つデバイスアドレスを
  使ってデバイス全体に対して呼ばれます。scsi.opts スクリプトはパーティ
  ションのリストを PARTS 変数に返します。次に scsi.opts スクリプトがそれ
  ぞれのパーティションについて、7 個全てのフィールドを持つアドレスを使っ
  て呼び出されます。

  お使いのカーネルに、それぞれの SCSI デバイスに対応したディスクやテープ
  を利用するためのトップレベルドライバが組みこまれていない場合、PCMCIA
  ドライバからそれらのデバイスを設定することはできません。その副作用とし
  て、stab に残されるデバイス名は "sd#nnnn" のような形になります。ここで
  "nnnn"は 4 桁の 16 進数です。この現象は、 cardmgr が SCSI デバイス ID
  を Linux の対応するデバイス名に変換できなかった際に起きます。

  トップレベルの SCSI ドライバ(SCSI ディスク用ドライバ、SCSI テープ用ド
  ライバなど)をモジュール化して、必要な時にロードすることも可能です。そ
  のためには、/etc/pcmcia/config を修正して、アダプタを設定する時にロー
  ドする必要がある追加のモジュールを cardmgr に教えてやる必要がありま
  す。設定例を以下に示します:

  device "aha152x_cs"
    class "scsi" module "scsi/scsi_mod", "scsi/sd_mod", "aha152x_cs"

  このようにすると、核となる SCSI モジュールとトップレベル SCSI ディスク
  ドライバ用のモジュールが、通常の PCMCIA ドライバモジュールより先にロー
  ドされます。PCMCIA 設定スクリプトはモジュール化された SCSI ドライバを
  自動検出しないので、SCSI のサポートを有効にするためには手動で設定を行
  う必要があります。

  ラップトップ機の電源を入れる前、あるいはアダプタカードを挿入する前に
  は、接続する全ての SCSI デバイスの電源を入れておき、アダプタが設定され
  る時にはきちんと SCSI バスがターミネート(終端)されているようにしましょ
  う。また、SCSI アダプタを抜く時には細心の注意を払いましょう。これを最
  も確実に行う方法は、カードを物理的に抜く前に cardctl か cardinfo を
  使ってカードを抜き出しの要求を出すことです。現状では、接続する全ての
  SCSI デバイスの電源を SCSI アダプタの挿入前に入れなければいけません
  し、アダプタカードを抜くかラップトップ機の電源を落とすまでは SCSI デバ
  イスの電源を切ってはいけません。

  PCMCIA SCSI カードを使う場合、通常の ISA バスに接続するタイプのアダプ
  タでは起こらない問題が生じることもあります。たいてい、パッシブ型の
  SCSI ターミネータを正しく作動させるためには、 SCSI バスにターミネータ
  用の電力が必要です、PCMCIA タイプの SCSI アダプタはターミネータ用の電
  力を供給しないので、もしこの電力が必要ならば、接続されている外部デバイ
  スが電力を供給しなければなりません。SCSI デバイスの中にはターミネータ
  用の電力を供給するように設定できるものもありますし、Zip ドライブや
  Syquest 社の EX-Drive のようにアクティブ型のターミネータを使っているた
  め、ターミネータ用の電力には依存しないものもあります。時には、APS SCSI
  Sentry 2 のように外部から電流を供給するタイプの特別なターミネータを使
  う必要があるかもしれません。SCSI デバイスをいくつも繋げて接続する場合
  には、ターミネータ用の電力を必要とするデバイスや、電力を供給できるデバ
  イスがあるかどうかに注意してください。

  4.6.1.  SCSI デバイスのパラメータ

  以下のパラメータを scsi.opts で定義することができます:

     DO_FSTAB
        値には y か n を指定します。このデバイスのために /etc/fstab の設
        定を追加するかどうかを指定します。

     DO_FSCK
        値には y か n を指定します。マウントを行う前に ``fsck -Ta'' コマ
        ンドを使ってファイルシステムの検査を行うかどうかを指定します。

     DO_MOUNT
        値には y か n を指定します。カードを挿した時に自動的にマウントを
        行うかどうかを指定します。

     FSTYPE, OPTS, MOUNTPT
        fstab 用のエントリやデバイスのマウント時に使うファイルシステムの
        種類、マウント時のオプション、マウントポイントを指定します。

  例として、SCSI ID が 3 でパーティションを 2 つ持つディスクと SCSI ID
  が 6 である CD-ROM を設定するためのスクリプトを以下に示します:

  case "$ADDRESS" in
  *,sd,*,0,3,0)
      # This device has two partitions...
      PARTS="1 2"
      ;;
  *,sd,*,0,3,0,1)
      # Options for partition 1:
      #  update /etc/fstab, and mount an ext2 fs on /usr1
      DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
      FSTYPE="ext2"
      OPTS=""
      MOUNTPT="/usr1"
      ;;
  *,sd,*,0,3,0,2)
      # Options for partition 2:
      #  update /etc/fstab, and mount an MS-DOS fs on /usr2
      DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
      FSTYPE="msdos"
      OPTS=""
      MOUNTPT="/usr2"
      ;;
  *,sr,*,0,6,0)
      # Options for CD-ROM at SCSI ID 6
      PARTS=""
      DO_FSTAB="y" ; DO_FSCK="n" ; DO_MOUNT="y"
      FSTYPE="iso9660"
      OPTS="ro"
      MOUNTPT="/cdrom"
      ;;
  esac

  4.6.2.  個別カードに関するコメント

  o  Adaptec APA-1480 CardBus カードは巨大な I/O ポートウィンドウ(256 個
     のポート境界上に配置された 256 個の連続したポート)を必要とします。
     このように巨大なウィンドウを検出するためには、
     /etc/pcmcia/config.opts で I/O ポート領域を広げる必要があるかもしれ
     ません。

  o  Adaptec APA-460 SlimSCSI アダプタはサポートされていません。このカー
     ドは元々 Trantor 社から発売されていたものですが、Adaptec 社が
     Trantor 社を合併してからは Adaptec のラベルを付けて売っていま
     す。APA-460 はどの Linux 用のドライバとも互換性がありません。

  o  New Media Bus Toaster と UMAX Astra 1200s スキャナについては、通信
     がうまくできないという報告を受けたことがあります。SCSI プロトコルは
     複雑なので、SCSI デバイスにまつわる問題を調べる際には、このように互
     換性のない組合せが存在し、しかも文書化されていないかもしれないこと
     を考慮する必要があります。

  4.6.3.  SCSI アダプタにまつわる問題の診断

  o  aha152x_cs ドライバ(Adaptec, New Media などで使用)の場合、 SCSI 切
     断/再接続のサポートがテープドライブにおいてよくトラブルの原因になる
     ようです。この「機能」を無効にするには、 /etc/pcmcia/config.opts に
     以下の行を追加します:

  module "aha152x_cs" opts "reconnect=0"

  o  また aha152x_cs ドライバの場合、特定のデバイスで起動時の待ち時間を
     長くする必要があるようです。これはモジュールのパラメータ
     reset_delay で制御できます。Yamaha の 4416S CD-R ドライブは、このよ
     うなドライブの一例です。待ち時間を長く取らないと、デバイスの認識は
     うまく行きますが、その後にシステムがハングしてしまいます。このよう
     な場合には以下の設定を試してください:

       module "aha152x_cs" opts "reset_delay=500"

  o  SCSI デバイスの探査で起きる可能性がある別の問題としては、複数 LUN
     の探査があります。あるデバイスがうまく検出されたけれど、その後でそ
     のデバイスの LUN 1 を検出する時にSCSI バスがタイムアウトする場合に
     は、カーネルの CONFIG_SCSI_MULTI_LUN を無効にしてください。

  o  SCSI サポートをモジュールとして組み込んだ(CONFIG_SCSI を ``m'' に設
     定した)場合には、使用する *_cs ドライバがロードされる前に SCSI モ
     ジュールがロードされるように /etc/pcmcia/config を修正しなければな
     りません。

  o  SCSI バスを探査した時に ``aborting command due to timeout'' という
     メッセージが表示される場合は、ほぼ確実に割り込みの衝突が起こってい
     ます。

  o  ホストドライバが ``no SCSI devices found'' というメッセージを出力す
     る場合には、使っているデバイス(つまりディスク、テープ、CD-ROM, ジェ
     ネリックデバイス)用の適切なトップレベル SCSI ドライバがカーネルに組
     み込まれていることを確かめてください。トップレベルドライバが無けれ
     ば、その種類のデバイスは無視されます。

  4.7.  PCMCIA メモリカード

  memory_cs ドライバは全ての種類のメモリカードを扱うことができます。別の
  機能を持つカードの PCMCIA メモリのアドレス空間に直接アクセスすることも
  できます。このドライバをロードする時には、キャラクタデバイスとブロック
  デバイスの組が生成されます。デバイスの命名規則の詳しい説明については、
  モジュールのオンラインマニュアルを見てください。ブロックデバイスはディ
  スクのようなアクセス(ファイルシステムの作成やマウント等)を行うために使
  います。キャラクタデバイスは、任意の位置においてバッファ無しの読み書き
  を行う "raw" デバイスとして用います。

  memory.opts に渡すデバイスアドレスには 2 つのフィールドがあります。す
  なわちスキームとソケット番号です。オプションは、対応するメモリカードの
  最初の共通メモリパーティションに適用されます。

  一部の古いメモリカードや、ほとんどの単純な静的 RAM カードには CIS(Card
  Information Structure, カード情報領域)がありません。CIS は PCMCIA が自
  分自身を識別するために使います。cardmgr は普通、CIS が無いカードは全て
  単純なメモリカードとみなし、memory_cs ドライバをロードします。したがっ
  て、一般にカードの識別の問題が起こった時には、他の種類のカードが間違っ
  てメモリカードと認識されるという副作用があります。

  memory_cs は経験的手法を使ってカードの機能を推定します。経験的手法は書
  き込み禁止のカードでは動作しませんし、他にも間違った推定を行ってしまう
  ことがあります。カードが間違って認識された場合には、dd や mkfs といっ
  たコマンドを使う時には、メモリの大きさを明示的に指定してください。

  4.7.1.  メモリデバイスのパラメータ

  以下のパラメータは memory.opts で指定することができます:

     DO_FSTAB
        値には y か n を指定します。このデバイス用に /etc/fstab の設定を
        追加するかどうかを指定します。

     DO_FSCK
        値には y か n を指定します。マウントを行う前に ``fsck -Ta'' コマ
        ンドを使ってファイルシステムの検査を行うかどうかを指定します。

     DO_MOUNT
        値には y か n を指定します。カードを挿した時に自動的にマウントを
        行うかどうかを指定します。

     FSTYPE, OPTS, MOUNTPT
        fstab 用のエントリやデバイスのマウント時に使うファイルシステムの
        種類、マウント時のオプション、マウントポイントを指定します。

  ソケットに挿入されたメモリカードのマウントを自動的に行うためのスクリプ
  トの例を示します:

       case "$ADDRESS" in
       *,0,0)
           # Mount filesystem, but don't update /etc/fstab
           DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
           FSTYPE="ext2" ; OPTS=""
           MOUNTPT="/mem0"
           ;;
       *,1,0)
           # Mount filesystem, but don't update /etc/fstab
           DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
           FSTYPE="ext2" ; OPTS=""
           MOUNTPT="/mem1"
           ;;
       esac

  4.7.2.  リニアフラッシュメモリカードの使い方

  以下の情報はいわゆる「リニアフラッシュ」メモリカードにしか当てはまりま
  せん。SmartMedia や CompactFlash を含む多くのフラッシュカードは、実際
  は IDE ディスクデバイスをエミュレートする回路を持っています。したがっ
  て、こういったカードはメモリデバイスではなく IDE デバイスとして扱われ
  ます。

  フラッシュメモリカードには有力なフォーマットが二つあります: FTL つまり
  ``flash translation layer'' 形式と Microsoft Flash File System 形式で
  す。一般的には、FTL 形式の方が柔軟性に優れています。というのも、FTL 形
  式のフラッシュカード上には、通常のディスクデバイスと同様に任意の一般的
  な高レベルファイルシステム (ext2, MS-DOS 等)を作れるからです。FFS は全
  く独自のファイルシステムです。現時点では、Linux は FFS でフォーマット
  されたカードを扱えません。

  フラッシュメモリカードを普通のディスクのようなブロックデバイスとして使
  うには、まず ftl_format コマンドを使ってデバイス上に FTL パーティショ
  ンを作成します。このレイヤはフラッシュメモリのプログラミングにおけるデ
  バイス固有の細かい部分を隠し、カードが単なるブロックデバイスに見えるよ
  うにします。以下にコマンドの例を示します:

       ftl_format -i /dev/mem0c0c

  このメモリは ``raw'' メモリカードインタフェース経由でカードにアクセス
  します。一度フォーマットすると、このカードは ftl_cs ドライバ経由で通常
  のブロックデバイスとしてアクセスすることができます。操作例を以下に示し
  ます:

       mke2fs /dev/ftl0c0
       mount -t ext2 /dev/ftl0c0 /mnt

  FTL デバイスの命名規則はちょっと変わっています。マイナーデバイス番号が
  3 つの部分に分かれています。すなわちカード番号、そのカード上での領域番
  号、 (省略可能な)領域内でのパーティション番号です。ある領域はパーティ
  ションテーブルを持たない単独のブロックデバイスとして扱うこともできます
  し(フロッピーと同様です)、ハードディスクデバイスのようにパーティション
  を切ることもできます。``ftl0c0'' デバイスはカード 0, 共通メモリ領域 0,
  全領域を使うという意味です。領域がパーティション分割されていれ
  ば、``ftl0c0p1'' から ``ftl0c0p4'' が基本パーティションの 1 番から 4
  番を表します。

  FTL パーティションの設定オプションは ftl.opts で指定できます。このファ
  イルの構成は memory.opts に似ています。 ftl.opts に渡すデバイスアドレ
  スは、3 個または 4 個のフィールドから構成されます。すなわちスキーム、
  ソケット番号、領域番号、(省略可能な) パーティション番号です。ほとんど
  のフラッシュカードはフラッシュメモリ領域を 1 つしか持っていません。し
  たがって領域番号は常に 0 となります。

  Intel Series 100 フラッシュカードは、最初の 128K のフラッシュブロック
  を使ってカードの設定情報を格納しています。この情報を誤って消してしまう
  のを防ぐため、ftl_format は自動的にこれを検出し、FTL パーティションの
  作成時には最初のブロックをスキップします。

  4.8.  PCMCIA ATA/IDE カードドライブ

  ATA/IDE ドライブのサポートは、カーネルの通常の IDE ドライバを基にして
  います。SmartMedia デバイスと CompactFlash デバイスもサポート対象に含
  まれています: こういったフラッシュメモリカードは、IDE インタフェースを
  エミュレートするように設定されています。このドライバの PCMCIA 固有の部
  分が ide_cs です。 ATA/IDE カードを抜く前には、cardctl や cardinfo を
  使ってカードを停止させてください。というのも、このドライバはホットス
  ワップに対応していないからです。

  ide.opts に渡すデバイスアドレスは 3 個または 4 個のフィールドから構成
  されます。すなわち現在のスキーム、ソケット番号、デバイスのシリアル番
  号、 (省略可能な)パーティション番号です。ide_info コマンドを使うと、
  IDE デバイスのシリアル番号を得ることができます。SCSI デバイスと同様
  に、 ide.opts はまずデバイス全体に対して呼び出されます。 ide.opts が
  パーティションのリストを PARTS 変数に返した場合は、次にこのスクリプト
  がそれぞれのパーティションに対して呼び出されます。

  4.8.1.  ATA/IDE 固定ディスクデバイスのパラメータ

  以下のパラメータを ide.opts で指定することができます:

     DO_FSTAB
        値には y か n を指定します。このデバイス用に /etc/fstab の設定を
        追加するかどうかを指定します。

     DO_FSCK
        値には y か n を指定します。マウントを行う前に ``fsck -Ta'' コマ
        ンドを使ってファイルシステムの検査を行うかどうかを指定します。

     DO_MOUNT
        値には y か n を指定します。カードを挿した時に自動的にマウントを
        行うかどうかを指定します。

     FSTYPE, OPTS, MOUNTPT
        fstab 用のエントリやデバイスのマウント時に使うファイルシステムの
        種類、マウント時のオプション、マウントポイントを指定します。

  任意の ATA/IDE カードの最初のパーティションを /mnt にマウントするため
  の ide.opts ファイルの例を示します:

       case "$ADDRESS" in
       *,*,*,1)
           DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
           FSTYPE="msdos"
           OPTS=""
           MOUNTPT="/mnt"
           ;;
       *,*,*)
           PARTS="1"
           ;;
       esac

  4.8.2.  ATA/IDE アダプタにまつわる問題の診断

  o  I/O ポートが衝突していると、IDE ドライバがドライブのジオメトリを誤
     検出し、``INVALID GEOMETRY: 0 PHYSICAL HEADS?'' と報告するかもしれ
     ません。これを修正するには、/etc/pcmcia/config.opts を編集して、衝
     突する範囲の I/O ポートを使わないようにしましょう。

  o  一部の IDE カードはディスクの回転が始まるのに時間がかかるた
     め、PCMCIA の仕様でカードの設定のために許されている最大時間を超えて
     しまうことがあります。バージョン 3.0.6 以降では、ide_cs ドライバは
     自動的にデバイス検出のリトライを行い、このようなディスクドライブが
     動き出すための時間を与えます。古いドライバを使っている場合に
     は、pcmcia_core モジュールを以下のようにしてロードする必要があるか
     もしれません。

       CORE_OPTS="unreset_delay=400"

  o  ATA/IDE CD-ROM デバイスを使うためには、カーネルは
     CONFIG_BLK_DEV_IDECD オプションを有効にして構築しなければなりませ
     ん。標準のカーネルではこのオプションは有効になっていますが、独自の
     カーネルを作っている場合には注意が必要です。

  o  IDE ドライブの使用時によく起こるエラーは、誤ったデバイスファイルを
     マウントしようとすることです。普通は、デバイス全体ではなくデバイス
     中のパーティションひとつをマウントします(つまり /dev/hde ではなく
     /dev/hde1)。

  4.9.  マルチファンクションカード

  一つの割り込みを複数のドライバ(例えばシリアルドライバとイーサネットド
  ライバ)で共有することができます。実際、PCMCIA の仕様では、カードの機能
  全てが同じ割り込みを共有することを要求しています。普通は、カードの機能
  は全てドライバを切り替えることなく利用できます。ある程度最近の Linux
  カーネル(つまり 1.3.72 以降)は、こういった種類の割り込みの共有をサポー
  トしています。

  カードの機能を 2 つ同時に使うには「細工」が必要で、色々なハードウェア
  ベンダーがそれぞれ互換性の無い(場合によっては独自の)方法を使って割り込
  みの共有を実装しています。一部のカード(Ositech Jack of Diamonds, 3Com
  3c562 とその関連カード、Linksys 製カード)用のドライバは同時アクセスを
  うまくサポートしていますが、サポートできていないカード(特に古い
  Megahertz 製カード)もあります。両方の機能を有効にしてカードを使うと問
  題が起こる場合は、それぞれの機能を切り離して試してください。これを行う
  には、明示的に ``ifconfig down'' を実行してネットワークインタフェース
  を停止させ、それから同じカードのモデム機能を使う必要があるかもしれませ
  ん。

  5.  高度な話題

  5.1.  PCMCIA デバイスへのリソース割り当て

  理論的には、2 つのデバイスが同じ IRQ を使わない限り、どの IRQ がどのデ
  バイスに割りあてられても問題にはならないはずです。 /etc/pcmcia/config
  ファイルには、PCMCIA 以外のデバイスが利用する IRQ を PCMCIA では使わな
  いように設定する部分があります。

  同様に、あるカードが使う I/O アドレスを直接指定する方法はありません。
  /etc/pcmcia/config.opts ファイルを使うと、どのカードでも使える I/O
  ポートの範囲を指定することや、他のデバイスと衝突する範囲の I/O ポート
  を使わないように指定することができます。

  /etc/pcmcia/config.opts を修正したら、``kill -HUP'' を使って cardmgr
  の初期化をやり直してください。

  カード状態の変更を監視するための割り込みは、cardmgr が
  /etc/pcmcia/config を読み込む前に低レベルのソケットドライバモジュー
  ル(i82365 や tcic)が決めます。したがって、このファイルを変更しても影響
  はありません。この割り込みを設定するには、ソケットドライバをロードする
  時に cs_irq= オプションで設定してください。この設定は
  /etc/rc.d/rc.pcmcia で PCIC_OPTS 変数を設定することによって行います。

  全てのクライアントカードドライバには、割り当てを試みる割り込みを指定す
  るための irq_list というパラメータがあります。このようなドライバオプ
  ションは /etc/pcmcia/config ファイルで設定します。指定例を以下に示しま
  す:

  device "serial_cs"
    module "serial_cs" opts "irq_list=8,12"
    ...

  この指定により、シリアルドライバは irq 8 か irq 12 しか使わなくなりま
  す。irq_list の設定に関係なく、カードサービスシステムは他のデバイスが
  既に使っている割り込みや設定ファイルで除外されている割り込みは決して割
  り当てません。

  5.2.  家と会社で別々の設定を使い分けることができますか?

  PCMCIA の「スキーム」を使えば簡単です。例えば ``home'' と ``work'' と
  いう 2 つのスキームの設定を考えてみましょう。スキームを反映した
  network.opts スクリプトの例を以下に示します:

       case "$ADDRESS" in
       work,*,*,*)
           # definitions for network card in work scheme
           ...
           ;;
       home,*,*,*|default,*,*,*)
           # definitions for network card in home scheme
           ...
           ;;
       esac

  PCMCIA デバイスアドレスの最初の部分は常にスキームの設定に対応していま
  す。この例では 2 つめの ``case'' の部分が ``home'' と ``default'' のス
  キームになっており、スキームが設定されていない場合は ``home'' の設定で
  起動されることになります。

  2 つの設定を切りかえるには、

       cardctl scheme home

  あるいは

       cardctl scheme work

  を実行します。

  cardctl は、全てのカードの停止と再起動に相当する操作を行います。このコ
  マンドは PCMCIA システムがロードされているかどうかに関わらず安全に実行
  することができますが、その時にちょうど別の PCMCIA デバイスを使っていれ
  ば、コマンドは失敗するかもしれません(たとえ、設定がそのスキーム設定に
  明示的に依存していなくても)。

  現在のスキームの設定を知るには以下のコマンドを実行します:

       cardctl scheme

  デフォルトでは、スキーム設定は再起動しても変化しません。そのため、間
  違った環境向けにネットワークが初期化されてしまうと、好ましくない結果に
  なるかもしれません。このような場合には、起動オプションの SCHEME を使っ
  てスキームの初期値を設定することができます(詳しくは ``起動オプション''
  を参照)。lilo の起動プロンプトを使ってスキームを設定することもできま
  す。lilo は認識できないオプションを環境変数として init に渡すので、起
  動プロンプトで SCHEME(あるいは別の PCMCIA 起動オプション)を設定する
  と、その値が PCMCIA 起動スクリプトに伝えられます。

  キー操作を減らすには、スキームを lilo の設定ファイルで指定するとよいで
  しょう。例えば以下のように設定します:

       root = /dev/hda1
       read-only
       image = /boot/vmlinuz
         label  = home
         append = "SCHEME=home"
       image = /boot/vmlinuz
         label  = work
         append = "SCHEME=work"

  起動プロンプトで ``home'' あるいは ``work'' と入力すれば、適切なスキー
  ムでシステムが起動します。

  5.3.  PCMCIA デバイスからの起動

  ルートファイルシステムを PCMCIA デバイス上に置くには細工が必要です。と
  いうのも、Linux の PCMCIA システムはカーネルにリンクするようには設計さ
  れていないからです。中心部分となるローダブルカーネルモジュールと、ユー
  ザモードで動作する cardmgr デーモンは、既に動作しているシステムを前提
  にしているのです。この要件はカーネルの ``initrd'' を使って回避すること
  ができます。この機能は一時的な RAM ディスクを小さなルートファイルシス
  テムとして用いて起動し、ドライバをロードし、その後で別のルートファイル
  システムを改めてマウントするというものです。一時的なルートファイルシス
  テム上で PCMCIA のデバイスを設定し、それから PCMCIA デバイスをルート
  ファイルシステムとしてマウントし直すことができます。

  initrd イメージは絶対に起動デバイス以外に置かなければなりません。した
  がって、これを PCMCIA デバイスに置くことはできません。これは BIOS によ
  る制限であり、カーネルの制限ではありません。ここでは「起動可能」デバイ
  ス (つまり起動できるデバイス)と「ルート利用可能」デバイス(つまりルート
  ファイルシステムとしてマウントできるデバイス)を区別すると便利でしょ
  う。「起動可能」デバイスは BIOS が決めますが、一般的には内蔵フロッピー
  とハードディスクに制限されています。「ルート利用可能」デバイスは、カー
  ネルがロードされた後に対応している全てのブロックデバイスです。 initrd
  機能は、より多くのデバイスを「ルート利用可能」にします。「起動可能」に
  はしません。

  Linux ディストリビューションには、インストール時に PCMCIA SCSI アダプ
  タを使えるものもあります。これは、PCMCIA SCSI CD-ROM デバイスからのイ
  ンストールに対応した結果としての意図しない副作用です。しかし現状では、
  ``initrd'' を適切に設定して PCMCIA デバイス上のルートファイルシステム
  を使って起動するインストール用ツールはありません。したがって、PCMCIA
  デバイス上にルートファイルシステムを置くシステムを設定するには、別の
  Linux マシンを使って ``initrd'' イメージを作らなければなりません。別の
  Linux マシンが無ければ、最小構成の Linux を PCMCIA でないデバイス上に
  一時的に構築し、そこで initrd イメージを作成し、それからインストール先
  の PCMCIA に改めてインストールすることもできます。

  Linux Bootdisk-HOWTO には起動ディスクの設定に関する一般的な情報が書か
  れていますが、initrd 固有の情報は載っていません。initrd に関する最も重
  要な文書は、最近のカーネルソースに含まれている
  linux/Documentation/initrd.txt です。作業を始める前に、この文書を必ず
  読んでください。lilo にも慣れておくといいでしょう。 initrd を使うため
  には、カーネルの CONFIG_BLK_DEV_RAM オプションと CONFIG_BLK_DEV_INITRD
  オプションが有効でなければなりません。

  これは高度な設定技術であり、Linux と PCMCIA に関する高度な技術が必要で
  す。作業の前には必ず関連文書を全て読んでください。以下の説明の手順でう
  まく行くはずですが、例から離れるとすぐに案内がない「サポート無し」の領
  域に入るので、自分で何とかしなくてはならなくなります。

  この方法を使うにはバージョン 2.9.5 以降の PCMCIA ドライバが必ず必要で
  す。古い PCMCIA パッケージやパッケージ内の個別の要素は、initrd におい
  てはうまく動作しません。異なるバージョンの内容を混ぜてはいけません。

  5.3.1.  補助スクリプト ``pcinitrd''

  pcinitrd スクリプトは、PCMCIA デバイス上のルートパーティションで起動す
  るための基本的な initrd イメージを作ります。このイメージには必要最低限
  のディレクトリ階層とわずかのデバイスファイル、少しの実行ファイルと共有
  ライブラリ、PCMCIA ドライバモジュール群しか入っていません。 pcinitrd
  を実行する時には、イメージに入れたいドライバモジュールを指定しま
  す。PCMCIA システムの中心部分である pcmcia_core と ds は自動的に入りま
  す。

  例として、i82365 互換のホストコントローラを使っているラップトップ機が
  あり、Adaptec SlimSCSI アダプタに接続されているハードディスク上にルー
  トファイルシステムを置いて Linux を起動したいと考えているものとしま
  す。この場合の initrd イメージは以下のようにして作成します:

       pcinitrd -v initrd pcmcia/i82365.o pcmcia/aha152x_cs.o

  initrd の起動シーケンスのカスタマイズは、

       mount -o loop -t ext2 initrd /mnt

  といったコマンドで「ループバックデバイス」を利用してイメージをマウント
  して、 linuxrc スクリプトを編集することで行えます。設定ファイルはイ
  メージの /etc ディレクトリにインストールされ、これもカスタマイズできま
  す。詳しくは pcinitrd のオンラインマニュアルを見てください。

  5.3.2.  initrd 起動ディスクの作成

  pcinitrd を使ってイメージを作った後は、起動ディスクを作成します。これ
  はカーネルと圧縮した initrd イメージ、lilo 用のファイル数個を新品のフ
  ロッピーにコピーすることによって行います。以下の例では、使う予定の
  PCMCIA ルートデバイスは /dev/sda1 であるものとします:

       mke2fs /dev/fd0
       mount /dev/fd0 /mnt
       mkdir /mnt/etc /mnt/boot /mnt/dev
       cp -a /dev/fd0 /dev/sda1 /mnt/dev
       cp [kernel-image] /mnt/vmlinuz
       cp /boot/boot.b /mnt/boot/boot.b
       gzip < [initrd-image] > /mnt/initrd

  以下の内容を持つ /mnt/etc/lilo.conf を作成します:

       boot=/dev/fd0
       compact
       image=/vmlinuz
           label=linux
           initrd=/initrd
           read-only
           root=/dev/sda1

  最後に lilo を以下のように実行します:

       lilo -r /mnt

  -r オプションを付けて lilo を実行すると、lilo は指定された代替ルート
  ディレクトリからの相対位置に基づいて全ての動作を行います。 /mnt/dev
  ディレクトリにデバイスファイルを作成した理由は、 lilo はこの代替ルート
  モードで動作している時には、/dev ディレクトリにあるファイルを使うこと
  ができないからです。

  5.3.3.  Linux 用でないドライブ上にある initrd イメージのインストール

  initrd 機能を使う理由としてよくあるのは、内蔵ハードディスクが他の OS
  専用になっているシステムを使う場合でしょう。Linux のカーネルと initrd
  イメージを Linux 用でないパーティションに置き、 lilo や LOADLIN を使っ
  てこれらのイメージから Linux を起動する設定にすることができます。

  適切なルートデバイス用のカーネルの設定が既にできており、他の OS 上に
  initrd イメージが作られているものとすると、手っ取り早い方法は LOADLIN
  を使って Linux を起動することです。これは以下のように行います:

       LOADLIN <kernel> initrd=<initrd-image>

  対象のマシンで一度 Linux が起動できれば、lilo をインストールして直接
  Linux を起動するようにできるでしょう。例えば /dev/hda1 が Linux 用の
  ファイルシステムでない対象パーティションであり、 /mnt がマウントポイン
  トとして使えるものとします。まずは Linux 関連ファイル用のサブディレク
  トリを作成します:

       mount /dev/hda1 /mnt
       mkdir /mnt/linux
       cp [kernel-image] /mnt/linux/vmlinuz
       cp [initrd-image] /mnt/linux/initrd

  この例では /dev/sda1 が希望する Linux のルートパーティションであ
  り、SCSI ハードディスクは PCMCIA の SCSI アダプタ経由でマウントされる
  ものとします。lilo をインストールするには、以下のような内容の
  lilo.conf を作ります:

       boot=/dev/hda
       map=/mnt/linux/map
       compact
       image=/mnt/linux/vmlinuz
               label=linux
               root=/dev/sda1
               initrd=/mnt/linux/initrd
               read-only
       other=/dev/hda1
               table=/dev/hda
               label=windows

  boot= 行は、指定されたデバイスの MBR(Master Boot Record)にブートローダ
  をインストールすることを指示します。root= は、 initrd イメージをロード
  した後に使うルートファイルシステムを指定します。この指定は、カーネルイ
  メージが既にこのように設定されている場合には必要ありません。other=
  は、/dev/hda1 にインストールされている他の OS を記述するために使いま
  す。

  この場合に lilo をインストールするには、以下のコマンドを使います:

       lilo -C lilo.conf

  今回は、lilo.conf では /mnt 等の絶対パスを使っている点に注意してくださ
  い。私が例でこれを使ったのは、対象のファイルシステムでは boot= オプ
  ションと root= オプションに対して、Linux のデバイスファイルが作れない
  かもしれないからです。

  6.  サポートされていないカードの扱い

  6.1.  識別されないカードの設定

  既存のドライバがお使いのカードをサポートしているとすると、必要なことは
  /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`

  新しいカードのエントリを設定したら、私がこれを標準の設定ファイルに取り
  込めるように、そのコピーを私まで送ってください。

  6.2.  NE2000 互換イーサネットカードへの対応

  始める前に: この手続きが使えるのは、単純なイーサネットカードの場合だけ
  です。マルチファンクションカード(つまりイーサネットとモデムのコンボ
  カード) には 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 つの方法で扱えないカー
  ドを私は全く知りません。

  6.3.  PCMCIA フロッピーインタフェースカード

  Compaq Aero を含めたいくつかのラップトップ機で使われている PCMCIA フ
  ロッピーインタフェースは、現在の PCMCIA カードサービスではまだサポート
  されていません。Aero のフロッピーへの対応の障害になっているのは、Aero
  ではフロッピーでも DMA を使えるように改造された独自の PCMCIA コント
  ローラが使われていることです。DMA の制御がどのように行われているのかが
  正確に分からないと、Linux でも対応させようがありません。

  Aero の場合、起動時にフロッピーアダプタカードが接続されていれば Aero
  の BIOS がカードを設定し、Linux からは通常のフロッピードライブとして利
  用できます。PCMCIA ドライバがロードされた時、そのカードは既に設定済み
  であり、Linux のフロッピードライバと接続されていることが分かるはずで
  す。したがって、カードが挿さっているソケットは使われずに放っておかれま
  す。すなわち、起動時に FD カードが挿入されていればフロッピーデバイスは
  使用可能ですが、そのカードは抜き挿しできないことに注意してください。

  7.  デバッグのヒントとプログラム情報

  7.1.  有益なバグレポートの送り方

  最も好ましいバグレポートの送り方は、Linux PCMCIA 情報サイトにある
  HyperNews のメッセージリストを使うことです。この方法なら、現状の問題 (
  そして、もしあれば修正方法や回避方法)が他の人にも見えるからです。バグ
  レポートに必須の項目を以下に示します:

  o  お使いのマシンの品名とモデル

  o  お使いの PCMCIA カード

  o  Linux のカーネルのバージョン(``uname -rv'' の実行結果)と PCMCIA の
     ドライバのバージョン(``cardctl -V'' の実行結果)

  o  /etc/pcmcia にある起動ファイルや PCMCIA 起動スクリプトに加えて変更
     全て

  o  システムのログファイルに記録された PCMCIA に関わる内容全て。これは
     起動メッセージとカードの設定時に出力されたメッセージを含みます。

  PCMCIA モジュールと cardmgr デーモンはステータスメッセージをシステムロ
  グに送ります。システムログは普通、 /var/log/messages や
  /usr/adm/messages といった名前だと思います。問題を調べるときには、この
  ファイルを最初に見るべきです。バグレポートを送る時にも、このファイルの
  内容は必ず入れてください。システムのメッセージが見つからない場合に
  は、/etc/syslog.conf を見て、他のクラスのメッセージの出力先を調べてく
  ださい。

  バグレポートを送る前には、最新のドライバを使っていることを必ず確認して
  ください。既に直したバグのバグレポートを読むのは嬉しくないことでもない
  のですが、これはあまり有効な時間の使い方ではありませんから。

  WWW にアクセスできなければ、直接私宛( dhinds@pcmcia.sourceforge.org)
  にメールで送ってくださっても構いません。ただし、できればバグレポートは
  他の人にも見せられるように、WWW サイトの方に送って欲しいと思っていま
  す。

  7.2.  カーネルのトラップ通知の解釈

  もしカーネル自身がフォールトする(エラーを起す)場合、あなたが問題となる
  アドレス、EIP 等から何か意味を読み取れるとしても、レジスタのダンプ情報
  しか役に立たないでしょう。最近のバージョンの klogd はフォールトが起き
  たアドレスを、現在のカーネルのシンボルマップに基づいて変換しますが、
  フォールトがモジュール内で起こった場合や問題が深刻で klogd がフォール
  トの情報をシステムログに書き込めない場合にはこの方法は使えません。

  フォールトがカーネル本体で起こっている場合、フォールトが起きたアドレス
  は System.map ファイルに残ります。このファイルは /System.map か
  /boot/System.map にあると思います。フォールトがモジュールで起こってい
  る場合には、nm コマンドを使えば同じ情報が得られますが、フォールトが起
  きたアドレスはモジュールがロードされたアドレスが基準になっています。例
  えば、カーネルが以下のようなフォールトを起こしたとします:

       Unable to handle kernel NULL pointer dereference
       current->tss.cr3 = 014c9000, %cr3 = 014c9000
       *pde = 00000000
       Oops: 0002
       CPU:    0
       EIP:    0010:[<c2026081>]
       EFLAGS: 00010282

  フォールトが起きたアドレスは 0xc2026081 です。System.map を見ると、こ
  のアドレスはカーネルの最後のアドレスを越えているが分かるでしょう。つま
  り、フォールトはカーネルモジュールで起きているのです。どのモジュールで
  フォールトが起きたのかを調べるために、``ksyms -m | sort'' の出力を調べ
  ましょう:

       Address   Symbol                            Defined by
       c200d000  (35k)                             [pcmcia_core]
       c200d10c  register_ss_entry                 [pcmcia_core]
       c200d230  unregister_ss_entry               [pcmcia_core]
                 ...
       c2026000  (9k)                              [3c574_cs]
       c202a000  (4k)                              [serial_cs]

  したがって 0xc2026081 は 3c574_cs モジュールの内部で、モジュールの先頭
  からのオフセットが 0x0081 です。3c574_cs.o 内部のこのオフセット位置を
  参照する方法は今のところありません。カーネルがモジュールをロードした
  時、カーネルはモジュールをロードしたアドレスの先頭にヘッダを入れるの
  で、実際にモジュールが始まる位置は ksyms が示すアドレスからオフセット
  を取った位置となります。ヘッダの大きさはカーネルのバージョンごとに異な
  ります。お使いのカーネルでのヘッダの大きさを調べるには、シンボルをエク
  スポートしているモジュール(前述の pcmcia_core 等)を調べ、シンボルいず
  れかのアドレスをそのシンボルに対する nm コマンドの出力と比較します。こ
  の例では、register_ss_entry は 0xc200d10c - 0xc200d000 = 0x010c という
  オフセット位置にロードされています。ここで ``nm pcmcia_core.o'' は
  0x00c0 というオフセットを示していますから、ヘッダの大きさは 0x010c -
  0x00c0 = 0x004c ということになります。

  3c574_cs の話に戻ると、フォールトが起きたオフセット位置は 0x0081 なの
  で、これからヘッダの大きさである 0x004c を引くと、モジュールの実際の位
  置は 0x0035 となります。ここで ``nm 3c574_cs.o | sort'' を実行すると以
  下のような出力となります:

       0000002c d if_names
       0000002c t tc574_attach
       00000040 d mii_preamble_required
       00000041 d dev_info

  したがって、フォールトが起きた位置は tc574_attach() です。

  この例では、フォールトでシステム全体が固まることはないので、フォールト
  が起きた後に ksyms を実行することもできます。場合によっては、モジュー
  ルがロードされた位置を間接的に推測するしかないこともあります。同じ順序
  で操作すれば、普通はモジュールも同じ順序で同じ位置にロードされます。特
  定のカードを挿入した時にフォールトが起こる場合は、そのカードを挿す直前
  か、代わりに別のカードを挿した時の ksyms コマンドの出力を調べましょ
  う。カードを挿す前に手動で insmod でカードのドライバモジュールをロード
  し、ksyms コマンドを実行するという方法もあります。

  背景を詳しく知りたければ ``man insmod'', ``man ksyms'', ``man klogd''
  を見てください。カーネルのソースコードに入っている Documentation/oops-
  tracing.txt も関連があります。カーネルのデバッグ関連のヒントをいくつか
  紹介します:

  o  フォールトの種類によっては、「呼び出しトレース」のアドレスに変換す
     るのも役立ちます。変換の手順は、普通のフォールトアドレスの場合と同
     じです。

  o  何もメッセージを出さずにシステムが固まってしまう場合には、X を使わ
     ない状態で問題を再現してみてください。というのも、テキストコンソー
     ルに送られるカーネルメッセージは X 上では読めないからです。

  o  klogd を殺してあると、ほとんどのカーネルメッセージは直接テキストコ
     ンソールに表示されます。この方法は、klogd からシステムログに書き込
     みができなくなってしまう問題が起きた時に役立ちます。

  o  カーネルのバージョンが 2.1 で、かつ /proc/sys/kernel/printk が存在
     するならば、以下の操作で全てのカーネルメッセージをコンソールに送る
     ことができます:

       echo 8 > /proc/sys/kernel/printk

  o  <右Alt><ScrLk> というキーの組合せで、レジスタのダンプをコンソールに
     出力することができます。これはシステムが完全に反応しない状態でも動
     作するかもしれません。また、EIP アドレスはカーネルフォールト用のア
     ドレスに変換されます。

  o  バージョン 2.1 のカーネルでは[訳注: 2.2 も同様です]、
     CONFIG_MAGIC_SYSRQ を有効にしてあると、特別な <Alt><SysRq> という
     キーの組合せで様々な緊急用機能を使うことができます。この機能につい
     ては、カーネルのソースツリーに入っている Documentation/sysrq.txt を
     ご覧ください。

  7.3.  PCMCIA の低レベルのデバッグを行うための情報

  PCMCIA モジュールにはコンパイル時のオプションで決まるデバッグ用コード
  がたくさん含まれています。 これらのコードの大部分はプリプロセッサの
  PCMCIA_DEBUG という定義で制御されています。もし PCMCIA_DEBUG が未定義
  ならば、デバッグ用のコードはコンパイルされません。もし 0 に定義されて
  いれば、コードはコンパイルされるものの、利用されません。この数字を大き
  くすればデバッグメッセージはより細かくなります。PCMCIA_DEBUG を定義し
  てコンパイルした各モジュールには整数を値に持つ pc_debug という変数が設
  定され、この変数でデバッグ出力の詳しさを制御できます。この変数はモ
  ジュールがロードされる際に設定できるので、再コンパイルを行わなくてもモ
  ジュール別にデバッグ出力を制御することができます。

  syslogd のデフォルトの設定は、カーネルのデバッグメッセージを無視するよ
  うになっているかもしれません。これを確実に記録するためには、
  /etc/syslog.conf を編集して、``kern.debug'' クラスのメッセージがどこか
  に記録されるようにします。詳しくは ``man syslog.conf'' をご覧くださ
  い。

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

  メモリカードドライバである pcmem_cs も 16 ビット PC カードのデバッグに
  役立つことがあります。このドライバはどんな PCMCIA カードに対しても利用
  でき、他のドライバと干渉することもありません。このドライバを使えば、ど
  んなカードの属性メモリや共通メモリにも直接アクセスできます。 CardBus
  カードの場合も同様で、memory_cb ドライバはどんな 32 ビットカードに対し
  ても使うことができ、カードのアドレス空間にも直接アクセスすることができ
  ます。詳しくはオンラインマニュアルを参照してください。

  7.4.  /proc/bus/pccard

  バージョン 2.1.103 以降のカーネルでは、PCMCIA パッケージはステータス情
  報のツリーを /proc/bus/pccard ディレクトリ以下に作ります。この情報の多
  くは、PCMCIA ホストコントローラのデータシートを使わないと意味が分かり
  ません。この内容はドライバの設定によりますが、以下の情報の全てあるいは
  一部を含んでいると思います:

     /proc/bus/pccard/{irq,ioport,memory}
        これらのファイルがある場合には、カーネルの通常のリソーステーブル
        を補うためのリソースの割り当て情報が書かれています。最近のバー
        ジョンの PCMCIA システムは、(設定がしてあれば)追加のリソース情報
        をプラグ&プレイ BIOS からできます。

     /proc/bus/pccard/drivers
        最近のリリースでは、このファイルには現在ロードされている PCMCIA
        クライアントドライバが列挙されています。/proc/modules と異なり、
        このファイルはカーネル内に静的にリンクされているかもしれないドラ
        イバも列挙します。

     /proc/bus/pccard/*/info
        それぞれのソケットについて、ソケットのホストコントローラとその機
        能を示します。

     /proc/bus/pccard/*/exca
        このファイルには、コントローラの ``ExCA'' Intel i82365sl 互換レ
        ジスタセットのダンプが含まれています。

     /proc/bus/pccard/*/{pci,cardbus}
        CardBus ブリッジについての、ブリッジの PCI 設定空間のダンプと、
        ブリッジの CardBus 設定レジスタのダンプが含まれています。

  7.5.  出たばかりのカード向けに PCMCIA カードサービスのドライバを書くに
  は

  ``Linux PCMCIA Programmer's Guide'' がクライアントドライバインタフェー
  スに関する最善の文書です。最新版は sourceforge.org の /pub/pcmcia/doc
  ディレクトリにあります。WWW 上では <http://pcmcia.sourceforge.org> か
  ら入手できます。

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

  多くの場合、新しい種類のカードをサポートする際の最大の障害は、メーカー
  から技術情報を入手することです。誰に頼めばよいかも分かりにくいですし、
  どんな情報が必要かを正確に説明するのも困難です。しかし、一部の例外を除
  くと、メーカーからの技術情報無しでドライバを書くのは不可能とは行かない
  までも非常に困難です。

  ドライバがカードサービスシステムとどのように通信するかを説明するため
  に、多数のコメントを入れたダミーのドライバを用意しています。PCMCIA
  パッケージのソースコードに入っている clients/dummy_cs.c がそれです。

  7.6.  PCMCIA クライアントドライバを書く人のための手引き

  私は、全ての PCMCIA クライアントドライバを PCMCIA パッケージの一部とし
  て配布するのは本当は適切でないと考えています。新しいドライバが加わるた
  びに本家のパッケージも段々メンテナンスしにくくなりますし、ドライバを取
  り込むとメンテナンス作業の一部がドライバの作者から私へ移ってくるのも明
  らかです。そこで全てのドライバを取り込む代わりに、寄付されたドライバは
  ケースバイケースの判断で取り込むかどうかを決めています。判断はユーザの
  要望やメンテナンス性に基づいて行っています。本家のパッケージに取り込ま
  なかったドライバについては、私はドライバの作者に以下の方法で配布用のド
  ライバパッケージを作るようにお願いしています。

  ドライバファイルは、PCMCIA のソース配布物で使われているのと同じディレ
  クトリ配置にしなければなりません。これはドライバを PCMCIA ソースツリー
  のトップディレクトリで展開できるようにするためです。ドライバにはソース
  ファイル(./modules/ ディレクトリ内)、オンラインマニュアル(./man/ ディ
  レクトリ内)、設定ファイル(./etc/)が含まれていなければなりません。トッ
  プレベルディレクトリには README ファイルもなければなりません。

  トップレベルディレクトリには makefile が必要で、これは ``make -f ...
  all'' でドライバをコンパイルでき、 ``make -f ... install'' で必要な
  ファイルを全てインストールできるように設定されていなければなりません。
  この makefile に .mk という拡張子が付いていれば、このファイルはトップ
  レベルの Makefile からターゲット all と install について自動的に呼び出
  されます。このような makefile の作り方の例を以下に示します:

  # Sample Makefile for contributed client driver
  FILES = sample_cs.mk README.sample_cs \
          modules/sample_cs.c modules/sample_cs.h \
          etc/sample etc/sample.opts man/sample_cs.4
  all:
          $(MAKE) -C modules MODULES=sample_cs.o
  install:
          $(MAKE) -C modules install-modules MODULES=sample_cs.o
          $(MAKE) -C etc install-clients CLIENTS=sample
          $(MAKE) -C man install-man4 MAN4=sample_cs.4
  dist:
          tar czvf sample_cs.tar.gz $(FILES)

  この makefile では、バージョン 2.9.10 以降の PCMCIA パッケージで定義さ
  れているインストールターゲットを使っています。この makefile には、ドラ
  イバ作者の利便のための ``dist'' ターゲットも入っています。最終的なパッ
  ケージのファイル名にはバージョン番号も入れるとよいでしょう(
  sample_cs-1.5.tar.gz 等)。完成品の配布ファイルの内容は以下のようになり
  ます:

       sample_cs.mk
       README.sample_cs
       modules/sample_cs.c
       modules/sample_cs.h
       etc/sample
       etc/sample.opts
       man/sample_cs.4

  このファイル配置であれば、寄付されたドライバのパッケージを展開した時
  に、実質的に PCMCIA のソースツリーの一部となります。PCMCIA のヘッダ
  ファイルやユーザのシステム設定を調べる仕組みの利用、ファイルの依存関係
  の自動チェックを「通常の」クライアントドライバと同じように行うことがで
  きます。

  私はこの仕様に準拠しているクライアントドライバを受け取れば、
  sourceforge.org の /pcmcia/contrib ディレクトリに置きます。このディレ
  クトリにある README ファイルに、寄付されたドライバの展開方法が書いてあ
  ります。

  クライアントドライバのインタフェースは昔からあまり変わっていませんし、
  後方互換性はほぼ保たれています。本家のパッケージのマイナーバージョンが
  上がっても普通は更新の必要はないでしょう。ドライバの更新が必要となるよ
  うな変更があれば、ドライバを寄付してくださった作者の方々にはできるだけ
  お知らせするようにします。

  7.7.  Linux ディストリビューションのメンテナのための手引き

  あなたが作っているディストリビューションのシステム設定ツールを PCMCIA
  対応にしようとしているのなら、/etc/pcmcia にある *.opts ファイルを「止
  め具」として使ってください。これらのファイルは、ユーザが新しいバージョ
  ンの PCMCIA パッケージのコンパイルとインストールを行っても変更されませ
  ん。メインの設定スクリプトを修正すると、最初からのインストールを行った
  時にカスタマイズしたスクリプトが黙って上書きされ、設定ツールとの連係が
  途切れてしまいます。適切なオプションスクリプトの書き方が分からない場合
  や、追加の機能が必要な場合は、私に相談してください。

  あなたのディストリビューションとこの文書で説明している PCMCIA パッケー
  ジの相違点を文書化してくだされば、ユーザにとって(そして私にとっても)役
  立つでしょう。特に、起動スクリプトと設定スクリプトに関する変更点はぜひ
  文書化してください。適切な情報を私まで送っていただければ、 ``個別ディ
  ストリビューションに関する注意'' の節に追加させていただきます。

  ディストリビューション用に PCMCIA パッケージを作る際には、寄付されたド
  ライバ群は本家の PCMCIA パッケージの一部ではない点を覚えていてくださ
  い。メンテナンス上の理由により中心となるパッケージのサイズは制限しよう
  としており、新しいドライバを追加するのは特に需要が高いと思われるときだ
  けです。その他のドライバについては前の章で説明した通り、本家とは別に配
  布しています。本家に統合されているドライバと別配布になっているドライバ
  の違いにはたいした意味はなく、歴史的経緯もある程度含まれています。ま
  た、品質的な違いがあるわけでは決してありません。

  8.  日本語訳について

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

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

     v1.84j, 10 June 1996
        翻訳: 小島 三弘(kojima@linet.gr.jp), 播口 陽
        一(hariguti@lsidiv.kawasaki-steel.co.jp)

     v2.32j, 26 July 1999
        更新: 藤原 輝嘉(fujiwara@linux.or.jp), 校正: 武井 伸
        光(takei@cc.kochi-u.ac.jp)

     v2.46j, 18 December 1999
        更新: 藤原 輝嘉(fujiwara@linux.or.jp),

