1

ARM9 のアセンブリ スタートアップ コードには、理解できない次のような行がいくつかあります。

    .word   0x41676d69
    .word   0,0,0,0,0
image_type:
    .word   0x0000000A
sizeOfPermanentCode:    
    .word   (__image_size)
    .word   0,0
bootparameter:  
    .word   0
    .word   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

番号 0x41676d69 はある種のイメージ マジック ナンバーだと聞いたことがありますが、なぜそれが使用されるのかわかりません。他の .word 要素はどうですか? 彼らは何ですか?彼らは何をしますか?

敬具 ジガ・ラウゼッガー

4

1 に答える 1

3

私が見ているところによると、ブートイメージは最初は次のようになっているはずです...

+--------------------------+
|      (asm) B Start       | 0x00
+--------------------------+ 
|    Magic (0x41676d69)    | 0x04
+--------------------------+
| code CRC (if type=0x0b)  | 0x08
+--------------------------+
|                          | 0x0c
+--                      --+
|                          |
+--       Reserved       --+
|        (set to 0)        |
+--                      --+
|                          |
+--------------------------+
| image type(0x0a or 0x0b) | 0x1c
+--------------------------+
| image size (incl header) | 0x20
+--------------------------+
| image version (ignored)  | 0x24
+--------------------------+
|   build time (ignored)   | 0x28
+--------------------------+
|  "boot parameter" (..?)  | 0x2c
+--------------------------+
:                          : 0x30
.                          .
  it gets fuzzy from here. 
  Looks like this is yours 
  to do what you want with 
.                          .
:                          :
+--------------------------+
| header CRC(if type=0x0a) | 0x6c
+--------------------------+ 
|                          | 0x70
+--                      --+
|                          |
+--       Reserved       --+
|        (set to 0)        |
+--                      --+
|                          |
+==========================+
|  boot code starts here   | 0x80

B Start、ブート コードのエントリ ポイントへのジャンプ命令です。そのエントリポイントがどこにあるかは、ほとんどあなた次第です。

0x41676d69、これが起動可能なイメージであることをブート ローダに伝えます。CRC は基本的にチェックサムです (ただし、計算方法は聞かないでください)。幸い、image_type が 10 ( 0x0a) に設定されている場合、それらは無視され、0 に設定できます。

私が見ている限り、イメージのバージョンとビルド時間もブートローダーによって無視されます。それらは、バージョンやものを簡単に把握できるようにするためのツールやその他のもののためにそこにあります。

「ブートパラメーター」については、よくわかりません。「0 に設定するだけ」というメッセージが表示されますが、これは明らかに機能します。:)しかし、0でない場合の意味はわかりません。

于 2012-03-02T17:56:16.820 に答える