0

ドライバーをデバッグしようとしています。

gdb は...
(gdb) break i2c-hid.c:i2c_hid_suspend
i2c-hid.c という名前のソース ファイルはありません。
ブレークポイント 9 (i2c-hid.c:i2c_hid_suspend) 保留中。

nm vmlinux --- そのファイル内から関数名が見つかりません。

cat /proc/kallsyms --- そのファイルに含まれるすべての関数名を表示します。

これをMakefile「EXTRA_CFLAGS += -DI2C-HID_DEBUG -g」に追加しましたが、役に立ちませんでした。

gdb がこのファイルからシンボルを認識できるようにするために何をする必要があるか知っている人はいますか?

他の多くのドライバーのシンボルレベルのデバッグを取得します。

4

2 に答える 2

0

Linux カーネルをデバッグする場合、GDB は、ユーザー モードの共有ライブラリの場合とは異なり、カーネル モジュールのシンボルを自動的に読み込みません。代わりに、次のコマンドを使用して手動でロードする必要があります。

add-symbol-file <kernel module>.o <core address> -s <sectionX> <addressX> -s <...>

モジュールのコア アドレス (およびすべてのセクションのアドレス) は、do_init_module()関数にブレークポイントを設定し、ブレークポイントに到達しmodたら変数を調べることで確認できます。

print mod->name
print mod->module_core
print *mod->sect_attrs->attrs@mod->sect_attrs->nsections

カーネル モジュール シンボルのロードについて詳しくは、Linux カーネル シンボルの概要を参照してください。

于 2014-03-17T03:08:22.383 に答える