kgdb / リモート gdb を使用して Linux ubuntu カーネルをデバッグしています。ubuntuターゲットとWindowsホストの2台のコンピューターがあります。コンピュータは、シリアル ポートとヌル モデム ケーブルを使用して接続されます。
KGDB のサポートは、ターゲットの ubuntu システムで有効になっています。KGDB のコマンド オプションは次のとおりです。
kgdbwait kgdboc=ttyS0,115200
私の Windows システムには、MinGW gdb ビルド (x86_64) があります。
GNU gdb (GDB) 7.4 Copyright (C) 2012 Free Software Foundation, Inc. この GDB は「x86_64-w64-mingw32」として構成されていました。
ターゲット システムを起動すると、リモート デバッガーが接続されるまで待機します。GDB ウィンドウに次のコマンドを入力します。
(gdb) set remotebaud 115200
(gdb) target remote COM4
私のgdbはターゲットに接続でき、次を出力します:
kernel/debug/debug_core.c:1043 wmb(); でCOM4 ???() を使用したリモート デバッグ。/* ブレークポイント後の同期ポイント */
次に、OS の起動時に gdb に戻れるようにブレークポイントを設定するコマンドを入力します。
(gdb) b sys_sync
0xffffffff8124a710 のブレークポイント 1
同じセットアップの別の実行で、ハードウェア支援のブレークポイントも試しました。
(gdb) hbreak sys_sync
このブレークポイントの設定により、ターゲットの ubuntu コンソールから sync コマンドを入力すると、カーネル ビークがデバッガに戻るはずです。
GDBで続行を押した後、OSは正常に起動しますが、制御をgdbに戻すことはできません。sys_sync にブレークポイントを設定してみました。
echo g > /proc/sysrq-trigger
すべての場合で成功しません。
非常に興味深い: 最初に sys_sync にブレークポイントを設定しないと、後で sync コマンドを入力しても何も起こりません。sys_sync ブレークポイントを設定すると、後で sync コマンドを入力すると、ターゲット コンピューターが完全に停止するため、この場合、ブレークポイントが実際に設定されていると思います。
デバッガーに侵入するには? GDB は CTrl-C コマンドに応答しなくなるため、最初に [続行] を押した後にデバッグを続行する方法はありません。
アーキテクチャの非互換性 (Windows gdb - Linux ターゲット) の可能性がありますが、実際にはブレークポイントが設定されているようです。
助けてください