以下に示すものは全てのバグレポートに必ず書いてほしいことです。
probe
コマンドの出力/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 でお願いします。自宅や職場に電話しないでください。
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 カードからでも利用でき、他のドライバと干渉しません。
このドライバを使えば、どのカードの属性メモリや共通メモリでも直接アクセ
スできます。
Linux PCMCIA プログラマガイドが Linux 用の PCMCIA インタフェースに関す
る最善の文書です。最新版は、cb-iris.stanford.edu
の
/pub/pcmcia/doc
にあります。
そのデバイスが普通の ISA デバイスによく似ていれば、既存の Linux 用の ドライバの一部を流用することもできるでしょう。多くの場合、既存のドラ イバを修正してブート後にもデバイスを追加したり外したりできるようにす るのがもっとも苦労するところです。今あるドライバの中では、メモリカー ド用のドライバが、あらゆる種類の汚れ仕事をするのに Linux カーネルの 他の部分を利用しない唯一の ``自己完結した'' ドライバです。
ドライバがカードサービス・システムとどのように通信するかを説明するため
に、多数のコメントを入れたドライバのヒナ型を作りました。
modules/skeletn.c
がそれです。ドライバを作成する際の参考にし
てください。