1

TI - AM3359 SoC を使用して、ビーグルボーンのカーネルまたはオペレーティング システムのプログラミングを開始しています。いくつかの文字をシリアル インターフェイスに書き込むためのアセンブリ プログラムを作成しました (最初から)。Linux カーネルと同じように、これをビーグルボーンのカーネルとして実行したいと考えています。

私のプログラムのリンクアドレスは何ですか?

デフォルトでu-bootから起動する方法は?u ブート プログラミングには入りたくないので、BBone と一緒にオングストローム ディストリビューションに付属している利用可能な u-boot を使用したいと考えています。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

2

いくつかの文字をシリアル インターフェイスに書き込むためのアセンブリ プログラムを作成しました (最初から)。Linux カーネルと同様に、これをビーグルボーンのカーネルとして実行したいと考えています。

あなたが書いたものは「スタンドアロンプ​​ログラム」と呼ばれます。リソースとサービスを OS に依存するアプリケーション プログラムとは異なり、外部コードを操作する必要はありません。カーネルが持つべき機能を何も持っていないので、それをカーネルと呼ぶべきではありません (まだともかく)。

私のプログラムのリンクアドレスは何ですか?

注: 典型的なスタンドアロン プログラムの場合、通常、スタンドアロン コードは再配置可能でなく、位置に依存しないため、"ロード アドレス" と "リンク アドレス" は同じ値になることがよくあります。

U-Boot は通常、上位の物理メイン メモリでリンク、ロード、および実行されます。

Linux カーネルは、通常、物理メイン メモリの先頭+ 0x8000 (ARM の場合) で実行するようにリンクされています。しかし、特に zImage や uImage などの圧縮ファイルの場合、カーネル イメージは通常、より高いアドレスでメモリにロードされ、解凍ルーチンは Linux カーネルを適切なロードおよび開始アドレスにインストールします。

そのため、物理メイン メモリが少ない「適切な」アドレスは、プログラムをリンクしてロードするのに適しています。

デフォルトでu-bootから起動する方法は?

U-Boot は、実行を 2 種類の「プログラム」(およびスクリプト) に転送できます。プログラムの 1 つのタイプは、 bootmコマンド
を使用する「カーネル」です。 これは、完全に自己完結型で、システムを引き継ぐ mkimage ユーティリティによってヘッダーがインストールされたカーネルまたはプログラム用です。U-Boot をカスタマイズして、このカーネル用にシステムを準備できます。Linux の場合、メモリ バッファーが割り当てられ、ユーザー定義のテキストで初期化され、カーネル コマンド ラインとして Linux カーネルに渡されます。ARM Linux の場合、別のメモリ バッファが割り当てられ、データで初期化され、ATAGとして ARM Linux カーネルに渡されます。

もう 1 つのタイプのプログラムは、goコマンドを使用します。
これは、U-Boot のサービス機能を使用でき、完了時に制御を U-Boot に戻すことさえできる、より単純なプログラム用です。バッファーの準備が不要な場合は、単純なスタンドアロン プログラムでこのgoコマンドを使用する必要があります。

bootcmd環境変数の定義でいずれかのコマンドを使用できます。これは、ブート タイマーが期限切れになったときに実行/実行される変数です。

于 2013-03-13T01:16:09.503 に答える