URoad-Homeでいろいろいじっているときに必要になったのでここにメモしておきます。
ヘッダーの構成は
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 */
} image_header_t;
となっています。図にすると
多分こんな感じです。もしかしたら、イメージ名(カーネル名)の部分が違うかも知れませんが…
CRCの計算方法ですが、まず00 00 00 00で埋めます。その状態でCRCを計算します。その計算結果を00 00 00 00の部分に埋めます。