成功解析额外的oem数据 运行正常
This commit is contained in:
		| @@ -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; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user