カーネルモジュールもあるコードをデバッグしたい。コードだけでなくカーネルにもブレークポイントを設定できます。操作を実行すると、カーネルコードで設定されたブレークポイントにヒットしますが、私のコードではブレークポイントにヒットしません。
ターゲットマシン:コードをデバッグするマシンホストマシン:コードのデバッグに使用されるマシン
続く手順:ホスト上:
$ gdb vmlinux
(vmlinux copied from target machine )
$ gdb> target remote /dev/ttyS1
$ cont
continuing
ターゲット上:$ insmod mymodule.ko $ cd / sys / module / mymodule / sections / $ cat .data $ cat .rodata $ cat .bss $ cat .text
$ echo "g" > /proc/sysrq-trigger
ホスト上:
$ add-symbol-file <module_name> <address> \
-s .bss <address> \
-s .rodata <address> \
-s .data <address>
$ b file_name //set break points
$ c
continuing
ターゲット上:コマンド(プログラム)を実行します.....しかし、ブレークポイントにヒットしません......ブレークポイントにヒットせずに実行を終了します。
しかし、vfs_read()などのカーネル関数にブレークポイントを設定しようとすると、ブレークポイントに到達します。