3

kgdb を使用して Linux カーネルをデバッグしようとしています。ターゲットマシンとしてqemuを使用しています。Ubuntu 12.04 は私のホスト OS です。このコマンドを試しました

cyborg@skynet:~$ qemu-system-arm -M versatilepb -m 128M -kernel zImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=/bin/sh kgdboc=ttyAMA0,115200 kgdbwait"

起動して表示を待ちます

kgdb: リモート gdb からの接続を待機しています

そして、コマンドを使用してLinuxホストでgdbを使用してデバッグしようとすると

cyborg@skynet: arm-none-linux-gnueabi-gdb vmlinux

(gdb): リモートボーを 115200 に設定

(gdb) ターゲット リモート /dev/ttyS0 /dev/ttyS0 を使用したリモート デバッグ パケット エラーを無視して続行しています...

警告: 「qSupported」応答で認識されないアイテム「タイムアウト」

パケット エラーを無視して続行しています...

パケット エラーを無視して続行しています...

パケット エラーを無視して続行しています...

パケット エラーを無視して続行しています...

オフセット クエリへの不正な応答、タイムアウト

私は本当に私が欠けているものを手に入れていません!

PS I は Linux カーネル 2.6.39.4 を KGDB オプションを有効にしてコンパイルしました。そして、これらの指示に従って、qemu でカーネルを実行しました。

4

2 に答える 2

3

/dev/ttyS0ホストで参照する場合gdbは、存在する物理シリアルポートを使用しようとします。qemu代わりに、のエミュレートされたシリアルポートをに接続する必要がありますgdb。マニュアルを読むと、コマンドラインに次のqemuようなものを追加することで、エミュレートされたポートをtcpネットワークにリダイレクトできるようです。で、を使用して接続できます。-serial tcp::1234,serverqemugdbtarget remote :1234

于 2012-12-06T22:45:04.577 に答える
1

Qemu 内で実行する場合、kgdb を使用する本当の理由はありません。Qemu コマンド ラインで「-gdb tcp::8888」などを指定するだけで、GDB スタブをアクティブ化できます。その後、ARM 対応 GDB を使用してスタブに接続できます。

 target remote:8888

そして、離れてデバッグします。次のgdb ヘルパー スクリプトが役立つ場合があります。

于 2012-12-07T12:54:03.527 に答える