/etc/pcmcia/config - PCMCIA
カードの設定データベース
PCMCIA
カード設定ファイルは
cardmgr(8)
が起動時に読み込む。
この設定ファイルは、カードサービスが利用できる
IO ポート・メモリ・IRQ
といったリソースを定義し、
デバイスドライバのロードや初期化の方法を指定し、
それぞれの PCMCIA
カードの詳細について記述する。
リソースの記述¶
リソースのエントリには
3 つの種類がある。
include,
exclude,
reserve
である。 include
したリソースは、
カードサービスがクライアントとなる各種ドライバに割り当てる。
カードサービスの制御下にあるリソースは
exclude
することもできる。
例えばシステムの特定のデバイスがそのリソースを使うような場合である。
リソースは reserve
することもできる。
この場合は、そのリソースを特に使いたいと要求するクライアントが現われるか、
あるいは他に割り当て可能なリソースが無くなるまで、
そのリソースは割り当てない。
リソースのタイプには
3 つの種類がある。
port,
memory,
irq である。
デフォルトでは、カードサービスは他のデバイスドライバが使っていない
irq
を自由に使えるものと仮定する。
しかし、カードサービスは
I/O
ポートとアドレスの範囲に関しては
なんの仮定も行わない。
Linux のドライバの中には
リソースの利用状況を登録しない物があるからである。
そのため、 IO
ポートとメモリの範囲については、
PCMCIA
デバイスが使って良い部分を明示的に指定しなければならない。
これらをまとめると、設定ファイルの内容は以下のようになる:
include port 0x300-0x3ff, memory 0xd0000-0xdffff
reserve irq 3
exclude irq 4, port 0x3f8-0x3ff
この例では、カードサービスは
I/O ポートの 0x300 から 0x3ff
と、メモリの 0xd0000 から
0xdffff
までを割り当てて良いことになる。
exclude 指定をした irq 4 と I/O
ポートの 0x3f8 から 0x3ff は、
利用可能であっても使わない。
reserve 指定した irq 3 は、
特にその割り込みをクライアントが必要とした場合に限って利用する。
カードサービスは、他のカーネルデバイスドライバに割り当てられている
リソースは決して利用しない。
include/
exclude/
reserve
メカニズムは、カードサービスが使おうと試みるリソースを指定するもので、
Linux
のリソースマネージャーに登録されないデバイスと
うまく共存するための仕組みなのである。
デバイスドライバの記述¶
カードサービスの全てのクライアントドライバは、
32
文字のタグによって識別される。
設定ファイル中の
device
エントリがクライアントドライバを記述する。
必須のフィールドは識別用のタグのみで、
その他のフィールドには、
そのデバイスを利用するためにロードすべきカーネルモジュールや
デバイスの実体を有効/無効するために実行するスクリプトを指定する。
ドライバの実体がソケットに割り当てられると、
ドライバは cardmgr
にシステムから見たそのデバイスの名称
(ネットワークデバイスならば
eth0、 モデムならば
cua1 など) を通知する。
この名称は設定用スクリプトに渡される。例えば:
device "pcnet_cs"
class "network"
module "net/8390" opts "ei_debug=4", "pcnet_cs"
という指定では、
pcnet_cs
デバイスは 2
つのローダブルモジュールが必要であることを示している。
1 つめのモジュール (8390)
はモジュールディレクトリの
net
サブディレクトリにあり、指定したパラメータ
ei_debug=4
と共にロードされる。
2 つめのモジュール (de650_cs)
は
pcmcia
サブディレクトリにある。
このデバイス (pcnet_cs) は
network
というクラスに属し、デバイスの起動と終了には、
設定ファイルと同じディレクトリにある
network スクリプト (/etc/pcmcia/network)
が利用される。
デバイスドライバ宣言の外部で、
特定のカーネルモジュールのデフォルトのオプションを指定することもできる。
これはローカルな設定オプションを
メインのカード設定ファイルから分離するのに便利である。
module "pcnet_cs" opts "mem_speed=600"
カードの記述¶
card 宣言は、PCMCIA
カードとそのクライアントドライバとを
結びつけるものである。
card
宣言は、カードの名称・カードが挿入された際の識別方法・
利用するドライバ、の
3 つの部分からなる。
カードを識別するには
6 つのメソッド (方法)
がある。
version
メソッドはカード識別に
VERSION_1 id 文字列を用いる。
manfid
メソッドはカードの
MANFID
タプルコードを用いる。
pci メソッドは CardBus
カードの PCI デバイス ID
を用いる。
tuple
メソッドはカードの任意の
CIS
タプルに埋めこまれた文字列を用いる。
function
メソッドはカードの
function ID を用いる。
anonymous
メソッドは CIS
を持たないカードにマッチする
(これは旧式のタイプ I
メモリカードに用いる物である)。
以下にいくつか例を示す。
card "Linksys Ethernet Card"
tuple 0x40, 0x0009, "E-CARD PC Ethernet Card"
bind "pcnet_cs"
このカードは 0x40
タプルのオフセット
0x0009 から始まる 文字列
"E-CARD PC Ethernet Card"
によって識別され、
pcnet_cs
ドライバにバインドされる
(ドライバはあらかじめ
driver
宣言で定義されていなければならない)。
card "Connectware LANdingGear Adapter"
manfid 0x0057, 0x1004
bind "pcnet_cs"
このカードは MANFID
タプルの内容によって識別される。
pci
メソッドも同じ形式で、
manfid の代わりに
pci
と書く。
card "D-Link DE-650 Ethernet Card"
version "D-Link", "DE-650"
bind "pcnet_cs"
このカードは VERISON_1
タプルによって識別され、
pcnet_cs
ドライバにバインドされる。
card "Serial port device"
function serial_port
bind "serial_cs"
これは CIS function ID が 0x02
(シリアルポートカードに対応)
のあらゆるカードを
serial_cs
ドライバにバインドする。
function ID
は数字でも良いし、定義済みの
function である
memory_card,
serial_port,
parallel_port,
fixed_disk,
video_adapter,
network_adapter,
aims_card
のいずれかでもかまわない。
最後に、カードで見付かった設定情報とは異なるものを
カードサービスに用いさせるような指定も設定ファイルでは可能である。
カードの設定情報が特に不完全・不正確である場合にこれを使えることもある。
新しい設定はファイルから読み込む。例を示す:
card "Evil broken card"
manfid 0x1234, 0x5678
cis "fixup.cis"
bind "serial_cs"
メモリ領域定義¶
メモリ領域定義は、特定の形式のメモリデバイスを
Memory Technology Driver (MTD)
に関連付けするために用いられる。
MTD
はメモリアクセスを、デバイス独立なやり方で提供する。
カードがこの種のメモリデバイスであると識別されると、
カードサービスはそのメモリ領域全てに対して
MTD
を読み込もうとする。
メモリ領域定義は
region
キーワードと識別文字列から始まる。
次に識別メソッドである
default か
jedec が来る。
default
は他に分類されなかったすべての領域で使う
MTD を指定し、
jedec
はメモリ領域を JEDEC
の識別コードによって識別する。
例えば
region "Intel Series 2 Flash"
jedec 0x89 0xa2
mtd "iflash2_mtd"
は、 JEDEC がマッチすれば
iflash_mtd
ドライバがロードされることを示している。
今のところ
reserve
キーワードの実装はこのバージョンのカードサービスにはあまり便利でない。
David Hinds - dahinds@users.sourceforge.net
関連項目¶
cardmgr(8)