0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RT3052のブート

Last updated at Posted at 2023-04-26

FONなどで使われているRalinkのRT3052はSPI Flashが使われているケースがあります。

これをダンプしてみると、

00000000  27 05 19 56 fc 71 4e ed  4b 44 29 63 00 00 ed 87  |'..V.qN.KD)c....|
00000010  80 10 00 00 80 10 00 00  6b 5b 17 20 05 05 01 00  |........k[. ....|
00000020  66 6f 6e 6c 6f 61 64 65  72 00 00 00 00 00 00 00  |fonloader.......|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  ff 00 00 10 00 00 00 00  fd 00 00 10 00 00 00 00  |................|
00000050  06 01 00 10 00 00 00 00  04 01 00 10 00 00 00 00  |................|
00000060  02 01 00 10 00 00 00 00  00 01 00 10 00 00 00 00  |................|
00000070  fe 00 00 10 00 00 00 00  fc 00 00 10 00 00 00 00  |................|
00000080  fa 00 00 10 00 00 00 00  f8 00 00 10 00 00 00 00  |................|
00000090  f6 00 00 10 00 00 00 00  f4 00 00 10 00 00 00 00  |................|
000000a0  f2 00 00 10 00 00 00 00  f0 00 00 10 00 00 00 00  |................|

0x0-0x2fがヘッダーで、0x30-0x3fはパディングで、その後がベクターのように見えます。

他の物のダンプ

00000000  27 05 19 56 d8 58 3d 89  4e f1 5a ea 00 01 aa fc  |'..V.X=.N.Z.....|
00000010  80 20 00 00 80 20 00 00  25 4b f4 00 05 05 01 00  |. ... ..%K......|
00000020  53 50 49 20 46 6c 61 73  68 20 49 6d 61 67 65 00  |SPI Flash Image.|
00000030  04 5a 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |.Z..............|
00000040  ff 00 00 10 00 00 00 00  fd 00 00 10 00 00 00 00  |................|
00000050  e1 01 00 10 00 00 00 00  df 01 00 10 00 00 00 00  |................|
00000060  dd 01 00 10 00 00 00 00  db 01 00 10 00 00 00 00  |................|
00000070  d9 01 00 10 00 00 00 00  d7 01 00 10 00 00 00 00  |................|
00000080  d5 01 00 10 00 00 00 00  d3 01 00 10 00 00 00 00  |................|
00000090  d1 01 00 10 00 00 00 00  cf 01 00 10 00 00 00 00  |................|

0xcバイト目から4バイトがサイズで、0x10から4バイトがメモリオフセットのようです。0x40以降をメモリオフセットにサイズ分貼り付けているようです。

ソースに定義がありました。

typedef struct image_header {
        uint32_t        ih_magic;       /* Image Header Magic Number    */
        uint32_t        ih_hcrc;        /* Image Header CRC Checksum    */
        uint32_t        ih_time;        /* Image Creation Timestamp     */
        uint32_t        ih_size;        /* Image Data Size              */
        uint32_t        ih_load;        /* Data  Load  Address          */
        uint32_t        ih_ep;          /* Entry Point Address          */
        uint32_t        ih_dcrc;        /* Image Data CRC Checksum      */
        uint8_t         ih_os;          /* Operating System             */
        uint8_t         ih_arch;        /* CPU architecture             */
        uint8_t         ih_type;        /* Image Type                   */
        uint8_t         ih_comp;        /* Compression Type             */
        uint8_t         ih_name[IH_NMLEN];      /* Image Name           */
        dram_header_t   ih_dram;
} image_header_t;

このヘッダーは以下のようにして作られるようです。

./tools/mkimage -A mips -T standalone -C none \
        -a 0x80200000 -e 0x80200000 \
        -n "SPI Flash Image" \
        -r SDR -s 32 -t 32 -u 16 \
        -y 0xFF -z 0xFF -w 0xFF -d uboot.bin uboot.img
Image Name:   SPI Flash Image
Created:      Sun Jan  7 11:13:21 2024
Image Type:   MIPS Linux Standalone Program (uncompressed)
Data Size:    107172 Bytes = 104.66 kB = 0.10 MB
Load Address: 0x80200000
Entry Point:  0x80200000
DRAM Parameter: 16 (Parm0=0 Parm1=0)

ベクターが続き、このあたりからコードのように見えます。

00000410  16 00 00 10 00 00 00 00  14 00 00 10 00 00 00 00  |................|
00000420  12 00 00 10 00 00 00 00  10 00 00 10 00 00 00 00  |................|
00000430  0e 00 00 10 00 00 00 00  0c 00 00 10 00 00 00 00  |................|
00000440  40 00 04 3c 00 00 00 00  40 80 08 3c 00 00 1d 25  |@..<....@..<...%|
00000450  02 00 11 04 00 00 00 00  80 1b 10 80 00 00 fc 8f  |................|
00000460  44 00 99 8f 08 00 20 03  00 00 00 00 ff ff 00 10  |D..... .........|
00000470  ff ff 00 10 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0

その後、ここまで続きます。

00001bf0  6c 18 10 80 d8 15 10 80  f0 1a 10 80 48 19 10 80  |l...........H...|
00001c00  f4 1b 10 80 88 05 10 80  e0 1a 10 80 e0 17 10 80  |................|
00001c10  a0 19 10 80 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00001c20  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00002040  5d 00 00 80 00 ff ff ff  ff ff ff ff ff 00 7f 80  |]...............|
00002050  2c 20 00 ca f2 a5 f4 09  42 10 c8 20 03 c1 a0 14  |, ......B.. ....|
00002060  a4 c5 0d 45 90 65 d6 07  92 85 62 2b f6 64 f6 42  |...E.e....b+.d.B|
00002070  b7 aa 5b 4a af 3c f3 79  e9 d8 6d d2 27 82 66 35  |..[J.<.y..m.'.f5|

おそらく0x2040移行がu-boot本体で、文字列などが確認できないので圧縮されているものと思われます。

SOCのROMに焼かれたコードで00001c13までのコードをscrachpadのようなSOC内部のRAMに貼り付けて、実行を移し、その後SDRAMの初期化を行い、SPI Flashから0x2040の圧縮イメージを解凍してSDRAMに貼り付けていると想像されます。

圧縮されたubootはここまでです。

0000eda0  89 43 ea 48 cc 21 1c ac  3d 63 e0 de 63 ff a6 59  |.C.H.!..=c..c..Y|
0000edb0  8f 79 65 77 a6 53 48 b2  b6 48 95 ed c8 05 f9 47  |.yew.SH..H.....G|
0000edc0  bb 87 ff fe 57 9e 53 00  00 00 00 00 00 00 00 00  |....W.S.........|
0000edd0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00010000  50 30 00 01 00 18 84 42  75 d0 ff ff ff ff ff ff  |P0.....Bu.......|
00010010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

uboot本体が64Kで設定が64Kとコンパクトに収めていて、2M Flashに押し込めるため、けっこう複雑な事やってるみたいです。

RalinkのSDKにUbootのコードが含まれていますが、このバイナリの再構築は不可能と思われます。

FONのu-bootは自己解凍タイプになっていて、いったんメモリに貼り付けて実行が移り、その後メモリの後半部分を展開して、展開してほんちゃんのu-bootに実行を移しているようです。通常のu-bootは384K必要ですが、FONはこの仕組みで128Kですませているようです。2M Flashにすべて入れるための方法と思われます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?