xref: /OK3568_Linux_fs/external/recovery/update_engine/rkimage.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (C) 2023 Rockchip Electronics Co., Ltd.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Licensed under the Apache License, Version 2.0 (the "License");
5*4882a593Smuzhiyun  * you may not use this file except in compliance with the License.
6*4882a593Smuzhiyun  * You may obtain a copy of the License at
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *       http://www.apache.org/licenses/LICENSE-2.0
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * Unless required by applicable law or agreed to in writing, software
11*4882a593Smuzhiyun  * distributed under the License is distributed on an "AS IS" BASIS,
12*4882a593Smuzhiyun  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4882a593Smuzhiyun  * See the License for the specific language governing permissions and
14*4882a593Smuzhiyun  * limitations under the License.
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #ifndef _RKIMAGE_H
18*4882a593Smuzhiyun #define _RKIMAGE_H
19*4882a593Smuzhiyun #include <stdbool.h>
20*4882a593Smuzhiyun #include "defineHeader.h"
21*4882a593Smuzhiyun #pragma pack(1)
22*4882a593Smuzhiyun typedef struct {
23*4882a593Smuzhiyun     USHORT  usYear;
24*4882a593Smuzhiyun     BYTE    ucMonth;
25*4882a593Smuzhiyun     BYTE    ucDay;
26*4882a593Smuzhiyun     BYTE    ucHour;
27*4882a593Smuzhiyun     BYTE    ucMinute;
28*4882a593Smuzhiyun     BYTE    ucSecond;
29*4882a593Smuzhiyun } STRUCT_RKTIME, *PSTRUCT_RKTIME;
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun typedef struct {
32*4882a593Smuzhiyun     UINT uiTag;     //标志,固定为0x57 0x46 0x4B 0x52
33*4882a593Smuzhiyun     USHORT usSize;  //结构体大小
34*4882a593Smuzhiyun     DWORD  dwVersion;   //Image 文件版本
35*4882a593Smuzhiyun     DWORD  dwMergeVersion;  //打包工具版本
36*4882a593Smuzhiyun     STRUCT_RKTIME stReleaseTime;    //生成时间
37*4882a593Smuzhiyun     ENUM_RKDEVICE_TYPE emSupportChip;   //使用芯片
38*4882a593Smuzhiyun     DWORD  dwBootOffset;    //Boot偏移
39*4882a593Smuzhiyun     DWORD  dwBootSize;  //Boot大小
40*4882a593Smuzhiyun     DWORD  dwFWOffset;  //固件偏移
41*4882a593Smuzhiyun     DWORD  dwFWSize;    //固件大小
42*4882a593Smuzhiyun     BYTE   reserved[61];    //预留空间,用于存放不同固件特征
43*4882a593Smuzhiyun } STRUCT_RKIMAGE_HEAD, *PSTRUCT_RKIMAGE_HEAD;
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun typedef struct tagRKIMAGE_ITEM {
46*4882a593Smuzhiyun     char name[PART_NAME];
47*4882a593Smuzhiyun     char file[RELATIVE_PATH];
48*4882a593Smuzhiyun     unsigned int offset;
49*4882a593Smuzhiyun     unsigned int flash_offset;
50*4882a593Smuzhiyun     unsigned int usespace;
51*4882a593Smuzhiyun     unsigned int size;
52*4882a593Smuzhiyun } RKIMAGE_ITEM, *PRKIMAGE_ITEM;
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun typedef struct tagRKIMAGE_HDR {
55*4882a593Smuzhiyun     unsigned int tag;
56*4882a593Smuzhiyun     unsigned int size;
57*4882a593Smuzhiyun     char machine_model[MAX_MACHINE_MODEL];
58*4882a593Smuzhiyun     char manufacturer[MAX_MANUFACTURER];
59*4882a593Smuzhiyun     unsigned int version;
60*4882a593Smuzhiyun     int item_count;
61*4882a593Smuzhiyun     RKIMAGE_ITEM item[MAX_PACKAGE_FILES];
62*4882a593Smuzhiyun } RKIMAGE_HDR, *PRKIMAGE_HDR;
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun typedef struct {
65*4882a593Smuzhiyun     UINT uiTag;
66*4882a593Smuzhiyun     USHORT usSize;
67*4882a593Smuzhiyun     DWORD  dwVersion;
68*4882a593Smuzhiyun     DWORD  dwMergeVersion;
69*4882a593Smuzhiyun     STRUCT_RKTIME stReleaseTime;
70*4882a593Smuzhiyun     ENUM_RKDEVICE_TYPE emSupportChip;
71*4882a593Smuzhiyun     UCHAR uc471EntryCount;
72*4882a593Smuzhiyun     DWORD dw471EntryOffset;
73*4882a593Smuzhiyun     UCHAR uc471EntrySize;
74*4882a593Smuzhiyun     UCHAR uc472EntryCount;
75*4882a593Smuzhiyun     DWORD dw472EntryOffset;
76*4882a593Smuzhiyun     UCHAR uc472EntrySize;
77*4882a593Smuzhiyun     UCHAR ucLoaderEntryCount;
78*4882a593Smuzhiyun     DWORD dwLoaderEntryOffset;
79*4882a593Smuzhiyun     UCHAR ucLoaderEntrySize;
80*4882a593Smuzhiyun     UCHAR ucSignFlag;
81*4882a593Smuzhiyun     UCHAR ucRc4Flag;
82*4882a593Smuzhiyun     UCHAR reserved[BOOT_RESERVED_SIZE];
83*4882a593Smuzhiyun } STRUCT_RKBOOT_HEAD, *PSTRUCT_RKBOOT_HEAD;
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun typedef struct {
86*4882a593Smuzhiyun     UCHAR ucSize;
87*4882a593Smuzhiyun     ENUM_RKBOOTENTRY emType;
88*4882a593Smuzhiyun     WCHAR szName[20];
89*4882a593Smuzhiyun     DWORD dwDataOffset;
90*4882a593Smuzhiyun     DWORD dwDataSize;
91*4882a593Smuzhiyun     DWORD dwDataDelay;//以秒为单位
92*4882a593Smuzhiyun } STRUCT_RKBOOT_ENTRY, *PSTRUCT_RKBOOT_ENTRY;
93*4882a593Smuzhiyun typedef    struct {
94*4882a593Smuzhiyun     DWORD    dwTag;
95*4882a593Smuzhiyun     BYTE    reserved[4];
96*4882a593Smuzhiyun     UINT    uiRc4Flag;
97*4882a593Smuzhiyun     USHORT    usBootCode1Offset;
98*4882a593Smuzhiyun     USHORT    usBootCode2Offset;
99*4882a593Smuzhiyun     BYTE    reserved1[490];
100*4882a593Smuzhiyun     USHORT  usBootDataSize;
101*4882a593Smuzhiyun     USHORT    usBootCodeSize;
102*4882a593Smuzhiyun     USHORT    usCrc;
103*4882a593Smuzhiyun } RKANDROID_IDB_SEC0, *PRKANDROID_IDB_SEC0;
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun typedef struct {
106*4882a593Smuzhiyun     USHORT  usSysReservedBlock;
107*4882a593Smuzhiyun     USHORT  usDisk0Size;
108*4882a593Smuzhiyun     USHORT  usDisk1Size;
109*4882a593Smuzhiyun     USHORT  usDisk2Size;
110*4882a593Smuzhiyun     USHORT  usDisk3Size;
111*4882a593Smuzhiyun     UINT    uiChipTag;
112*4882a593Smuzhiyun     UINT    uiMachineId;
113*4882a593Smuzhiyun     USHORT    usLoaderYear;
114*4882a593Smuzhiyun     USHORT    usLoaderDate;
115*4882a593Smuzhiyun     USHORT    usLoaderVer;
116*4882a593Smuzhiyun     USHORT  usLastLoaderVer;
117*4882a593Smuzhiyun     USHORT  usReadWriteTimes;
118*4882a593Smuzhiyun     DWORD    dwFwVer;
119*4882a593Smuzhiyun     USHORT  usMachineInfoLen;
120*4882a593Smuzhiyun     UCHAR    ucMachineInfo[30];
121*4882a593Smuzhiyun     USHORT    usManufactoryInfoLen;
122*4882a593Smuzhiyun     UCHAR    ucManufactoryInfo[30];
123*4882a593Smuzhiyun     USHORT    usFlashInfoOffset;
124*4882a593Smuzhiyun     USHORT    usFlashInfoLen;
125*4882a593Smuzhiyun     UCHAR    reserved[384];
126*4882a593Smuzhiyun     UINT    uiFlashSize;
127*4882a593Smuzhiyun     BYTE    reserved1;
128*4882a593Smuzhiyun     BYTE    bAccessTime;
129*4882a593Smuzhiyun     USHORT  usBlockSize;
130*4882a593Smuzhiyun     BYTE    bPageSize;
131*4882a593Smuzhiyun     BYTE    bECCBits;
132*4882a593Smuzhiyun     BYTE    reserved2[8];
133*4882a593Smuzhiyun     USHORT  usIdBlock0;
134*4882a593Smuzhiyun     USHORT  usIdBlock1;
135*4882a593Smuzhiyun     USHORT  usIdBlock2;
136*4882a593Smuzhiyun     USHORT  usIdBlock3;
137*4882a593Smuzhiyun     USHORT  usIdBlock4;
138*4882a593Smuzhiyun } RKANDROID_IDB_SEC1, *PRKANDROID_IDB_SEC1;
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun typedef struct {
141*4882a593Smuzhiyun     USHORT  usInfoSize;
142*4882a593Smuzhiyun     BYTE    bChipInfo[CHIPINFO_LEN];
143*4882a593Smuzhiyun     BYTE    reserved[RKANDROID_SEC2_RESERVED_LEN];
144*4882a593Smuzhiyun     char    szVcTag[3];
145*4882a593Smuzhiyun     USHORT  usSec0Crc;
146*4882a593Smuzhiyun     USHORT  usSec1Crc;
147*4882a593Smuzhiyun     UINT    uiBootCodeCrc;
148*4882a593Smuzhiyun     USHORT  usSec3CustomDataOffset;
149*4882a593Smuzhiyun     USHORT  usSec3CustomDataSize;
150*4882a593Smuzhiyun     char    szCrcTag[4];
151*4882a593Smuzhiyun     USHORT  usSec3Crc;
152*4882a593Smuzhiyun } RKANDROID_IDB_SEC2, *PRKANDROID_IDB_SEC2;
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun typedef struct {
155*4882a593Smuzhiyun     USHORT  usSNSize;
156*4882a593Smuzhiyun     BYTE    sn[RKDEVICE_SN_LEN];
157*4882a593Smuzhiyun     BYTE    reserved[RKANDROID_SEC3_RESERVED_LEN];
158*4882a593Smuzhiyun     BYTE    imeiSize;
159*4882a593Smuzhiyun     BYTE    imei[RKDEVICE_IMEI_LEN];
160*4882a593Smuzhiyun     BYTE    uidSize;
161*4882a593Smuzhiyun     BYTE    uid[RKDEVICE_UID_LEN];
162*4882a593Smuzhiyun     BYTE    blueToothSize;
163*4882a593Smuzhiyun     BYTE    blueToothAddr[RKDEVICE_BT_LEN];
164*4882a593Smuzhiyun     BYTE    macSize;
165*4882a593Smuzhiyun     BYTE    macAddr[RKDEVICE_MAC_LEN];
166*4882a593Smuzhiyun } RKANDROID_IDB_SEC3, *PRKANDROID_IDB_SEC3;
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun #pragma pack()
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun bool getImageVersion(const char *filepath, char *version, int maxLength) ;
171*4882a593Smuzhiyun int analyticImage(const char *filepath, PRKIMAGE_HDR phdr);
172*4882a593Smuzhiyun #endif
173