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