以下に示すものは全てのバグレポートに必ず書いてほしいことです:
probe
コマンドの出力config.out
ファイルの内容/etc/pcmcia
下のスタートアップファイルか
rc.pcmcia
に加えたあらゆる変更既につぶしたバグに関するリポートを読まされるのはあまり生産的ではないの で、バグレポートを送る前に最新のドライバを使っているかどうか確認してく ださるようお願いします。
もしカーネル自身がエラーを起す(fault)するようなら、問題となるアドレス、
EIP、を特定するためにはレジスタのダンプ情報しか役に立たないでしょう。
もしそのアドレスがカーネル本体をさしていれば、System.map
を参
照して、どの関数でエラーが起きたのか調べてください。もし実行時ロードモ
ジュールでエラーが起きていれば追及するのは多少難しくなります。モジュー
ル用ツールの ``ksyms -m
'' で各ロード可能モジュールのベースア
ドレスがわかります。各モジュールのアドレスから EIP アドレスを含んでい
るモジュールを選び、モジュール内部の offset 分を求めるために EIP から
ベースアドレスを引きます。そして、gdb をそのモジュールに対して使い、
list
コマンドを使って問題となるオフセットのあたりを調べます。
ただし、この方法は-g
オプションを使ってデバッグ情報を含むよう
にモジュールをコンパイルした時しか使えません。
バグレポートは dhinds@allegro.stanford.edu
まで送ってください。
バグレポートは e-mail でお願いします。自宅や職場に電話しないでください。
バグレポートは WWW 経由でも報告できます。詳しくは
http://hyper.stanford.edu/~dhinds/pcmcia/pcmcia.html
をご覧く
ださい。
PCMCIA モジュールにはコンパイル時のオプションで決まるデバッグ用コード
が多数含まれています。 これらのコードの大部分はプリプロセッサの
PCMCIA_DEBUG
という定義でコントロールされています。もし
PCMCIA_DEBUG
が未定義ならば、デバッグ用のコードはコンパイルさ
れません。もし 0 に定義されていれば、コードはコンパイルされるものの、
利用されません。この数字を大きくすればデバッグメッセージはより細かくな
ります。PCMCIA_DEBUG
を定義してコンパイルした各モジュールには
pc_debug
という整数変数が設定され、この変数でデバッグ出力の詳
しさを制御できます。この変数はモジュールがロードされる際に調整可能で、
再コンパイルしなくてもモジュール毎にデバッグ出力を変更することが可能で
す。
PCMCIA パッケージの debug_tools/
ディレクトリには、デバッグ用
のツールが入っています。dump_tcic
と dump_i365
コマ
ンドは PCMCIA コントローラーのレジスタを全てダンプし、多数のレジスタ情
報をデコードします。これらのコントローラーチップのデータシートが利用で
きるなら、この情報は非常に有効でしょう。dump_tuples
コマンド
は、カードの CIS(Card Information Structure) を示し、いくつかの重要な
ビットをデコードします。dump_cisreg
コマンドはカードのローカ
ルな設定レジスタを示します。
メモリカードドライバである pcmem_cs
もデバッグに利用できます。
このドライバはどんな PCMCIA カードにも利用でき、他のドライバと干渉する
ことはありません。このドライバを使えば、どんなカードの属性メモリや共通
メモリにも直接アクセスできます。
``Linux PCMCIA Programmer's Guid'' が Linux 用の PCMCIA インタフェース
に関する最善の文書です。最新版は、hyper.stanford.edu
の
/pub/pcmcia/doc
にあります。
使いたいデバイスが普通の ISA デバイスによく似ていれば、既存の Linux 用 のドライバの一部を流用することもできるでしょう。多くの場合、既存のドラ イバを修正してブート後にもデバイスを追加したり外したりできるようにする のがもっとも苦労するところです。今あるドライバの中では、メモリカード用 のドライバが、あらゆる種類の汚れ仕事をするのにカーネルの他の部分を利用 しない唯一の ``自己完結した'' ドライバです。
ドライバがカードサービス・システムとどのように通信するかを説明するため に、多数のコメントを入れたドライバのヒナ型を作りました。 modules/skeleton.c がそれです。ドライバを作成する際の参考にしてください。