huangcm
2025-09-01 53d8e046ac1bf2ebe94f671983e3d3be059df91a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
 *  * Copyright 2000-2009
 *   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 *    *
 *     * SPDX-License-Identifier:    GPL-2.0+
 *     */
#ifndef __IMAGE_FORMAT__H__
#define __IMAGE_FORMAT__H__ 1
 
#include <config.h>
#include <common.h>
//#define IMAGE_VER    100
//------------------------------------------------------------------------------------------------------------
#define IMAGE_MAGIC "IMAGEWTY"
#define IMAGE_HEAD_VERSION 0x00000300
 
#define IMAGE_HEAD_SIZE 1024
#define IMAGE_ITEM_TABLE_SIZE 1024
//------------------------------------------------------------------------------------------------------------
///Image文件头数据结构
//------------------------------------------------------------------------------------------------------------
#pragma pack(push, 1)
typedef struct tag_ImageHead {
   u8 magic[8]; //IMAGE_MAGIC
   u32 version; //本结构的版本号,IMAGE_HEAD_VERSION
   u32 size; //本结构的长度
   u32 attr; //本结构的属性,格式按照version来确定,加密,压缩等
   u32 imagever; //image的版本,由脚本指定
   u32 lenLo; //image文件的总长度 低位
   u32 lenHi; //image文件的总长度 高位
   u32 align; //数据的对齐边界,缺省1024
   u32 pid; //PID信息
   u32 vid; //VID信息
   u32 hardwareid; //硬件平台ID
   u32 firmwareid; //软件平台ID
   u32 itemattr; //item表的属性,"加密"
   u32 itemsize; //item数据项的大小
   u32 itemcount; //item数据项的个数
   u32 itemoffset; //item表偏移量
   u32 imageattr; //image文件属性
   u32 appendsize; //附加数据的长度
   u32 appendoffsetLo; //附加数据的偏移量
   u32 appendoffsetHi; //附加数据的偏移量
   u8 reserve[980]; //预留
} ImageHead_t;
#pragma pack(pop)
 
//------------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------------
#define IMAGE_ALIGN_SIZE 0x400
#define HEAD_ATTR_NO_COMPRESS 0x4d //1001101
 
//------------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------------
#pragma pack(push, 1)
typedef struct tagImageHeadAttr {
   u32 res : 12;
   u32 len : 8;
   u32 encode : 7; ///HEAD_ATTR_NO_COMPRESS
   u32 compress : 5;
} ImageHeadAttr_t;
#pragma pack(pop)
 
//------------------------------------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------------------------------------
#define IMAGE_ITEM_VERSION 0x00000100
#define MAINTYPE_LEN 8
#define SUBTYPE_LEN 16
#define FILE_PATH 256
#define IMAGE_ITEM_RCSIZE 640 // 数据项预留大小
 
//------------------------------------------------------------------------------------------------------------
///数据项数据结构
//------------------------------------------------------------------------------------------------------------
#pragma pack(push, 1)
typedef struct tag_ImageItem {
   u32 version; //本结构的版本号IMAGE_ITEM_VERSION
   u32 size; //本结构的长度
   u8 mainType[MAINTYPE_LEN]; //描述的文件的类型
   u8 subType[SUBTYPE_LEN]; //描述子类型,默认由image配置脚本指定
   u32 attr; //描述的文件的属性,格式按照version来确定,加密,压缩等
   u8 name[FILE_PATH]; //文件名称 260
   u32 datalenLo; //文件数据在image文件中的长度
   u32 datalenHi; //高位 文件数据在image文件中的长度
   u32 filelenLo; //文件的实际长度
   u32 filelenHi; //高位 文件的实际长度
   u32 offsetLo; //文件起始位置偏移量
   u32 offsetHi; //高位 文件起始位置偏移量
   u8 encryptID[64]; //加密插件ID,如果该文件不加密,该字段"\0"表示不加密
   u32 checksum; //描述的文件的校验和
   u8 res[IMAGE_ITEM_RCSIZE]; //保留
} ImageItem_t;
 
#pragma pack(pop)
 
//------------------------------------------------------------------------------------------------------------
// THE END !
//------------------------------------------------------------------------------------------------------------
 
//------------------------------------------------------------------------------------------------------------
// THE END !
//------------------------------------------------------------------------------------------------------------
 
#endif //__IMAGE_FORMAT__H__