リモート (k)gdb を使用してモジュールの問題をデバッグしています。この問題は、ロード時init()に呼び出されたときにパニックを引き起こします。
スタック トレースは、それdo_one_initcall(mod->init)がクラッシュの原因であることを示しています。シンボル ファイルを gdb に読み込むには、モジュール テキスト セクションのアドレスを取得する必要があります。これを取得するには、モジュールを読み込む必要があります。
insmodin busybox (1.16.1) がサポートされていないため、アドレスを把握するために+ からのオフセットを追加することに-m固執しています。grep modulename /proc/modulesnm
したがって、私はここで一種のニワトリと卵の問題に直面しています-モジュールのロードをデバッグできるようにするには、モジュールをロードする必要があります-しかし、モジュールをロードするには、問題をデバッグする必要があります。 ..
だから私は現在2つのオプションについて考えています - アドレス情報を取得する方法はありますか:
- モジュールの初期化コードの printk() による
- カーネルコードのどこかで printk() によって
これらすべてを呼び出す前にmod->init()-ブレークポイントをそこに配置し、シンボルファイルをロードし、ヒットcしてクラッシュして燃焼するのを確認できます...