2013-01-04 10 views
14

Im ARMv7をターゲットマシンとして使用します。私はターゲットとしてLinuxソース2.6.34.13をコンパイルしました。ARMでkgdbを使用するには?

ターゲットはminicomを使用してシリアルポート経由でホスト(Linux開発マシン)に接続されています。

ターゲットに新しいカーネルがロードされ、KGDBがコマンドプロンプトで有効になっています。

$ echo ttyAMA0 > /sys/module/kgdboc/parameters/kgdboc 
$ echo g > /proc/sysrq-trigger 

Entering KGDB ...というメッセージが表示され、コマンドを待っています。この後

ホスト側

$arm-none-linux-gnueabi-gdb vmlinux 

    gdb > set remotebaud 115200 
    gdb > set debug remote 1 
    gdb > target remote /dev/ttyS0 

、いくつかのコマンド通信は、デフォルトで行われます。

  1. qSupportedがホストからターゲットに送信されます。しかし、qSuppotedはターゲットによってサポートされていないので、$#00が返されます。同様に?HC-1コマンドが送信されましたが、適切な応答が得られました。

  2. しかし、qOffsetsコマンドは、ターゲットからの応答を受信しません。

私はvmlinuxと思われます。私はGDBにlistを与えた場合、そのコードの10行が表示されないので代わりにそれは

arch/arm/kernel/head.S : No such file or directory. 

注::カーネルのコンパイルはサーバーで行わ言います。開発マシンではソースが利用できません。しかし、arm-gdbは頭を探しているようです。

私は何をしているのかよく分かりません。私はカーネル全体のために読み込まれるシンボルが必要です。この点について私を案内してください。

+0

わかりませんが、「ホスト」でコンパイルされたカーネルはデバッグに使用されていますか? &あなたは他の場所でコードを移動していないのですか? – anishsane

+1

そのため、ソースを見つけることができないのはなぜですか? – anishsane

+0

'kgdb'はソースコードを利用する必要がありますか?おそらく 'kgdb'にコードを探すように指示するコマンドラインオプションがあります。 – BenjiWiebe

答えて

1

最後に、ホストとターゲットの通信は、回線遅延のbcosを確立しました。開発マシンのカーネルソースとタイムアウトの間には何の関係もありません。

コマンドの一部でタイムアウトの問題が発生すると、qOffsetqSupportedは、シリアルポート通信ツールとしてminicomではなくGtkTermを使用することで解決します。 違いは、GtkTermの「回線遅延」オプションです。したがって、これが〜250に設定されていると、その後にタイムアウト・メッセージはありません。単に接続が確立され、デフォルトのブレークポイントで待機します。もし誰かがミニマムでこれを与える方法を知っていれば、より多くの人に役立つだろう"line delay"

はい、私たちはlistコマンドのソースコードを実行する必要があります。これらのソースもなくてもsi, btのデバッグがvmlinuxsystem.mapの助けを借りて実行できます。

注:: set debug remote 1は必要ありません。これにより、ホストとコマンド通信の詳細な表示が可能になります。詳細は、set debug serial 1をご覧ください。

+0

これは答えですか? – unwind

+0

それは観測です。 – Jeyaram

1

kgdbがhead.Sを探しているのはエラーではありません。 hereを見ると、ソースツリーにhead.Sファイルがあることがわかります。これはすべてのアセンブラファイルです。このプラットフォームのアセンブラには、いくつかのソースファイルが記述されています。

いくつかの命令、特に起動シーケンスや他の "低レベル"の機能がアセンブラで書かれているので、これは正常です。

コメントに書かれているように、gdbはデバッグ中にそれらをブラウズするためのソースが必要です。デバッグシンボルが含まれ、-gでgccを実行して生成されるデバッグセクションでは、とりわけ、ソースファイルと行とカラムに対する「唯一の」参照があります。詳細については、hereを参照し、gccを使用したデバッグシンボルについてのリンクを参照してください。

kgdbが探しているのはhead.Sです。これは正しいことを示す良い兆候です。あなたが入手可能なソースを持っていれば(正しいバージョンのtarballを解凍するのと同じくらい単純なこともあります)、このソースツリー内でkgdbを実行するか、または-d引数を使用してsource-search-pathを追加してください。

+0

thats有益。ありがとう。 – Jeyaram

関連する問題