hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/*************************************************************************
    > File Name: rkimage.h
    > Author: jkand.huang
    > Mail: jkand.huang@rock-chips.com
    > Created Time: Fri 17 May 2019 02:32:13 PM CST
 ************************************************************************/
 
#ifndef _RKIMAGE_H
#define _RKIMAGE_H
#include "defineHeader.h"
#pragma pack(1)
typedef struct
{
    USHORT  usYear;
    BYTE    ucMonth;
    BYTE    ucDay;
    BYTE    ucHour;
    BYTE    ucMinute;
    BYTE    ucSecond;
}STRUCT_RKTIME, *PSTRUCT_RKTIME;
 
typedef struct
{
    UINT uiTag;     //标志,固定为0x57 0x46 0x4B 0x52
    USHORT usSize;  //结构体大小
    DWORD  dwVersion;   //Image 文件版本
    DWORD  dwMergeVersion;  //打包工具版本
    STRUCT_RKTIME stReleaseTime;    //生成时间
    ENUM_RKDEVICE_TYPE emSupportChip;   //使用芯片
    DWORD  dwBootOffset;    //Boot偏移
    DWORD  dwBootSize;  //Boot大小
    DWORD  dwFWOffset;  //固件偏移
    DWORD  dwFWSize;    //固件大小
    BYTE   reserved[61];    //预留空间,用于存放不同固件特征
}STRUCT_RKIMAGE_HEAD,*PSTRUCT_RKIMAGE_HEAD;
 
typedef struct tagRKIMAGE_ITEM
{
    char name[PART_NAME];
    char file[RELATIVE_PATH];
    unsigned int offset;
    unsigned int flash_offset;
    unsigned int usespace;
    unsigned int size;
}RKIMAGE_ITEM, *PRKIMAGE_ITEM;
 
typedef struct tagRKIMAGE_HDR
{
    unsigned int tag;
    unsigned int size;
    char machine_model[MAX_MACHINE_MODEL];
    char manufacturer[MAX_MANUFACTURER];
    unsigned int version;
    int item_count;
    RKIMAGE_ITEM item[MAX_PACKAGE_FILES];
}RKIMAGE_HDR, *PRKIMAGE_HDR;
 
typedef struct
{
    UINT uiTag;
    USHORT usSize;
    DWORD  dwVersion;
    DWORD  dwMergeVersion;
    STRUCT_RKTIME stReleaseTime;
    ENUM_RKDEVICE_TYPE emSupportChip;
    UCHAR uc471EntryCount;
    DWORD dw471EntryOffset;
    UCHAR uc471EntrySize;
    UCHAR uc472EntryCount;
    DWORD dw472EntryOffset;
    UCHAR uc472EntrySize;
    UCHAR ucLoaderEntryCount;
    DWORD dwLoaderEntryOffset;
    UCHAR ucLoaderEntrySize;
    UCHAR ucSignFlag;
    UCHAR ucRc4Flag;
    UCHAR reserved[BOOT_RESERVED_SIZE];
}STRUCT_RKBOOT_HEAD,*PSTRUCT_RKBOOT_HEAD;
 
typedef struct
{
    UCHAR ucSize;
    ENUM_RKBOOTENTRY emType;
    WCHAR szName[20];
    DWORD dwDataOffset;
    DWORD dwDataSize;
    DWORD dwDataDelay;//以秒为单位
}STRUCT_RKBOOT_ENTRY,*PSTRUCT_RKBOOT_ENTRY;
typedef    struct
{
    DWORD    dwTag;
    BYTE    reserved[4];
    UINT    uiRc4Flag;
    USHORT    usBootCode1Offset;
    USHORT    usBootCode2Offset;
    BYTE    reserved1[490];
    USHORT  usBootDataSize;
    USHORT    usBootCodeSize;
    USHORT    usCrc;
}RKANDROID_IDB_SEC0,*PRKANDROID_IDB_SEC0;
 
typedef struct
{
    USHORT  usSysReservedBlock;
    USHORT  usDisk0Size;
    USHORT  usDisk1Size;
    USHORT  usDisk2Size;
    USHORT  usDisk3Size;
    UINT    uiChipTag;
    UINT    uiMachineId;
    USHORT    usLoaderYear;
    USHORT    usLoaderDate;
    USHORT    usLoaderVer;
    USHORT  usLastLoaderVer;
    USHORT  usReadWriteTimes;
    DWORD    dwFwVer;
    USHORT  usMachineInfoLen;
    UCHAR    ucMachineInfo[30];
    USHORT    usManufactoryInfoLen;
    UCHAR    ucManufactoryInfo[30];
    USHORT    usFlashInfoOffset;
    USHORT    usFlashInfoLen;
    UCHAR    reserved[384];
    UINT    uiFlashSize;
    BYTE    reserved1;
    BYTE    bAccessTime;
    USHORT  usBlockSize;
    BYTE    bPageSize;
    BYTE    bECCBits;
    BYTE    reserved2[8];
    USHORT  usIdBlock0;
    USHORT  usIdBlock1;
    USHORT  usIdBlock2;
    USHORT  usIdBlock3;
    USHORT  usIdBlock4;
}RKANDROID_IDB_SEC1,*PRKANDROID_IDB_SEC1;
 
typedef struct
{
    USHORT  usInfoSize;
    BYTE    bChipInfo[CHIPINFO_LEN];
    BYTE    reserved[RKANDROID_SEC2_RESERVED_LEN];
    char    szVcTag[3];
    USHORT  usSec0Crc;
    USHORT  usSec1Crc;
    UINT    uiBootCodeCrc;
    USHORT  usSec3CustomDataOffset;
    USHORT  usSec3CustomDataSize;
    char    szCrcTag[4];
    USHORT  usSec3Crc;
}RKANDROID_IDB_SEC2,*PRKANDROID_IDB_SEC2;
 
typedef struct
{
    USHORT  usSNSize;
    BYTE    sn[RKDEVICE_SN_LEN];
    BYTE    reserved[RKANDROID_SEC3_RESERVED_LEN];
    BYTE    imeiSize;
    BYTE    imei[RKDEVICE_IMEI_LEN];
    BYTE    uidSize;
    BYTE    uid[RKDEVICE_UID_LEN];
    BYTE    blueToothSize;
    BYTE    blueToothAddr[RKDEVICE_BT_LEN];
    BYTE    macSize;
    BYTE    macAddr[RKDEVICE_MAC_LEN];
}RKANDROID_IDB_SEC3,*PRKANDROID_IDB_SEC3;
 
#pragma pack()
 
bool getImageVersion(const char *filepath, char *version, int maxLength) ;
int analyticImage(const char *filepath, PRKIMAGE_HDR phdr);
#endif