0

U-Boot を実行するためのスタンドアロン アプリケーションを取得しようとしています。

ターゲットは LEGO EV3 ブロックで、TI OMAP (ARM9) CPU を搭載しています。

ハングする前の U-Boot の出力は次のとおりです。

U-Boot > fatload mmc 0:1 c0007FC0 uimage
reading uimage

384 bytes read
U-Boot > bootm
## Booting kernel from Legacy Image at c0007fc0 ...
   Image Name:   ITK EV3 sample OS
   Image Type:   ARM Linux Standalone Program (uncompressed)
   Data Size:    320 Bytes =  0.3 kB
   Load Address: c0008000
   Entry Point:  c0008000
   Loading Standalone Program ... OK
OK

次のコマンドを「uimage」のアドレス 0xC0008000 に配置しようとしました。

mov pc, lr (ARM code)
bx lr (ARM code)
bx lr (Thumb code)

これらのコマンドは、単に戻る必要があります (アクティブな ARM または Thumb モードに応じて)。ただし、3 つのコマンドはすべて U-Boot がハングするため、最後の「OK」の後は出力が行われません。

U-Boot がハングするのはなぜですか?

4

1 に答える 1

3

私は自分で答えを見つけました:

EV3 ブリックで使用される u-boot のバージョンにはバグがあります。すでにリトルエンディアンに変換されている開始アドレスが2 回変換されるため、結果はもちろん間違っています。

リトルエンディアンの数値をファイルに保存すると、u-boot の出力が正しくなくなります。

   Image Type:   ARM Linux Standalone Program (uncompressed)
   Data Size:    320 Bytes =  0.3 kB
   Load Address: c0008000
   Entry Point:  008000c0               <--- actually 0xC0008000!!!
   Loading Standalone Program ... OK
OK
U-Boot >

ただし、起動は機能します。このバグはスタンドアロン プログラムにのみ影響し、Linux カーネルには影響しません。

私の問題は、プログラムが公開される可能性があるため、バグのあるバージョンとバグ修正された u-boot バージョンの両方で動作する必要があることです。

したがって、プログラムを次のようなアドレスにロードすることを考えます

0xC00101C0

リトルエンディアンとビッグエンディアンは同じ方法で保存されます。

于 2014-01-23T09:31:53.090 に答える