0

私は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: 権限が拒否されました

...、段階的に明確な回答をいただければ幸いです...、よろしくお願いします

4

1 に答える 1