3

リモート (k)gdb を使用してモジュールの問題をデバッグしています。この問題は、ロード時init()に呼び出されたときにパニックを引き起こします。

スタック トレースは、それdo_one_initcall(mod->init)がクラッシュの原因であることを示しています。シンボル ファイルを gdb に読み込むには、モジュール テキスト セクションのアドレスを取得する必要があります。これを取得するには、モジュールを読み込む必要があります。

insmodin busybox (1.16.1) がサポートされていないため、アドレスを把握するために+ からのオフセットを追加することに-m固執しています。grep modulename /proc/modulesnm

したがって、私はここで一種のニワトリと卵の問題に直面しています-モジュールのロードをデバッグできるようにするには、モジュールをロードする必要があります-しかし、モジュールをロードするには、問題をデバッグする必要があります。 ..

だから私は現在2つのオプションについて考えています - アドレス情報を取得する方法はありますか:

  1. モジュールの初期化コードの printk() による
  2. カーネルコードのどこかで printk() によって

これらすべてを呼び出す前にmod->init()-ブレークポイントをそこに配置し、シンボルファイルをロードし、ヒットcしてクラッシュして燃焼するのを確認できます...

4

1 に答える 1

5

モジュールとしてではなく、カーネルにコードを組み込むことはできますか? init()これにより、呼び出しのデバッグが簡単になる場合があります。

にブレークポイントを設定しdo_one_initcall()、のアドレスを調べmod->initてロード アドレスを取得することもできます。

于 2010-04-09T18:07:14.000 に答える