成功解析额外的oem数据 运行正常

This commit is contained in:
2024-10-29 19:29:10 +08:00
parent 85dd5cfa6d
commit c913292f01
3 changed files with 49 additions and 18 deletions

View File

@@ -109,6 +109,17 @@ uint32_t iot_oem_read_mtd(uint8_t *buf, uint32_t size, uint32_t offset)
}
extern int32_t sbl_printf(const char *fmt, ...);
static void data_printf(const uint8_t *data,int len){
for (int i=0;i<len;i++){
sbl_printf("%02x ",data[i]);
}
sbl_printf("\n");
}
// 抓取额外的差分oem数据
uint32_t iot_oem_read_mtd_ext(uint8_t *buff,uint32_t buff_size)
@@ -120,45 +131,51 @@ uint32_t iot_oem_read_mtd_ext(uint8_t *buff,uint32_t buff_size)
uint8_t fw_prtition = PART_NUM_FW1;
char str_buff[10]={0};
imgHdr hdr={0};
const imgHdr *run_fw_hdr;
imgHdr run_fw_hdr;
const uint8_t *data;
const char *oem_ext_magic_str = IOT_OEM_EXT_MAGIC_STR;
int oem_ext_magic_str_len = strlen(oem_ext_magic_str);
iot_printf("%s:%d\n"__FILE__,__LINE__);
sbl_printf("%s:%d\n",__FILE__,__LINE__);
do {
status = dev_get_boot_fw_part_num(&fw_prtition);
if (status) {
break;
}
iot_printf("%s:%d\n"__FILE__,__LINE__);
sbl_printf("%s:%d\n",__FILE__,__LINE__);
mtd_get_hdr(fw_prtition,&hdr);
if(hdr.v1.hdrVer!=hdrVer_10){
break;
}
iot_printf("%s:%d\n"__FILE__,__LINE__);
run_fw_hdr=(const imgHdr *)(hdr.v1.runAddr-HEADER_TOLTAL_SIZE);
fw_size=run_fw_hdr->v1.imgSize;
sbl_printf("%s:%d\n",__FILE__,__LINE__);
img_header_construct(&run_fw_hdr,(char *)(hdr.v1.runAddr-HEADER_TOLTAL_SIZE));
data_printf((const uint8_t *)&run_fw_hdr,32);
fw_size=run_fw_hdr.v1.imgSize;
sbl_printf("fw_size:%ld\n",fw_size);
data=(const uint8_t *)(hdr.v1.runAddr+fw_size-oem_ext_magic_str_len);
iot_printf("%s:%d\n"__FILE__,__LINE__);
sbl_printf("oem_ext_magic_str_addr:%p\n",data);
sbl_printf("%s:%d\n",__FILE__,__LINE__);
os_mem_cpy(str_buff,data,oem_ext_magic_str_len);
iot_printf("%s:%d\n"__FILE__,__LINE__);
sbl_printf("str_buff:%s\n",str_buff);
sbl_printf("%s:%d\n",__FILE__,__LINE__);
if(iot_strcmp(str_buff,oem_ext_magic_str) != 0){
break;
}
iot_printf("%s:%d\n"__FILE__,__LINE__);
sbl_printf("%s:%d\n",__FILE__,__LINE__);
data-=4;
oem_size=((data[0]<<24)|(data[1]<<16)|(data[2]<<8)|data[3]);
sbl_printf("oem_size:%ld\n",oem_size);
data=data-oem_size;
iot_printf("%s:%d\n"__FILE__,__LINE__);
sbl_printf("%s:%d\n",__FILE__,__LINE__);
if(buff_size<oem_size){
break;
}
iot_printf("%s:%d\n"__FILE__,__LINE__);
sbl_printf("%s:%d\n",__FILE__,__LINE__);
os_mem_cpy(buff,data,oem_size);
iot_printf("%s:%d\n"__FILE__,__LINE__);
sbl_printf("%s:%d\n",__FILE__,__LINE__);
ret = ERR_OK;
} while(0);
sbl_printf("%s:%d\n",__FILE__,__LINE__);
return ret;
}