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

この章の目次へ

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

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

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_tcicdump_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 がそれです。ドライバを作成する際の参考にし てください。

前の章へ

この章の目次へ, この文書の目次へ

この文書の最初へ , この章の最初へ