1

AM3517 評価ボードで JTAG を介して Linux カーネルをロードして起動しようとしています。私のデバッガは BDI3000 です。デバッガーのドキュメントによると必要ないため、私は openocd を使用していません。これまでのところ、vmlinux イメージをメモリにロードできると思いますが、完了すると「cont」gdb コマンドで Linux が起動しません。シリアル コンソールにメッセージが表示されません。

このリンクhttp://elinux.org/Debugging_The_Linux_Kernel_Using_Gdbの指示に従っています

リンクに記載されているようにlog_bufferのアドレスを取得しようとすると、次の出力が得られます

(gdb) p (char*) &__log_buf[log_start]
$1 = 0xc04cd460 <Address 0xc04cd460 out of bounds>

私はインターネットでたくさん検索しましたが、適切な答えを見つけることができませんでした。私が間違っているのかわかりません。

4

1 に答える 1

2

Linux カーネルは、単にロードして実行することはできません。
Linux カーネルを実行する前に、ARM アーキテクチャではブートローダーが次のことを行う必要があります。

  • メモリ システムを構成します。
  • カーネル イメージを正しいメモリ アドレスにロードします。
  • 必要に応じて、初期 RAM ディスクを正しいメモリ アドレスにロードします。
  • カーネルに渡すブート パラメータを初期化します (カーネル コマンド ラインとも呼ばれます)。
  • ARM Linux マシン タイプ (および ATAG のその他の情報) を取得します。
  • 適切なレジスタ値でカーネルに入ります。

これらの手順のほとんどはすべてのアーキテクチャに共通ですが、システム情報の ATAG リストは ARM に固有のものです。
これらの起動要件はすべて、「ARM Linux の起動」に記載されています。
通常、ブートローダー (U-Boot など) がこれらのタスクを実行します。
また、あなたが言及したチュートリアルでは、ブートローダーを使用してボードを初期化するように指示されています。

これを行う最も実用的な方法は、カーネルの開始時にハードウェア ブレークポイントを設定
し、JTAG リセット信号を使用してボードをリセットすることです。
ブートローダーがボードを初期化し、カーネルの開始時に実行が停止します。
その後、カーネルをメモリにロードして実行できます。

于 2013-02-18T19:40:28.067 に答える