cardmgr
デーモンは、通常、カードが挿入された時にビープ音を鳴らし、
そのビープ音の音色によって新しく挿入されたカードの識別状態を示します。
高いビープ音が 2 回した時(「ピー、ピー」って感じです)は、カードはきち
んと識別され、正しく設定されたことを示します。高いビープ音と低いビープ
音の場合(「ピー、ブー」って感じ)は、カードは識別されたものの何らかの理
由で設定に失敗したことを示します。低いビープ音が一度しかしなかった場合
(「ブー」だけ)はカードの識別に失敗しています。
もし X を使っているのなら、きれいなグラフィック画面で全てのPCMCIA ソケッ
トの状態を表示する cardinfo
プログラムも使えます。
全てのモジュールが正しくロードされれば、lsmod
のコマンドは以下の
ようになります。ただし、これはカードが装着されていない場合です。
Module: #pages: Used by:
ds 2
i82365 2
pcmcia_core 6 [ds i82365]
PCMCIA のモジュールと cardmgr
デーモンはカードの抜き差しをシステ
ムのログファイルに記録します。通常、このファイルは
/var/log/messages
か/usr/adm/messages
になっています。
もし何かトラブルが起きれば、最初にこのファイルをチェックしましょう。バ
グレポートの際にもこのファイルの内容を忘れずに送ってください。
cardmgr
は各ソケット毎のデバイスの状態を /var/run/stab
にも
記録しています。例えば、/var/run/stab
はこんな風になります。
[訳注:2.8.15 以前では/etc/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 cua1 5 65
デバイスの状態を示している行の最初の欄がソケット番号、2 つ目がデバイス クラス、3 つめがドライバ名、4 つめがそのドライバが関係しているデバイス の数、5 つ目はデバイス名、最後の 2 つはそのデバイスのデバイス番号のメ ジャー、マイナー値です。
PCMCIA デバイスはどのように設定され機能するかについていくつかの``クラ
ス''に分類できます。クラスは/etc/pcmcia/config
のデバイスドラ
イバと対応しています。現時点では IO デバイスに 5 つのクラス(network,
SCSI, cdrom, fixed disk serial)が、メモリデバイスにも 3 つのクラス
(FTL, memory, pcmem)があります。それぞれのクラスごとに 2 つのスクリプ
トが /etc/pcmcia/config
に用意されています:一つが設定用のス
クリプト(例えば SCSI デバイス用なら /etc/pcmcia/scsi
)で、もう
一つは設定オプションを指定するスクリプト
(/etc/pcmcia/scsi.opts
)です。デバイスを設定するスクリプトはカー
ドが挿入された時にデバイスを設定するために起動され、カードが抜かれた時
にはデバイスを閉じるために起動されます。複数のデバイスに対応しているカー
ドが挿入された場合、デバイスごとにスクリプトが起動されます。
設定用のスクリプトはデバイスについての情報を /var/run/stab
から取
りだします。スクリプトはそれぞれ ADDRESS
という変数に設定すべ
きデバイスを一意に記述した ``デバイスアドレス'' を利用します。この ``
デバイスアドレス'' をそれぞれのデバイスごとに用意されている
*.opts
スクリプトに渡し、*.opts
スクリプトは、そのデ
バイスがどのように設定されるべきかの情報を返します。いくつかのデバイ
スでは、デバイスアドレスは単なるソケット番号ですが、その他のデバイスで
は設定の仕方を決めるのに役立つ情報を含んだものになっています。例えば、
ネットワーク用のデバイスはハードウェアイーサネットアドレスをデバイスア
ドレスの一部として network.opts
スクリプトに渡すので、ハード
ウェアアドレスによって異なる設定を行うことも可能です。
デバイスアドレスの最初の部分は、PCMCIA の現在の ``スキーマ(scheme)''
を示します。このパラメータを使って、一つの外部ユーザー変数によって複数
のデバイス設定を切り替えることが可能です。スキーマのつかい方のひとつは、
``home'' スキーマと ``work'' スキーマの 2 種を用意して、ネットワークの
設定パラメータを違うものにするです。今使っているスキーマは
cardctl
コマンドで変更できます。特にスキーマを設定しない場合、
``default'' スキーマが利用されます。
一般論として、ラップトップ機の Linux の場合、PCMCIA デバイスは PCMCIA デバイス用のスクリプトでのみ設定すべきで、常設のデバイスと同じように (/etc/rc.d/rc.inet* などで)設定してはいけません。
Linux ではイーサネットタイプのネットワークインタフェースは eth0
,
eth1
といった名前になっています。トークンリングのアダプタも同様で
すが、インターフェイスはtr0
,tr1
となります。ネットワー
クインタフェースの状態をチェックしたり変更するには ifconfig
コマ
ンドを使います。ネットワークインタフェースが /dev
の下に対応
するデバイスを持っていないのが Linux の特徴の一つですので、それらが見
つからなくても心配しないでください。
PCMCIA イーサネットカードが挿されれば、自動的に空いている最初のインター
フェースの名前、多分 eth0
でしょう、 に割りあてられます。
cardmgr
が自動的に /etc/pcmcia/network
スクリプトを実行
してインターフェースに関する設定を行いますので、使おうとするネットワー
クに関する設定はこの /etc/pcmcia/network
で行う必要があります。
PCMCIA イーサネットカードに関する設定を /etc/rc.d/rc.inet1
で
行ってはいけません。というのも、/etc/rc.d/rc.inet1
は起動時に
実行されるので、その時点でカードが挿入されているかどうかは分からないか
らです。rc.inet1
のコマンドは loopback を定義している部分以外は全
てコメントアウトしておき、代りに /etc/pcmcia/network.opts
ス
クリプトでネットワーク関係の設定を行ないます。この
/etc/pcmcia/network.opts
スクリプトはカードが装着された時にの
み実行されます。
network.opts
に渡されるデバイスアドレスは 3 つのコンマで区切
られた 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
NFS ファイルシステムを自動的にマウント/アンマウトしたい場合、まずマウ
ントしたいファイルシステムを /etc/fstab
に設定し、オプション
に noauto を指定しておきます。network.opts
では
MOUNTS
変数にファイルシステムのマウントポイントを指定します。
NFS をこのような形で設定する場合、ネットワーク接続を終了する際には
cardctl
か cardinfo
を使うことが重要になります。警告
なしにネットワークカードが抜かれた場合、NFS ファイルシステムを明確にア
ンマウントする方法はありません。
Linux のシリアルデバイスは /dev/cua*
と /dev/ttyS*
と
いう特別のデバイスファイルを経由してアクセスされます。ttyS*
デ
バイスは入力用で、直結されたターミナルなどが利用します。cua*
デバイ
スは出力用で、モデム等に利用します。シリアルデバイスの設定は、
setserial
コマンドを使って確認、変更することができます。
シリアルカード、あるいはモデムカードが挿されたことを検出すれば、自動的
に最初の空いているシリアルデバイスに割りつけます。通常、これはあらかじ
め用意されているシリアルポートの数によって /dev/cua1
か
/dev/cua2
になります。シリアルデバイスが装着された時に実行さ
れるデフォルトのスクリプトは /etc/pcmcia/serial
で、このスク
リプトが適切なデバイス(/dev/cua1
とか /dev/cua2
)から
/dev/modem
にシンボリック・リンクを張ります。
PCMCIA モデムカードを設定するのに /etc/rc.d/rc.serial
を使っ
てはいけません。このスクリプトは抜き挿しをしないシリアルデバイスを設定
するためのものです。モデムに対して何か設定をしたい場合は
/etc/rc.d/rc.serial
ではなく、/etc/pcmcia/serial.opt
で設定してください。
serial.opts
に渡されるデバイスアドレスはコンマで区切られた 3
つのフィールドから構成されています。一つめのフィールドはスキーマで、二
つ目がソケット番号、三つめがデバイスインスタンスです。デバイスインスタ
ンスは複数のシリアルポートをサポートしているようなカードのためのもので、
通常のシリアルカードでは 0 になっています。もし複数の PCMCIA モデムカー
ドを使っているなら、挿入するソケットによって設定を変えることが可能です。
case "$ADDRESS" in
*,0,*)
# Options for modem in socket 0
;;
*,1,*)
# Options for modem in socket 1
;;
esac
起動時に PCMCIA モデムカードが装着されていると、通常のシリアルポートと
誤認される可能性があります。実害はありませんが、PCMCIA ドライバがモデ
ムを制御する場合、異なるデバイスに割り当てられる可能性があるので、アプ
リケーション側では PCMCIA モデムが常に同じデバイス(/dev/cua*
)
に割り当てられると仮定せず、/var/run/stab
をチェックするかシンボ
リックリンクされた /dev/modem
を使うのがいいでしょう。
シリアルポートドライバをモジュールとしてコンパイルした場合、
/etc/pcmcia/config
を修正してシリアルポートドライバをまずロー
ドするようにします。/etc/pcmcia/config
のシリアルデバイスのエ
ントリを以下のように修正してください。
device "serial_cs" class "serial" module "misc/serial", "serial_cs"
現時点までにサポートされている PCMCIA SCSI カードは Qlogic, Adaptex
AHA-152X, Future Domain TMC-16x0 といった ISA バス用のカードと同様に機
能します。れらのカード用の PCMCIA ドライバモジュールは PCMCIA 独自のコー
ド(qlogic_cs.c
,toaster_cs.c
,fdomain_cs.c
)と
通常の SCSI ドライバをリンクして作成されています。
新たに SCSI カードが挿されたことを検出すると、そのカードに接続されてい
るデバイスをSCSI ドライバが検出しに行きます。
/usr/adm/messages
をチェックして、使っているデバイスが正しく
検出されているか確認してください。検出された SCSI デバイスは自動的に
SCSI デバイスファイルに割りあてられます。すなわち、最初に見つかった
SCSI ディスクは /dev/sda
、最初の SCSI テープは
/dev/st0
、 最初のCDROM は /dev/scd0
、などとなりま
す。
Linux 1.3.X のカーネルでは、PCMCIA の core ドライバはどのような SCSI
デバイスがカードに接続しているかをカーネルから知ることができます。それ
らの情報は /var/run/stab
に記載されており、SCSI の設定スクリ
プト /etc/pcmcia/scsi
が接続されているデバイスごとに呼ばれ、
そのデバイスを設定するか終了するかします。デフォルトのスクリプトでは
SCSI デバイスの設定用には特別の処理をせず、カードが抜かれた時にSCSI デ
バイス上のファイルシステムを正しくアンマウトする処理のみをしています。
1.2.X カーネルでは、どのような SCSI アダプタが接続されているのかは
PCMCIA ドライバにはわかりません。その代わり、使用する SCSI デバイス用
の設定を /etc/pcmcai/scsi.opts
ファイルに記述することができま
す。例えば、SCSI ディスクと CD-ROM を使うような場合、
# For 1.2 kernels: list of attached devices
SCSI_DEVICES="sda scd0"
と設定します。
SCSI の場合、接続されるデバイスは様々なので、scsi.opts
に渡さ
れるデバイスアドレスはかなり複雑です。フィールドはコンマで区切られた 6
つか 7 つのフィールドからできています:それぞれのフィールドは、スキー
マ、デバイスタイプ、ソケット番号、SCSI チャンネル、ID、 論理ユニット番
号、オプションとしてパーティション番号も渡されることがあります。
デバイスの種類は ``sd'' がディスク、``st'' がテープ、``sr'' が CD-ROM
で ``sg'' がジェネリック SCSI デバイスです。ほとんどの設定では SCSI チャ
ンネルと論理ユニット番号は 0 です。複数のパーティションを持つディスク
デバイスについては、 まず 5 つのフィールドを持つデバイスアドレスを使っ
て scsi.opts
がデバイス全体に対して呼ばれ、scsi.opts
はパーティションのリストを PARTS
変数に返します。次に、それぞ
れのパーティションごとに、7 つのフィールドを持つデバイスアドレスを使っ
て scsi.opts
スクリプトが起動されます。例えば、SCSI ID 3 でパー
ティションを 2 つ持つ SCSI ディスクと SCSI ID 6 の CD-ROM の場合、
scsi.opts
は以下のようになります。
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_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_MOUNT="y"
FSTYPE="msdos"
OPTS=""
MOUNTPT="/usr2"
;;
*,sr,*,0,6,0)
# Options for CD-ROM at SCSI ID 6
PARTS=""
DO_FSTAB="y" ; DO_MOUNT="y"
FSTYPE="iso9660"
OPTS="ro"
MOUNTPT="/cdrom"
;;
esac
お使いのカーネルに、それぞれの SCSI デバイスに対応したディスクやテープ
を利用するためのドライバが組みこまれていない場合、PCMCIA ドライバから
それらのデバイスを設定することはできません。その副作用として、
/var/run/stab
に残されるデバイス名は
"sd#nnnn
" のような形になります。ここで
"nnnn
"は4桁の16進数です。これは、cardmgr
が SCSI デバイス ID を Linux の対応するデバイス名に変換できなかった際
に生じます。
トップレベルの SCSI ドライバ(SCSI ディスク用ドライバ、、SCSI テープ用
ドライバなど)をモジュール化して、PCMCIA SCSI アダプタが挿入された時に
のみ必要なモジュールをロードするように設定することも可能です。そのため
には、/etc/pcmcia/config
を修正して、PCMCIA SCSI アダプタが設
定された時に必要なモジュールをロードするようにします。例えば、
device "aha152x_cs" class "scsi" module "scsi/scsi_mod", "scsi/sd_mod", "aha152x_cs"
とすれば、核となる SCSI モジュールと SCSI ディスクドライバ用のモジュー ルが通常の PCMCIA ドライバモジュールより先にロードされます。
ラップトップ機に電源を入れる前、あるいはアダプタカードを挿入する前に、
接続される全ての SCSI デバイスの電源を入れておき、アダプタが設定される
時にはきちんと SCSI バスがターミネート(終端)されているようにすることを
忘れないように。また、アダプタカードを抜く前には全ての SCSI デバイスが
アンマウントされてきちんと閉じていることを忘れないように。一番確実な方
法はカードを抜く前に cardctl
か cardinfo
を使って
card removal
のリクエストを送ることです。現状では、SCSI アダプ
タが挿入される前に接続されている全ての SCSI デバイスの電源を入れておき、
アダプタカードを抜くか laptop 機の電源を落とすまでは電源を切ってはいけ
ません。
PCMCIA SCSI カードを使う場合、通常の ISA バスに接続するタイプのアダプ タでは生じない問題が生じることもあります。たいてい、パッシブ型の SCSI ターミネーターを正しく作動させるためには、 SCSI バスにターミネーター用 の電流を流す必要がありますが、PCMCIA タイプの SCSI アダプタはターミネー ター用の電流を供給しないので、もしターミネーターに電流が必要となる場合、 接続されている外部デバイスが代りの電源にならねばなりません。SCSI デバ イスの中にはターミネーター用の電流を供給するように設定できるものもあり ますし、Zip Drive のようにアクティブ型のターミネーターを使っているため、 ターミネーター用電流の有無には影響されないものもあります。時には、APS SCSI Sentry 2 のように外部から電流を供給するタイプの特別なターミネーター を使う必要があるかも知れません。SCSI デバイスを連続して接続する場合、 ターミネーター用の電流を必要とする/供給できるデバイスがあるかどうか注 意してください。
Adaptec APA-460 SlimSCSI アダプタはサポートされていません。このカード は元々 Trantor 社から発売されていたものですが、Adaptec 社が Trantor 社 を合併してからは Adaptec のラベルを付けて売っています。APA-460 はどの Linux 用のドライバとも互換性がありません。ドライバを書くのがどれくらい 難しいかはわかりませんが、Adaptec からこのカードについての技術情報を入 手することが可能だとは思えません。
サポートされていない Trantor 製の SlimSCSI は以下のような製品名になっ ており、SCSIworks! がソフトウェアとして附属しています。
Trantor / Adaptec APA-460 SlimSCSI
FCC ID: IE8T460
Shipped with SCSIworks! driver software
(PCMCIA カードサービスがサポートしている) Adaptec の SlimSCSI は以下の ようになっているので間違えないでください。
Adaptec APA-1460 SlimSCSI
FCC ID: FGT1460
P/N: 900100
Shipped with EZ-SCSI driver software
デフォルトで起動されるメモリカード用の設定スクリプトは、カードの最初の
共通メモリ(common memory)領域と属性メモリ(attribute memory)領域にアク
セスするために、ブロックデバイスとキャラクタデバイスを作ります。メモリ
カード用のドライバには 古いバージョンの pcmem_cs
ドライバと新
しい memory_cs
ドライバがあります。pcmem_cs
ドライバ
は static RAM カードで動作します。新しい memory_cs
ドライバは
フラッシュメモリカードに直接アクセスできます。デバイス名の付け方の詳細
についてはマニュアルを参照してもらうことにして、ここではごく簡単に説明
しておきます。メモリカード用のデバイスはブロックデバイスとキャラクタデ
バイスの 2 つが作られ、ブロックデバイスはディスクのように使え(ファイル
システムを作ってマウントする)、キャラクタデバイスは "raw" デバイスとし
て、メモリカード上の任意の部分を読み書きできます。
フラッシュメモリカードを通常のディスクのようなブロックデバイスとして利
用するためには、まずフラッシュメモリ変換層(``flash translation
layer'') を ftl_format
コマンドを使って作らなければなりません。
ftl_format -i /dev/mem0c0c
このコマンドはメモリカードの ``raw''インタフェースを使ってカードにアク
セスすることに注意してください。いったんフォーマットしてしまえば、カー
ドは普通のブロックデバイスとして ftl_cs
ドライバ経由で使えま
す。例えば:
mke2fs /dev/ftl0
mount -t ext2 /dev/ftl0 /mnt
のようにして普通のディスクと同様にフォーマット、マウントできます。
FTL と ``新しい'' メモリドライバを使えば、ftl.opts
と
memory.opts
にソケット番号とパーティション数の 2 つのフィール
ドを持つデバイスアドレスが渡されます。共有メモリ用のパーティションの方
が属性メモリ用のパーティションよりは小さな番号が付きます。通常、興味の
あるパーティションは パーティション 0 (データが保存される共通メモリパー
ティション)だけでしょう。以下に示すものは、挿入されるソケットによって
自動的にフラッシュメモリカードをマウントするようなスクリプトの例です。
case "$ADDRESS" in
*,0,0)
# Mount filesystem, but don't update /etc/fstab
DO_FSTAB="n" ; DO_MOUNT="y"
FSTYPE="ext2" ; OPTS=""
MOUNTPT="/ftl0"
;;
*,1,0)
# Mount filesystem, but don't update /etc/fstab
DO_FSTAB="n" ; DO_MOUNT="y"
FSTYPE="ext2" ; OPTS=""
MOUNTPT="/ftl1"
;;
esac
flash memory カードには 2 種のフォーマットがあります:``flash translation layer(FTL)'' スタイルとマイクロソフトフラッシュファイルシ ステム(FFS)スタイルです。FTL フォーマットの方が柔軟で、通常の(ext2, ms-dos といった)ファイルシステムを作って、普通のディスクデバイスのよう にフラシュメモリカードを利用できます。FFS は全く新しいファイルシステム で、現状では Linux から FFS 用にフォーマットされたカードを利用すること はできません。
現時点でATA/IDE ドライブを使うには、1.3.72 以上のカーネルが必要です。
PCMCIA 独自のドライバの部分は fixed_cs
になっています。現在の
ドライバはカードが抜かれたことを自動的に検出するようにはなっていないの
で、ATA/IDE カードを抜く前には cardctl
や cardinfo
コマンドで ATA/IDE カードがきちんとアンマウントされていることを確認し
てください。
fixed.opts
スクリプトに渡されるデバイスアドレスは、使っている
スキーマとソケット番号、オプションとしてパーティション数から成る 2 つ、
あるいは 3 つのフィールドから構成されています。SCSI デバイス同様、
fixed.opts
スクリプトは、まずデバイス全体に対して起動されます。
fixed.opts
がパーティションのリストを PARTS
変数で返
した場合、それぞれのパーティションごとにfixed.opts
コマンドが
実行されることになります。
挿入された ATA/IDE カードの最初のパーティションを /mnt
にマウ
ントするような fixed.opts
は以下のようになります。
case "$ADDRESS" in
*,*)
PARTS="1"
;;
*,*,1)
DO_FSTAB="y" ; DO_MOUNT="y"
FSTYPE="msdos"
OPTS=""
MOUNTPT="/mnt"
;;
esac
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 にはそのエントリーも含めたいと思います。
理論的には、2 つのデバイスが同じ IRQ を使わない限り、どの IRQ がどのデ
バイスに割りあてられても問題にはならないはずです。
/etc/pcmcia/config
ファイルの最初には PCMCIA 以外のデバイスが
利用するIRQ を PCMCIA では使わないようにする設定する部分があります。
注意して欲しいのですが、カードの抜き差しを検出するために利用するIRQ は、
cardmgr
が /etc/pcmcia/config
ファイルを読み込む前に、
ハードウェアレベルのソケットドライバモジュール(i82365
か
tcic
)が選んでいるので、/etc/pcmcia/config
ファイル
では設定できません。この IRQ を設定するには
/etc/rc.d/rc.pcmcia
が実行され、ソケットドライバがロードされ
る際にirq_mask
か cs_irq
オプションを使います。
全てのカードドライバには irq_mask
と呼ばれるパラメータが用意
されており、割りあてる IRQ を特定することが可能です。irq_mask
の各ビットはそれぞれ一本の割り込み線に対応しています(訳注: 0 が
mask, 1 が unmask です): bit 0は irq 0 、bit 1 は irq 1、以下同様に対
応しています。ですから、0x1200 というマスクは IRQ の 9 と 12 を意味し
ます。ドライバの利用する IRQ を特定したい場合、irq_mask オプションで 1
ビットだけ設定するようにします。これらのドライバ用のオプションは
/etc/pcmcia/config
ファイルで設定します。例えば:
device "serial_cs"
module "serial_cs" opts "irq_mask=0x1100"
...
のように指定します。この場合、シリアルドライバは irq 8 と irq 12 のみ
を使うようになります。カードサービス・システムでは、既に他のデバイスが
使っている IRQ は使いませんし、/etc/pcmcia/config
ファイルで
除外された IRQ は(irq_mask
で指定しても)利用できないことに注
意してください。
ある PCMCIA カードが特定の I/O アドレスを使うように直接指定する方法は
ありません。/etc/pcmcia/config
ファイルでは全ての PCMCIA デバイスで利
用可能なポートの範囲を指定します。/etc/pcmcia/config
ファイルを変更し
たら、``kill -HUP
'' コマンドで cardmgr を再起動します。
理論的には、PCMCIA カードはいつでも抜くことが可能です。しかし、アプリ ケーションプログラムがそのカードを使っている時には抜かない方が無難です。 1.1.77 以前のカーネルでは、serial/modem カードが抜かれた時にハングアッ プしてしまうことがありましたが、現在では修正されています。
PCMCIA 全体をアンロードするには、rc.pcmcia
スクリプトを
/etc/rc.d/rc.pcmcia stop
として起動します。全てのクライアント・ドライバに対して正常にシャットダ ウンするだけの余裕をあたえるため、このスクリプトの実行にはしばらく時間 がかかります。もしその時点で使用中の PCMCIA ドライバがあると、シャット ダウンは失敗します。
APM(Advanced Power Management)をシステムに組みこんでいれば、カードサー
ビスと組みあわせて使うことができます。APM は 1.3.46 以降のカーネルには
標準で組みこまれています。APM は現在 Rick
Faith<faith@cs.unc.edu
>がメンテナンスしています。APM 用
のツールは ftp.cs.unc.edu
の /pub/users/faith/linux
から入手できます。利用可能なバージョンの APM が組みこまれていれば、カー
ドサービスのコンパイル時に自動的に APM 用の設定が行われます。
APM を使わない場合、PCMCIA カードを正しくシャットダウンして再起動する
には、ラップトップ機をサスペンドする前に ``cardctl suspend
'' し、
レジュームした後 ``cardctl resume
'' します。ただし、モデムカード
ではこのようにしてもサスペンド前の設定を復旧することはできません。なぜ
なら、シリアルドライバはモデムを操作するパラメータをセーブしたりリスト
アしたりできないからです。
APM を使うと不安定になるシステムもいくつか報告されています。もし APM とPCMCIA に関してトラブルが出た場合、バグを報告する前に、問題がどちら のパッケージに由来するものか確認してみてください。
cardctl
か cardinfo
コマンドを使ってください。
``cardctl suspend #
'' (# はソケットの番号)で、そのソケッ
トをサスペンドして電源を切ります。同様に ``cardctl resume #
''
コマンドで以前の状態に復帰することができます。
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
or
cardctl scheme work
とします。
cardctl
コマンドは利用中の全てのカードを終了させて再起動しま
す。このコマンドはPCMCIA システムがロードされているか否かにはかかわら
ず実行できますが、他の PCMCIA デバイスを使っている時(その設定がスキー
マの設定に関係なくとも)には実行に失敗することもあります。
現在利用中のスキーマを知るには、
cardctl scheme
とします。