Linux PCMCIA HOWTO

                              Copyright \begin{matrix}c \\ ◯ \end{matrix} David Hinds, dhinds@allegro.stanford.edu

日本語訳小島三弘 (kojima@komae.denken.or.jp), 播口陽一 (hariguti@lsidiv.lawasak-steel.co.jp)

この文書は Linux に PCMCIA Card をインストールして使う方法について説明し、いくつかのしばしば問われる質問に答えています。この文書の最新バージョンは cb-iris.stanford.edu の

/pub/pcmcia/doc ディレクトリにあります。

目次

1 概要と必要なハードウェア 2 1.1 イントロダクション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 著作権の表示と免責事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 最新のバージョンは？どこで入手できるの？ . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 サポートされるシステムは？ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.5 サポートされている PCMCIA カードは？ . . . . . . . . . . . . . . . . . . . . . . . . 3 1.6 いつになったら X というカードがサポートされるんでしょう？ . . . . . . . . . . . . 3 1.7 メーリング・リスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 コンパイル、インストール、設定 3 2.1 準備とカーネルの設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 インストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 各マシンごとの設定オプション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.4 PCMCIA ネットワークカードを使い NFS 経由で Linux をインストールできるでしょ

うか？ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.5 なぜ私のシステムはカードの装着に反応しないんでしょう？ . . . . . . . . . . . . . . 7

3 利用法と機能 8 3.1 ちゃんと動いているか確認するには？ . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.2 PCMCIA イーサネットカードの使い方は？ . . . . . . . . . . . . . . . . . . . . . . . 8 3.3 PCMCIA モデムカードの使い方は？ . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.4 PCMCIA SCSI カードの使い方は？ . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.5 PCMCIA メモリカードの使い方は？ . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.6 新しいカードをどのように cardmgr に認識させれる方法は？ . . . . . . . . . . . . . . 10 3.7 デバイスに利用される割り込みやポートはどのようにすればコントロールできますか？ 10 3.8 PCMCIA カードを着脱するのに安全なタイミングは？ . . . . . . . . . . . . . . . . . 11 3.9 PCMCIA ドライバをアンロードする方法は？ . . . . . . . . . . . . . . . . . . . . . . 11 3.10 カードサービス・システムはどのように suspend/resume を扱うの？ . . . . . . . . . 11 3.11 PCMCIA カードを抜かずにカードの電源を切るにはどうすればいいですか？ . . . . . 11

4 特定のカードに関する問題 12 4.1 なぜ私のモデムは動かないんでしょう？ . . . . . . . . . . . . . . . . . . . . . . . . . 12 4.2 なぜ Megahertz モデムカードは時々動かなくなるんでしょう？ . . . . . . . . . . . . 12 4.3 なぜ私のイーサネットカードは動かないの？ . . . . . . . . . . . . . . . . . . . . . . . 12 4.4 3c589 カードでトランシーバーの種類を選ぶには？ . . . . . . . . . . . . . . . . . . . 13 4.5 ネットワークの性能が悪いんですが、どうすればいいですか？ . . . . . . . . . . . . . 13 4.6 NE2000 互換のイーサネットカードを使うには？ . . . . . . . . . . . . . . . . . . . . . 14 4.7 PCMCIA フロッピーインタフェースの使い方は？ . . . . . . . . . . . . . . . . . . . . 14 4.8 Xircom 製のカードのサポートはどうなっていますか？ . . . . . . . . . . . . . . . . . 14 4.9 SCSI アダプタのサポートはどうなっていますか？ . . . . . . . . . . . . . . . . . . . . 15

5 デバッグの際のヒントとプログラム情報 15 5.1 有益なバグレポートを送るには？ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 5.2 PCMCIA の低レベルデバッギング情報 . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.3 カード X 用のドライバを書くには？ . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

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

1.1 イントロダクション

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

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

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

  [訳注 : 日本語版については kojima@komae.denken.or.jp までお願いします。 ]

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

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.

1.3 最新のバージョンは？どこで入手できるの？

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

  最新バージョンは常に cb-iris.stanford.edu の /pub/pcmcia ディレクトリにあります。複数の

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

  cb-iris.stanford.edu は sunsite.unc.edu の/pub/Linux/kernel/pcmcia にミラーされてい
ます。また、 tsx-11.mit.edu の /pub/linux/laptops/pcmcia/drivers にも随時主要なリリース

をアップロードするつもりです。

1.4 サポートされるシステムは？

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

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

1.5 サポートされている PCMCIA カードは？

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

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

1.6 いつになったら X というカードがサポートされるんでしょう？

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

1.7 メーリング・リスト

私は Linux 用 PCMCIA ユーザーのデータベースとメーリング・リストを運営しています。新しい PCMCIA パッケージのリリースに関するアナウンスはこのメーリングリストに流します。メーリングリストに参加したければ、以下の内容を含むメールを私宛に送ってください。

• 名前と e-mail アドレス

• 使っているラップトップ機

• probe コマンドが報告する PCMCIA コントローラーの種類

• 使っている PCMCIA カード

• 何か特殊な設定:コンパイル時のオプション、 irq やポートの設定、 /etc/pcmcia/config のエントリー, insmod オプション、などなど

2 コンパイル、インストール、設定

2.1 準備とカーネルの設定

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

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

  最新のカーネルのソースとパッチは、 sunsite.unc.edu の/pub/Linux/kernel/v1.2 か
tsx-11.mit.edu の/pub/linux/sources/system/v1.2 にあります。最新のモジュールユーティリ

テイも同じところにあり、 modules.1.1.87.tgz というファイル名になっています。

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

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

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

PCMCIA モジュールをコンパイルする際には、カーネルのバージョンを記録したファイル versions.h が必要です。このファイルはカーネルの構築時に最初に作られ、最後に削除されます。 “make modules” すれば、 version.h は再度作られますが、 Linux のソースツリーの一番上で “make

include/linux/version.h” を実行して明示的に作ることも可能です。

2.2 インストール

バージョン 2.4.8 からは X-Window System 上で動く cardinfo という PCMCIA カードの状態表示用プログラムが附属しています。 cardinfo は Forms Library と呼ばれるパブリックドメインのユーザーインターフェース・ツールキットを使っているので、 cardinfo をインストールするためには Forms Library が必要になります。 Forms Library のバイナリは cb-iris.stanford.edu の

/pub/pcmcia/extras/bxform-0.61.tgz です。このパッケージの Makefile には小さなバグがあり、

“ln -s” で始まっている行の最後には “; fi” を付け加える必要があります。

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

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

“make all”、引き続いて “make install” を実行すれば、カーネルモジュールとユーティリティプログラムがコンパイル、インストールされます。カーネルモジュールは

/lib/modules/<version>/pcmcia ディレクトリにインストールされます。 cardmgr と cardctl プ

ログラムは/sbin/ にインストールされます。 cardinfo は/usr/bin/X11 にインストールされます。

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

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

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

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

/etc/rc.d/rc.M に以下の 1 行を加えて下さい:
     /etc/rc.d/rc.pcmcia start

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

2.3 各マシンごとの設定オプション

カードサービス・システムは他の標準的なデバイスが既に使っている IO ポートと割り込みは自動的に回避しようとします。この機能は、 Linux 用のドライバが存在する全てのデバイス –シリアルポートやパラレルポート、 IDE ドライブ、サウンドカードなど – で働くはずです。もし Linux でサポートされていないデバイスの場合、そのデバイスが利用している IO ポートなどは /etc/pcmcia/config で、明示的に使わないように設定する必要があるかも知れません。

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

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

• NEC Versa M では irq 9 を使わないようにします。

• NEC Versa P/75 では 5 と 9

• NEC Versa S では irq 9 と 12

• ProStar 9200, Altima Virage, Acquiline Hurricane DX4-100 では irq 5 と IO ポートの 0x330-0x35f を使わないように設定します。メモリの 0xd8000 - 0xdffff を使うように指定する必要があるかも知れません。

• Toshiba T4900 CT では irq 5 と IO port 0x2e0-0x2e8, 0x330-0x338 を使用しないように設定します。

• Twinhead 5100, HP 4000, Sharp PC-8700, PC-8900 では irq 9(サウンド用) と irq 12 を除外します。

• MPC 800 シリーズでは CD-ROM 用に irq 5 と 0x300-0x30f を除外します。

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

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

• Cirrus 製のコントローラーにはタイミングを設定するためのパラメーターがたくさんあります。そのうち、最も重要なものは freq bypass フラグで、このフラグを設定することで、 PCMCIA のバスクロックを全てのオペレーションについて何分の一かに減速させます。

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

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

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

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

     # i82365 または tcic の場合
     PCIC=i82365

# ソケットドライバのタイミングに関するパラメータ

     OPTS="async_clock=1"

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

     # i82365 か tcic の場合
     PCIC=i82365

# ソケットドライバのタイミングに関するパラメータ

     OPTS="wakeup=1"

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

2.4 PCMCIA ネットワークカードを使い NFS 経由で Linux をインストールできるでしょうか？

Slackware 2.2 をベースに、 PCMCIA をサポートした 1.44MB のブート FD とルート FD を作り

ました。 pcboot14.gz と pcroot14.gz というファイル名で cb-iris.stanford.edu と

sunsite.unc.edu にあります (1.3 節を参照してください)。 root FD には cardmgr, 基本的な PCMCIA モジュール、全てのネットワークドライバが入っています。これらを使うには Slackware のインストールに慣れているほうがいいでしょう。 PCMCIA ドライバは自動的にロードされ、インストールの手順は、 PCMCIA でないネットワークカードを用いた場合と同じです。ただし、 Slackware のルート FD にはネットワークで使うユーザー用のプログラム (ftp, telnet 等) が一切入っていないことに注意してください。この FD に入っているネットワーク用のコマンドは NFS マウントするのに必要なものだけです。

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

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

     cp /mnt/vmlinuz /vmlinuz
     rootflags /vmlinuz 1
     lilo

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

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

とし、 /etc/pcmcia/config を修正して、ネットワーク用カードドライバに対する “start” と

“stop” コマンドのコメントを外します。 /etc/pcmcia/ntwork.sample を /etc/pcmcia/network に

名前を変えて、あなたのシステムの設定に合うように修正します。 Slackware のルート FD にある /etc/rc.local のように、 /etc/rc.d/rc.M を手で修正して、 PCMCIA の起動ファイルを自動的に実行するようにしておきましょう。

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

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

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

2.5 なぜ私のシステムはカードの装着に反応しないんでしょう？

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

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

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

3 利用法と機能

3.1 ちゃんと動いているか確認するには？

cardmgr デーモンは、通常、カードが挿入された時にビープ音を鳴らします。そのビープ音の音色によって新しく挿入されたカードの状態を示します。高いビープ音が 2 回した時は、カードはきちんと識別され、正しく設定されたことを示します。高いビープ音と低いビープ音の場合は、カードは識別されたものの何らかの理由で設定に失敗したことを示します。低いビープ音が一度しかしなかった場合はカードの識別に失敗しています。

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

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

     Module:        #pages:  Used by:
     ds                 2
     i82365             2
     pcmcia_core        6    [ds i82365]

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

3.2 PCMCIA イーサネットカードの使い方は？

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

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

3.3 PCMCIA モデムカードの使い方は？

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

とか/dev/cua2) から/dev/modem にリンクを張ります。

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

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

したい場合は/etc/rc.d/rc.serial ではなく、 /etc/pcmcia/serial で設定してください。

3.4 PCMCIA SCSI カードの使い方は？

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

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

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

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

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

[訳注：以下は日本では無意味でしょう。 ]

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

3.5 PCMCIA メモリカードの使い方は？

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

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

     ftl_format -i /dev/mem0c

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

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

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

3.6 新しいカードをどのように cardmgr に認識させれる方法は？

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

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

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

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

     card "Megahertz XJ2288 V.34 Fax Modem"
       version "MEGAHERTZ", "XJ2288", "V.34 PCMCIA MODEM"
       bind "serial_cs"

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

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

     kill -HUP `cat /var/run/cardmgr.pid`

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

3.7 デバイスに利用される割り込みやポートはどのようにすればコントロールできますか？

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

  ibmcc cs, de650 cs, 3c589 cs, serial cs ドライバには irq mask と呼ばれるパラメータがあり、

どの割り込みを利用するかをコントロールすることができます。 iqr mask の各ビットはそれぞれ一本の割り込み線に対応しています (訳注: 0 が mask, 1 が unmask です): bit 0 は irq 0 、 bit 1 は irq 1、以下同様に対応しています。

例えば 0x1100 というマスクは irq8 と irq12 を利用可能にします。ある特定の割り込みのみを使うようにしたい場合、 irq mask には対応する 1 ビットのみ 1 を立てた値をセットします。これらのオプションは/etc/pcmcia/config ファイルで設定するのがいいでしょう。例えば、

     device "serial_cs"
       module "serial_cs" opts "irq_mask=0x1100"
       ...

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

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

  /etc/pcmcia/config を修正した後、 “kill -HUP” を使って cardmgr を再起動してください。

3.8 PCMCIA カードを着脱するのに安全なタイミングは？

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

3.9 PCMCIA ドライバをアンロードする方法は？

PCMCIA 全体をアンロードするには、 rc.pcmcia スクリプトを

     /etc/rc.d/rc.pcmcia stop

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

3.10 カードサービス・システムはどのように suspend/resume を扱うの？

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

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

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

3.11 PCMCIA カードを抜かずにカードの電源を切るにはどうすればいいですか？

  cardctl か cardinfo コマンドを使ってください。 “cardctl suspend #” (# はソケットの番号を

表す整数値) で、そのソケットをサスペンドして電源を切ります。同様に resume # コマンドで以前の状態に復帰することができます。

4 特定のカードに関する問題

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

これは漠然とした質問ですね。以下に簡単なトラブル回避策を示します

• あなたのカードは modem として認識されていますか？ usr/adm/messages をチェックして cardmgr がカードを正しく識別し、 serial cs ドライバを起動しているか確認してください。もし正しく識別されていない場合、 /etc/pcmcia/config ファイルに新しいエントリーを加える必要があるかもしれません。詳しくは 3.6 を見てください。

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

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

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

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

4.2 なぜ Megahertz モデムカードは時々動かなくなるんでしょう？

昔の PCMCIA ドライバでは、しばしば Megahertz のモデム、特に 2144 モデル、を正しく初期化できませんでした。この問題は最近のバージョンでは解決しています。

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

echo 'ATS=QV1X4\&C1\&D2S95=2W1\&K3S36=7S95=255' > /dev/modem

と設定しないと Linux の cu では使えないそうです。この初期化の文字列は Megahertz の技術サポートから教えてもらったそうです。

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

もう一つ、簡単なトラブル回避策を示します。

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

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

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

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

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

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

4.4 3c589 カードでトランシーバーの種類を選ぶには？

ドライバが自動的に 10baseT で接続されているか 10base2 かを識別できればいいんのですが、どうすればそうできるのかわかりません。現時点では/etc/pcmcia/config ファイルを修正して 3c589 cs モジュールの設定に if ports=# というオプションを追加してください。より詳しくは tc589 cs の man ページを見てください。ただし、 10base2(BSC, thin net, coax とも呼ばれています) を選ぶ場合は、

module "3c589_cs"

を

module "3c589_cs" opts "if_port=3"

と変更する必要があります。

4.5 ネットワークの性能が悪いんですが、どうすればいいですか？

もし NE4100 か IBM CCAE アダプタを使っている場合は ibmcc cs モジュールの設定に mem speed=# オプションを使って、メモリにアクセスする時間を増してみてください。このスピードを 1000(ナノセコンド) まで上げてみてください。

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

4.6 NE2000 互換のイーサネットカードを使うには？

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

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

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

     dd if=/dev/pcmem0a count=20 | od -Ax -t x1

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

de650 cs を修正した後、コンパイルして新しいモジュールをインストールします。

/etc/pcmcia/config を修正し、あなたのカード用のエントリを pcmem cs から de650 cs に変更し

ます。 cardmgr を再起動して設定ファイルを読みこみなおせば完了です。作成された hw info と config のエントリをぜひ私あてに送ってください。

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

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

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

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

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

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

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

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

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

Linux の 1.1.81 からは SCSI ドライバモジュールを動的にロードすることが可能になっていますが、最新のカーネルを使う方がいいでしょう。これらのカード用の PCMCIA ドライバモジュールは Linux の標準的な SCSI ドライバと PCMCIA 用のコード (qlogic cs.c と 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

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

5.1 有益なバグレポートを送るには？

以下に示すものは全てのバグレポートに必ず書いてほしいことです。

• システムタイプと probe コマンドの出力

• 使っている PCMCIA カード

• Linux のカーネルのバージョンと PCMCIA パッケージのバージョン

• /etc/pcmcia 下のスタートアップファイルに加えたあらゆる変更

• 重要には思えなくても /usr/adm/messages の内容も送ってください。

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

もしカーネル自身がエラーを起す (fault) するようなら、問題となるアドレス、 EIP、を特定するためにはレジスタのダンプ情報しか役に立たないでしょう。もしそのアドレスがカーネル本体をさしていれば、 zSystem.map を参照して、どの関数でエラーが起きたのか調べてください。もし実行時ロードモジュールでエラーが起きていれば追及するのは多少難しくなります。現在のモジュール用ツールでは、 “ksyms -m” で各ロード可能モジュールのベースアドレスがわかります。 EIP アドレスを含んでいるモジュールを選び、モジュール内部の offset を決めるために EIP からベースアドレスを引きます。そして、 gdb をそのモジュールに対して使って、 list コマンドを使って問題となる offset のあたりを調べます。ただし、この方法はモジュールを-g オプションを使ってデバッグ情報を含むようにコンパイルした時しか使えません。

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

5.2 PCMCIA の低レベルデバッギング情報

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

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

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

5.3 カード X 用のドライバを書くには？

Linux PCMCIA プログラマガイドが Linux 用の PCMCIA インタフェースに関する最善の文書で

す。最新版は、 cb-iris.stanford.edu の/pub/pcmcia/doc にあります。

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

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