私はKGDBに非常に慣れていません。ホストからターゲットを接続するときに問題が発生し、次のエラーが発生します。
(gdb) ターゲット リモート /dev/ttyUSB0 /dev/ttyUSB0 を使用したリモート デバッグ パケット エラーを無視して続行しています... 警告: "qSupported" 応答でアイテム "swreak" を認識できません 警告: 「qSupported」応答で認識されない項目「ReloInsn」 警告: 認識されないアイテム「QTread」 [3]kdb> "qSupported" 応答 ターゲットからの偽のトレース ステータス応答: qTStatus ...#
手順Imは次のとおりです。
#[Target] stty -F /dev/ttyS0 115200 [Host] stty -F /dev/ttyUSB0 115200
シリアル接続が双方向で機能することを確認します。以下を使用できます。
[Host] cat /dev/ttyUSB0 [Target] echo 'from TARGET to HOST' > /dev/ttyS0 [Target] cat /dev/ttyS0 [Host] echo 'from HOST to TARGET' > /dev/ttyUSB0
マシンの両側にメッセージが表示されます。そうでない場合は、ケーブルまたはドライバーに問題がある可能性があります。
カーネルをコンパイル
カーネル構成で KGDB* 、KGDB_SERIAL*、KGDB_USB*、DEBUG_INFO、DEBUG_INFO_DWARF4、MAGIC_SYSRQ を有効にします。コンパイルして TARGET にインストールします。
ここでの主な目的は、KGDB 機能を有効にして、vmlinux でデバッグ情報を保持することです。
エージェントとプロキシのセットアップ
agent-proxy は、TARGET のシリアル ポートのプロキシとして機能します。多重化のためにシリアルポートを分割します。1 つはプライマリ コンソール I/O 用で、もう 1 つは GDB セッション用です。したがって、両方を同時に処理できます。HOST マシンでエージェント プロキシを実行する必要があります。
git clone http://git.kernel.org/pub/scm/utils/kernel/kgdb/agent-proxy.git cd agent-proxy ; make ./agent-proxy 5550^5551 0 /dev/ttyUSB0,115200
これはリダイレクトします:
- TARGET のコンソールから HOST:5550 へ
- HOST:5551 への TARGET の kgdb リスニング ポート
デバッグを開始
まず、プライマリ コンソールを開きます。
[Host] telnet localhost 5550
次のいずれかの方法で kdb モードに入ります。
[Target] echo ttyS0,115200 > /sys/module/kgdboc/parameters/kgdboc [Target] dmesg | tail
(KGDB: Registered I/O driver kgdboc が表示されるはずです。それ以外の場合は失敗しました)
[Target] echo g >/proc/sysrq-trigger Host> gdb vmlinux (gdb) target remote localhost:5551 Remote debugging using localhost:5551 kgdb_breakpoint () at kernel/debug/debug_core.c:1072 1072 wmb(); /* Sync point after breakpoint */ (gdb)
ターゲットミッションでkgdbと入力すると、以下に示すように許可が拒否されたというエラーが表示されます
[3]kdb>kgdb diag: -22: 権限が拒否されました
...、段階的に明確な回答をいただければ幸いです...、よろしくお願いします