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 条评论

发布
问题