4

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 ターゲット) の可能性がありますが、実際にはブレークポイントが設定されているようです。

助けてください

4

2 に答える 2

0

テスト マシンで、スーパーユーザーとしてログインします。

sudo su

その後、sysrq-trigger を生成します

echo g > /proc/sysrq-trigger

この後、ターゲット マシンはフリーズしますが、開発マシンはターゲットに割り込む必要があります。

于 2015-07-16T18:26:27.363 に答える
0

両端のボーレートを下げます。私の経験では、理論的には 115200 ボー レートがサポートされていますが、正しく動作することはめったにありません。ボーレートを (両端で) 9600 に下げて、成功することをお勧めします。それが達成されたら、一度に 1 ステップずつ速度を戻すことができます。kgdb が 34K ボーを超えて確実に動作することはめったにありません。また、適切な RTS/CTS クロス リンク コネクタ、店で購入したもの、および手作りのものを使用することも確認しました。それは決して問題ではありません。問題は SUT 側の kgdboc の問題であり、115200 ボーレートで常に完全に動作するとは限らないと思います。解決策は、ボーレートを 9600 に下げることです。データは小さいので、速度を遅くしても問題はありません。確実に動作させることは、速度を犠牲にする価値があります。

于 2016-03-04T18:45:27.027 に答える