W80X打包用户数据跟固件到一起下载方法

发布于 2022-11-29 12:29:10

一. 程序中读取数据

---> sdk_folder/app/main.c dmeo程序

/***************************************************************************** 
* 
* File Name : main.c
* 
* Description: main 
* 
* Copyright (c) 2014 Winner Micro Electronic Design Co., Ltd. 
* All rights reserved. 
* 
* Author : dave
* 
* Date : 2014-6-14
*****************************************************************************/ 
#include "wm_include.h"
#include "wm_cpu.h"
#include "wm_internal_flash.h"
#include "wm_fwup.h"

void UserMain(void)
{
    extern void tls_sys_clk_set();
    extern u32 tls_mem_get_avail_heapsize(void);
    tls_sys_clk_set(CPU_CLK_80M);

    printf("\n             \\\\\\|///\n");
    printf("           \\\\  .-.-  //\n");
    printf(".           (  .@.@  )  \n");
    printf("+-------oOOo-----(_)-----oOOo---------+\n\n");
    printf(" ---> Compile "__DATE__", "__TIME__"\n");
    printf(" ---> %s.c\r\n",__func__);
    printf(" ---> GetHeap:%d\n",tls_mem_get_avail_heapsize());
    printf("\n+---------------------Oooo------------+\n");

    printf("\n user task\n");
    IMAGE_HEADER_PARAM_ST img;


    tls_fls_read(0x81E0000UL, &img, 64);
    printf("--->magic_no          %08X\n",img.upd_no);
    printf("--->img_addr          %08X\n",img.img_addr);
    printf("--->img_len           %08X\n",img.img_len);
    printf("--->img_header_addr   %08X\n",img.img_header_addr);
    printf("--->upgrade_img_addr  %08X\n",img.upgrade_img_addr);
    printf("--->org_checksum      %08X\n",img.org_checksum);
    printf("--->upd_no            %08X\n",img.upd_no);
    printf("--->_reserved0        %08X\n",img._reserved0);
    printf("--->_reserved1        %08X\n",img._reserved1);
    printf("--->next              %08X\n",img.next);
    printf("--->hd_checksum       %08X\n\n",img.hd_checksum);

    tls_fls_read(img.next, &img, 64);
    printf("--->magic_no          %08X\n",img.upd_no);
    printf("--->img_addr          %08X\n",img.img_addr);
    printf("--->img_len           %08X\n",img.img_len);
    printf("--->img_header_addr   %08X\n",img.img_header_addr);
    printf("--->upgrade_img_addr  %08X\n",img.upgrade_img_addr);
    printf("--->org_checksum      %08X\n",img.org_checksum);
    printf("--->upd_no            %08X\n",img.upd_no);
    printf("--->_reserved0        %08X\n",img._reserved0);
    printf("--->_reserved1        %08X\n",img._reserved1);
    printf("--->next              %08X\n",img.next);
    printf("--->hd_checksum       %08X\n\n",img.hd_checksum);
    
    tls_fls_read(img.next, &img, 64);
    printf("--->magic_no          %08X\n",img.upd_no);
    printf("--->img_addr          %08X\n",img.img_addr);
    printf("--->img_len           %08X\n",img.img_len);
    printf("--->img_header_addr   %08X\n",img.img_header_addr);
    printf("--->upgrade_img_addr  %08X\n",img.upgrade_img_addr);
    printf("--->org_checksum      %08X\n",img.org_checksum);
    printf("--->upd_no            %08X\n",img.upd_no);
    printf("--->_reserved0        %08X\n",img._reserved0);
    printf("--->_reserved1        %08X\n",img._reserved1);
    printf("--->next              %08X\n",img.next);
    printf("--->hd_checksum       %08X\n\n",img.hd_checksum);



    u8 data[1024]={0};
    tls_fls_read(img.img_addr, &data, 1024);
    for(int i = 0; i < 1024; i++)
    {
        printf("%02X ", data[i]);
    }
    printf("\n");


#if DEMO_CONSOLE
    CreateDemoTask();
#endif
//用户自己的task
}

二. 实现方法

---> sdk_folder/tools/w800/conf.mk 增加文件路径

SECBOOT_HEADER_POS=8002000
SECBOOT_ADDRESS_POS=8002400
SEC_BOOT_BIN := $(SDK_TOOLS)/w800_secboot.bin
SEC_BOOT_IMG := $(SDK_TOOLS)/w800_secboot
SEC_BOOT := $(SDK_TOOLS)/w800_secboot.img

FILE1_HEADER_POS=8020000
FILE1_ADDRESS_POS=8020400
FILE1_BIN := $(SDK_TOOLS)/file/file1.bin
FILE1_IMG := $(SDK_TOOLS)/file/file1
FILE1 := $(SDK_TOOLS)/file/file1.img

FILE2_HEADER_POS=8020800
FILE2_ADDRESS_POS=8020C00
FILE2_BIN := $(SDK_TOOLS)/file/file2.bin
FILE2_IMG := $(SDK_TOOLS)/file/file2
FILE2 := $(SDK_TOOLS)/file/file2.img

FILE3_HEADER_POS=8030000
FILE3_ADDRESS_POS=8030400
FILE3_BIN := $(SDK_TOOLS)/file/file3.bin
FILE3_IMG := $(SDK_TOOLS)/file/file3
FILE3 := $(SDK_TOOLS)/file/file3.img

---> sdk_folder/tools/w800/rules.mk 修改固件生成脚本

ifeq ($(CODE_ENCRYPT),1)
    @openssl enc -aes-128-ecb -in $(FIRMWAREDIR)/$(TARGET)/$(TARGET).bin -out $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_enc.bin -K 30313233343536373839616263646566 -iv 01010101010101010101010101010101
    @openssl rsautl -encrypt -in $(CA_PATH)/key.txt -inkey $(CA_PATH)/capub_$(PRIKEY_SEL).pem -pubin -out $(FIRMWAREDIR)/$(TARGET)/key_en.dat
    @cat $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_enc.bin $(FIRMWAREDIR)/$(TARGET)/key_en.dat > $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_enc_key.bin
    @cat $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_enc_key.bin $(CA_PATH)/capub_$(PRIKEY_SEL)_N.dat > $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_enc_key_N.bin
    @$(WM_TOOL) -b $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_enc_key_N.bin -it $(IMG_TYPE) -fc 0 -ra $(RUN_ADDRESS) -ih $(IMG_HEADER) -ua $(UPD_ADDRESS) -nh 0 -un 0 -vs $(shell $(VER_TOOL) $(TOP_DIR)/platform/sys/wm_main.c) -o $(FIRMWAREDIR)/$(TARGET)/$(TARGET)
else
    @$(WM_TOOL) -b $(FIRMWAREDIR)/$(TARGET)/$(TARGET).bin -fc 0 -it $(IMG_TYPE) -ih $(IMG_HEADER) -ra $(RUN_ADDRESS) -ua $(UPD_ADDRESS) -nh $(FILE1_HEADER_POS) -un 0 -vs $(shell $(VER_TOOL) $(TOP_DIR)/platform/sys/wm_main.c) -o $(FIRMWAREDIR)/$(TARGET)/$(TARGET)
endif
    @cp $(IMAGEODIR)/$(TARGET).map $(FIRMWAREDIR)/$(TARGET)/$(TARGET).map

    @$(WM_TOOL) -b  $(SEC_BOOT_BIN) -fc 0 -it 0 -ih $(SECBOOT_HEADER_POS) -ra $(SECBOOT_ADDRESS_POS) -ua $(UPD_ADDRESS) -nh $(IMG_HEADER) -un 0 -o $(SEC_BOOT_IMG)
    @$(WM_TOOL) -b  $(FILE1_BIN) -fc 0 -it $(IMG_TYPE) -ih $(FILE1_HEADER_POS) -ra $(FILE1_ADDRESS_POS) -ua $(UPD_ADDRESS) -nh $(FILE2_HEADER_POS) -un 0 -o $(FILE1_IMG)
    @$(WM_TOOL) -b  $(FILE2_BIN) -fc 0 -it $(IMG_TYPE) -ih $(FILE2_HEADER_POS) -ra $(FILE2_ADDRESS_POS) -ua $(UPD_ADDRESS) -nh $(FILE3_HEADER_POS) -un 0 -o $(FILE2_IMG)
    @$(WM_TOOL) -b  $(FILE3_BIN) -fc 0 -it $(IMG_TYPE) -ih $(FILE3_HEADER_POS) -ra $(FILE3_ADDRESS_POS) -ua $(UPD_ADDRESS) -nh 0 -un 0 -o $(FILE3_IMG)

ifeq ($(SIGNATURE),1)
    @openssl dgst -sign $(CA_PATH)/cakey.pem -sha1 -out $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_sign.dat $(FIRMWAREDIR)/$(TARGET)/$(TARGET).img
    @cat $(FIRMWAREDIR)/$(TARGET)/$(TARGET).img $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_sign.dat > $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_sign.img
    @cat $(SEC_BOOT) $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_sign.img > $(FIRMWAREDIR)/$(TARGET)/$(TARGET).fls
    @$(WM_TOOL) -b $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_sign.img -fc 1 -it $(IMG_TYPE) -ih $(IMG_HEADER) -ra $(RUN_ADDRESS) -ua $(UPD_ADDRESS) -nh 0 -un 0 -vs $(shell $(VER_TOOL) $(TOP_DIR)/platform/sys/wm_main.c) -o $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_sign
    @mv $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_sign_gz.img $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_sign_ota.img
else
    @cat $(SEC_BOOT) $(FIRMWAREDIR)/$(TARGET)/$(TARGET).img $(FILE1) $(FILE2) $(FILE3)> $(FIRMWAREDIR)/$(TARGET)/$(TARGET).fls
    @$(WM_TOOL) -b $(FIRMWAREDIR)/$(TARGET)/$(TARGET).img -fc 1 -it $(IMG_TYPE) -ih $(IMG_HEADER) -ra $(RUN_ADDRESS) -ua $(UPD_ADDRESS) -nh 0 -un 0 -vs $(shell $(VER_TOOL) $(TOP_DIR)/platform/sys/wm_main.c) -o $(FIRMWAREDIR)/$(TARGET)/$(TARGET)
    @mv $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_gz.img $(FIRMWAREDIR)/$(TARGET)/$(TARGET)_ota.img
endif

---> sdk_folder/tools/w800/file 增加file文件夹放置用户数据bin文件

image.png

---> 编译下载固件

image.png

6 条评论

发布
问题