大破雑記帳

個人用メモな雑記ブログ いろんなことをざっくりと。

WRC-X1800GS factoryメモ

WRC-X1800GSにおいて、公式更新用FWおよびFlash内のファームウェア領域に投入されたファームウェアデータのヘッダ構造は以下の通り

       0x0             0x4             0x8             0xc                 
        +---------------------------------------------------------------+  
   0x00 |                      "ELECOM\0\0<MODEL>"                   -->|  
        +---------------------------------------------------------------+  
   0x10 |-->                  ("ELECOM\0\0<MODEL>")                  -->|  
        +-------------------------------+-------------------------------+  
   0x20 |-->  ("ELECOM\0\0<MODEL>")     |           Version1         -->|  
        +-------------------------------+---------------+---------------+  
   0x30 |-->       (Version1)           |'C' 'O' 'M' 'C'|  Data Length  |  
        +---------------+---------------+---------------+---------------+  
   0x40 |   Data CRC32  |       ?       |       ?       |   Version2 -->|  
        +---------------+---------------+---------------+---------------+  
   0x50 |-->                       (Version2)                        -->|  
        +-------------------------------+-------------------------------+  
   0x60 |-->       (Version2)           |                                  
        +-------------------------------+                                  
                                       ...                                 
        +---------------------------------------------------------------+  
0x40000 |D0  0D   FE  ED ... (Flattened Image Tree)                     |  
        +---------------------------------------------------------------+  

この中で Data Length0x40000 からファイル終端までのサイズを指定しなければならないようで、factoryイメージにおいてinitramfsからkernel + UBIの形式に転換し、kernelのみのサイズをセットした場合、成功のメッセージ無しで蹴られる

root@WRC-X1800GS:/tmp# ls -alh openwrt*.bin
-rw-r--r--    1 root     root        7.3M May 12 01:45 openwrt-ramips-mt7621-elecom_wrc-x1800gs-initramfs-factory.bin
-rw-r--r--    1 root     root       13.0M May 12 01:42 openwrt-ramips-mt7621-elecom_wrc-x1800gs-squashfs-factory.bin
root@WRC-X1800GS:/tmp# mstc_fwcheck openwrt-ramips-mt7621-elecom_wrc-x1800gs-squ
ashfs-factory.bin 
root@WRC-X1800GS:/tmp# echo $?
1

一方で、現在のinitramfsイメージベースのfactoryの場合、Data Length が末尾までである為問題無くチェックを通せる

root@WRC-X1800GS:/tmp# mstc_fwcheck openwrt-ramips-mt7621-elecom_wrc-x1800gs-ini
tramfs-factory.bin 
Data checksum correct.
root@WRC-X1800GS:/tmp# echo $?
0

なお、前者が蹴られる際、後者よりもずっと短い時間で終了する為、CRC32の算出が走らず、それ以前で蹴られていることが推測できる。

それと、前者の構成の場合、Data Length をUBIを含めて末尾までとし、CRC32もその範囲で算出したとしても、UBIの内容が状況により容易に変化し得る為、その後ブート時に行われるCRC32のチェックで蹴られる恐れがある。