提交 7db820fb 编写于 作者: W Wenlong.Fan

删除打包工具

上级 7b7ca405
......@@ -5,6 +5,7 @@
*.bin
*.hex
*.axf
*.exe
*.pdb
*.idb
*.ilk
......
......@@ -12,30 +12,39 @@
@rem if debug_info=1, Debugging Print Information will be turned on
set debug_info=0
@rem if make_fal=1, Partition tables are put into firmware
set make_fal=0
@rem Setting firmware output directory
set out_path=.\Bin
@rem Setting the bin file path
set bin_file=.\rtthread.bin
@rem Setting winnermicro libraries path
set wmlib_path=.\packages\wm_libraries-
@rem Setting the 1M flash layout file
set layout_1M_file=.
@rem Setting the 2M flash layout file
set layout_2M_file=.
@rem Setting the makeimg by adding rtt flash original fls
set makeimg_new_fls=.
@rem find winnermicro libraries full path
for /f "delims=" %%i in ('dir /ad /b /s %wmlib_path%*') do (set wmlib_path_full=%%i)
@rem Setting the version.txt file path
set version_file=.\tools\version.txt
set version_file=%wmlib_path_full%\Tools\version.txt
@rem Setting the secboot.img file path
set secboot_file=.\tools\secboot.img
set secboot_file=%wmlib_path_full%\Tools\secboot.img
@rem Setting the wm_gzip.exe file path
set wm_gzip_file=.\tools\wm_gzip.exe
set wm_gzip_file=%wmlib_path_full%\Tools\wm_gzip.exe
@rem Setting the makeimg.exe file path
set makeimg_file=.\tools\makeimg.exe
set makeimg_file=%wmlib_path_full%\Tools\makeimg.exe
@rem Setting the makeimg_all.exe file path
set makeimg_all_file=.\tools\makeimg_all.exe
set makeimg_all_file=%wmlib_path_full%\Tools\makeimg_all.exe
@rem Prepare to generate firmware
@rem Get the full path
if "%out_path:~0,1%" == "." (set out_path=%~dp0%out_path%)
if "%bin_file:~0,1%" == "." (set bin_file=%~dp0%bin_file%)
if "%version_file:~0,1%" == "." (set version_file=%~dp0%version_file%)
if "%secboot_file:~0,1%" == "." (set secboot_file=%~dp0%secboot_file%)
if "%wm_gzip_file:~0,1%" == "." (set wm_gzip_file=%~dp0%wm_gzip_file%)
if "%makeimg_file:~0,1%" == "." (set makeimg_file=%~dp0%makeimg_file%)
if "%makeimg_all_file:~0,1%" == "." (set makeimg_all_file=%~dp0%makeimg_all_file%)
@rem Create output folder
if not exist "%out_path%" (md "%out_path%")
......@@ -63,14 +72,14 @@ if not "%debug_info%"=="0" (echo bin_file_name:%bin_file_name% & echo bin_name:%
echo makeimg 1M Flash...
@rem Start making 1M flash firmware
set file_pos=_1M
set file_pos_1M=_1M
@rem Create command parameters
set wm_gzip_cmd="%out_path%\%bin_file_name%"
set makeimg_img_cmd="%out_path%\%bin_file_name%" "%out_path%\%bin_name%%file_pos%.img" 0 0 "%out_path%\%version_file_name%" 90000 10100
set makeimg_gz_img_cmd="%out_path%\%bin_file_name%.gz" "%out_path%\%bin_name%_GZ%file_pos%.img" 0 1 "%out_path%\%version_file_name%" 90000 10100 "%out_path%\%bin_file_name%"
set makeimg_sec_img_cmd="%out_path%\%bin_file_name%" "%out_path%\%bin_name%_SEC%file_pos%.img" 0 0 "%out_path%\%version_file_name%" 90000 10100
set makeimg_all_cmd="%out_path%\%secboot_file_name%" "%out_path%\%bin_name%%file_pos%.img" "%out_path%\%bin_name%%file_pos%.FLS"
set makeimg_img_cmd="%out_path%\%bin_file_name%" "%out_path%\%bin_name%%file_pos_1M%.img" 0 0 "%out_path%\%version_file_name%" 90000 10100
set makeimg_gz_img_cmd="%out_path%\%bin_file_name%.gz" "%out_path%\%bin_name%_GZ%file_pos_1M%.img" 0 1 "%out_path%\%version_file_name%" 90000 10100 "%out_path%\%bin_file_name%"
set makeimg_sec_img_cmd="%out_path%\%bin_file_name%" "%out_path%\%bin_name%_SEC%file_pos_1M%.img" 0 0 "%out_path%\%version_file_name%" 90000 10100
set makeimg_all_cmd="%out_path%\%secboot_file_name%" "%out_path%\%bin_name%%file_pos_1M%.img" "%out_path%\%bin_name%%file_pos_1M%.FLS"
@rem Print command Information
if not "%debug_info%"=="0" (echo wm_gzip %wm_gzip_cmd%)
......@@ -87,20 +96,20 @@ if not "%debug_info%"=="0" (echo makeimg_all %makeimg_all_cmd%)
"%makeimg_all_file%" %makeimg_all_cmd%
@rem Delete temporary files
if exist "%out_path%\%bin_name%%file_pos%.img" (del "%out_path%\%bin_name%%file_pos%.img")
if exist "%out_path%\%bin_name%%file_pos_1M%.img" (del "%out_path%\%bin_name%%file_pos_1M%.img")
if exist "%out_path%\%bin_file_name%.gz" (del "%out_path%\%bin_file_name%.gz")
@rem Start making 2M flash firmware
echo makeimg 2M Flash...
set file_pos=_2M
set file_pos_2M=_2M
@rem Create command parameters
set wm_gzip_cmd="%out_path%\%bin_file_name%"
set makeimg_img_cmd="%out_path%\%bin_file_name%" "%out_path%\%bin_name%%file_pos%.img" 3 0 "%out_path%\%version_file_name%" 90000 10100
set makeimg_gz_img_cmd="%out_path%\%bin_file_name%.gz" "%out_path%\%bin_name%_GZ%file_pos%.img" 3 1 "%out_path%\%version_file_name%" 90000 10100 "%out_path%\%bin_file_name%"
set makeimg_sec_img_cmd="%out_path%\%bin_file_name%" "%out_path%\%bin_name%_SEC%file_pos%.img" 3 0 "%out_path%\%version_file_name%" 90000 10100
set makeimg_all_cmd="%out_path%\%secboot_file_name%" "%out_path%\%bin_name%%file_pos%.img" "%out_path%\%bin_name%%file_pos%.FLS"
set makeimg_img_cmd="%out_path%\%bin_file_name%" "%out_path%\%bin_name%%file_pos_2M%.img" 3 0 "%out_path%\%version_file_name%" 100000 10100
set makeimg_gz_img_cmd="%out_path%\%bin_file_name%.gz" "%out_path%\%bin_name%_GZ%file_pos_2M%.img" 3 1 "%out_path%\%version_file_name%" 100000 10100 "%out_path%\%bin_file_name%"
set makeimg_sec_img_cmd="%out_path%\%bin_file_name%" "%out_path%\%bin_name%_SEC%file_pos_2M%.img" 3 0 "%out_path%\%version_file_name%" 100000 10100
set makeimg_all_cmd="%out_path%\%secboot_file_name%" "%out_path%\%bin_name%%file_pos_2M%.img" "%out_path%\%bin_name%%file_pos_2M%.FLS"
@rem Print command Information
if not "%debug_info%"=="0" (echo wm_gzip %wm_gzip_cmd%)
......@@ -117,8 +126,35 @@ if not "%debug_info%"=="0" (echo makeimg_all %makeimg_all_cmd%)
"%makeimg_all_file%" %makeimg_all_cmd%
@rem Delete temporary files
if exist "%out_path%\%bin_name%%file_pos%.img" (del "%out_path%\%bin_name%%file_pos%.img")
if exist "%out_path%\%bin_name%%file_pos_2M%.img" (del "%out_path%\%bin_name%%file_pos_2M%.img")
if exist "%out_path%\%bin_file_name%.gz" (del "%out_path%\%bin_file_name%.gz")
@rem Partition tables are put into firmware
if not "%make_fal%"=="1" ( goto end)
@rem Get the full path
if "%layout_1M_file:~0,1%" == "." (set layout_1M_file=%~dp0%layout_1M_file%)
if "%layout_2M_file:~0,1%" == "." (set layout_2M_file=%~dp0%layout_2M_file%)
if "%makeimg_new_fls:~0,1%" == "." (set makeimg_new_fls=%~dp0%makeimg_new_fls%)
@rem Check whether the file exists
if not exist "%layout_1M_file%" (echo makeimg err! No makeimg file found: "%layout_1M_file%" & goto end)
if not exist "%layout_2M_file%" (echo makeimg err! No makeimg file found: "%layout_2M_file%" & goto end)
if not exist "%makeimg_new_fls%" (echo makeimg err! No makeimg file found: "%makeimg_new_fls%" & goto end)
@rem Create command parameters to new fls
set makeimg_new_cmd_1M="%out_path%\%bin_name%%file_pos_1M%.FLS" "%layout_1M_file%" "%out_path%\%bin_name%_layout%file_pos_1M%.FLS"
@rem Execute generation fls cmd
"%makeimg_new_fls%" %makeimg_new_cmd_1M%
@rem Create command parameters to new fls
set makeimg_new_cmd_2M="%out_path%\%bin_name%%file_pos_2M%.FLS" "%layout_2M_file%" "%out_path%\%bin_name%_layout%file_pos_2M%.FLS"
@rem Execute generation fls cmd
"%makeimg_new_fls%" %makeimg_new_cmd_2M%
@rem Delete temporary files
if exist "%out_path%\%bin_name%_1M.FLS" (del "%out_path%\%bin_name%%file_pos_1M%.FLS")
if exist "%out_path%\%bin_name%_2M.FLS" (del "%out_path%\%bin_name%%file_pos_2M%.FLS")
:end
echo end
......@@ -9,21 +9,20 @@ import platform
# if debug_info=True, Debugging Print Information will be turned on
debug_info=False
# if make_fal=True, Partition tables are put into firmware
make_fal=False
# Setting firmware output directory
out_path='./Bin'
# Setting the bin file path
bin_file='./rtthread.bin'
# Setting the version.txt file path
version_file='./tools' + '/version.txt'
# Setting the secboot.img file path
secboot_file='./tools' + '/secboot.img'
# Setting the wm_gzip.exe file path
wm_gzip_file='./tools' + '/wm_gzip.exe'
# Setting the makeimg.exe file path
makeimg_file='./tools' + '/makeimg.exe'
# Setting the makeimg_all.exe file path
makeimg_all_file='./tools' + '/makeimg_all.exe'
# Setting winnermicro libraries path
wmlib_path='./packages/wm_libraries-'
# Setting the 1M flash layout file
layout_1M_file='.'
# Setting the 2M flash layout file
layout_2M_file='.'
# Setting the makeimg by adding rtt flash original fls
makeimg_new_fls='.'
def execute_command(cmdstring, cwd=None, shell=True):
"""Execute the system command at the specified address."""
......@@ -82,11 +81,27 @@ def do_makeimg(tool_path, param):
execute_command(str)
def get_wmlib_path_full(path):
(_wmlib_path,_wmlib_name) = os.path.split(path)
files = os.listdir(_wmlib_path)
for f in files:
if _wmlib_name in f:
return _wmlib_path + '/' + f
return path
if __name__=='__main__':
# Get the execution file name
wm_gzip_file = get_exec_path(wm_gzip_file)
makeimg_file = get_exec_path(makeimg_file)
makeimg_all_file = get_exec_path(makeimg_all_file)
# find winnermicro libraries full path
wmlib_path_full = get_wmlib_path_full(wmlib_path)
# Setting the version.txt file path
version_file=wmlib_path_full + '/Tools/version.txt'
# Setting the secboot.img file path
secboot_file=wmlib_path_full + '/Tools/secboot.img'
# Setting the wm_gzip.exe file path
wm_gzip_file=wmlib_path_full + '/Tools/wm_gzip.exe'
# Setting the makeimg.exe file path
makeimg_file=wmlib_path_full + '/Tools/makeimg.exe'
# Setting the makeimg_all.exe file path
makeimg_all_file=wmlib_path_full + '/Tools/makeimg_all.exe'
# Get absolute path
out_path = os.path.abspath(out_path).replace('\\', '/');
......@@ -109,23 +124,23 @@ if __name__=='__main__':
if not is_exists('wm_gzip', wm_gzip_file): exit(0)
if not is_exists('makeimg', makeimg_file): exit(0)
if not is_exists('makeimg_all', makeimg_all_file): exit(0)
# Get File Names and File Extensions
(bin_file_path,bin_file_name) = os.path.split(bin_file)
(bin_name,bin_extend) = os.path.splitext(bin_file_name)
(version_file_path,version_file_name) = os.path.split(version_file)
(secboot_file_path,secboot_file_name) = os.path.split(secboot_file)
# print debug Information
if debug_info: print('bin_file_name:' + bin_file_name + 'bin_name:' + bin_name + 'bin_extend:' + bin_extend + 'version_file_name:' + version_file_name + 'secboot_file_name:' + secboot_file_name)
print('makeimg 1M Flash...')
file_pos='_1M'
file_pos_1M='_1M'
gzip_param = "\"" + out_path + '/' + bin_file_name + "\""
make_img_param = "\"" + out_path + '/' + bin_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos + '.img' + "\"" + ' 0' + ' 0' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 90000' + ' 10100'
make_GZ_param = "\"" + out_path + '/' + bin_file_name + '.gz' + "\"" + ' ' + "\"" + out_path + '/' + bin_name + '_GZ' + file_pos + '.img' +"\"" + ' 0' + ' 1' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 90000' + ' 10100' + ' ' + "\"" + out_path + '/' + bin_file_name + "\""
make_SEC_param = "\"" + out_path + '/' + bin_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + '_SEC' + file_pos + '.img' + "\"" + ' 0' + ' 0' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 90000' + ' 10100'
make_FLS_param = "\"" + out_path + '/' + secboot_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos + '.img' + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos + '.FLS' + "\""
make_img_param = "\"" + out_path + '/' + bin_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos_1M + '.img' + "\"" + ' 0' + ' 0' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 90000' + ' 10100'
make_GZ_param = "\"" + out_path + '/' + bin_file_name + '.gz' + "\"" + ' ' + "\"" + out_path + '/' + bin_name + '_GZ' + file_pos_1M + '.img' +"\"" + ' 0' + ' 1' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 90000' + ' 10100' + ' ' + "\"" + out_path + '/' + bin_file_name + "\""
make_SEC_param = "\"" + out_path + '/' + bin_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + '_SEC' + file_pos_1M + '.img' + "\"" + ' 0' + ' 0' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 90000' + ' 10100'
make_FLS_param = "\"" + out_path + '/' + secboot_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos_1M + '.img' + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos_1M + '.FLS' + "\""
if debug_info:
print('gzip_param' + gzip_param)
......@@ -140,7 +155,7 @@ if __name__=='__main__':
do_makeimg(makeimg_file, make_SEC_param)
do_makeimg(makeimg_all_file, make_FLS_param)
rm_file = out_path + '/' + bin_name + file_pos + '.img'
rm_file = out_path + '/' + bin_name + file_pos_1M + '.img'
if os.path.exists(rm_file):
os.remove(rm_file)
rm_file = out_path + '/' + bin_file_name + '.gz'
......@@ -148,12 +163,12 @@ if __name__=='__main__':
os.remove(rm_file)
print('makeimg 2M Flash...')
file_pos='_2M'
file_pos_2M='_2M'
gzip_param = "\"" + out_path + '/' + bin_file_name + "\""
make_img_param = "\"" + out_path + '/' + bin_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos + '.img' + "\"" + ' 3' + ' 0' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 90000' + ' 10100'
make_GZ_param = "\"" + out_path + '/' + bin_file_name + '.gz' + "\"" + ' ' + "\"" + out_path + '/' + bin_name + '_GZ' + file_pos + '.img' +"\"" + ' 3' + ' 1' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 90000' + ' 10100' + ' ' + "\"" + out_path + '/' + bin_file_name + "\""
make_SEC_param = "\"" + out_path + '/' + bin_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + '_SEC' + file_pos + '.img' + "\"" + ' 3' + ' 0' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 90000' + ' 10100'
make_FLS_param = "\"" + out_path + '/' + secboot_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos + '.img' + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos + '.FLS' + "\""
make_img_param = "\"" + out_path + '/' + bin_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos_2M + '.img' + "\"" + ' 3' + ' 0' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 100000' + ' 10100'
make_GZ_param = "\"" + out_path + '/' + bin_file_name + '.gz' + "\"" + ' ' + "\"" + out_path + '/' + bin_name + '_GZ' + file_pos_2M + '.img' +"\"" + ' 3' + ' 1' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 100000' + ' 10100' + ' ' + "\"" + out_path + '/' + bin_file_name + "\""
make_SEC_param = "\"" + out_path + '/' + bin_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + '_SEC' + file_pos_2M + '.img' + "\"" + ' 3' + ' 0' + ' ' + "\"" + out_path + '/' + version_file_name + "\"" + ' 100000' + ' 10100'
make_FLS_param = "\"" + out_path + '/' + secboot_file_name + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos_2M + '.img' + "\"" + ' ' + "\"" + out_path + '/' + bin_name + file_pos_2M + '.FLS' + "\""
if debug_info:
print('gzip_param' + gzip_param)
......@@ -168,11 +183,32 @@ if __name__=='__main__':
do_makeimg(makeimg_file, make_SEC_param)
do_makeimg(makeimg_all_file, make_FLS_param)
rm_file = out_path + '/' + bin_name + file_pos + '.img'
rm_file = out_path + '/' + bin_name + file_pos_2M + '.img'
if os.path.exists(rm_file):
os.remove(rm_file)
rm_file = out_path + '/' + bin_file_name + '.gz'
if os.path.exists(rm_file):
os.remove(rm_file)
if make_fal:
# Get absolute path
layout_1M_file = os.path.abspath(layout_1M_file).replace('\\', '/');
layout_2M_file = os.path.abspath(layout_2M_file).replace('\\', '/');
makeimg_new_fls = os.path.abspath(makeimg_new_fls).replace('\\', '/');
# Create command parameters to new fls
makeimg_new_cmd="\"" + out_path + '/' + bin_name + file_pos_1M + '.FLS' + "\"" + ' ' + "\"" + layout_1M_file + "\"" + ' ' + "\"" + out_path + '/'+ bin_name + '_layout' + file_pos_1M+'.FLS' +"\""
do_makeimg(makeimg_new_fls, makeimg_new_cmd)
makeimg_new_cmd="\"" + out_path + '/' + bin_name + file_pos_2M + '.FLS' + "\"" + ' ' + "\"" + layout_2M_file + "\"" + ' ' + "\"" + out_path + '/'+ bin_name + '_layout' + file_pos_2M+'.FLS' +"\""
do_makeimg(makeimg_new_fls, makeimg_new_cmd)
# Delete temporary files
rm_file = out_path + '/' + bin_name + file_pos_1M + '.FLS'
if os.path.exists(rm_file):
os.remove(rm_file)
rm_file = out_path + '/' + bin_name + file_pos_2M + '.FLS'
if os.path.exists(rm_file):
os.remove(rm_file)
print('end')
\ No newline at end of file
# -*- coding:utf-8 -*-
#
# W600 make img script
# Copyright (c) 2018 Winner Micro Electronic Design Co., Ltd.
# All rights reserved.
#
# image header structure
# --------------------------------------------------------------------------------------------
# | magic number(4B) | image type(2B)| zip type(2B) | run image addr(4B) | run image len(4B) |
# --------------------------------------------------------------------------------------------
# | run image crc(4B) | update image addr(4B) | update image len(4B) | update image crc(4B) |
# ---------------------------------------------------------------------------------------------
# | update no(4B) | ver(16B) |
# ---------------------------------------------------------------------------------------------
# | run code |
# ---------------------------------------------------------------------------------------------
#
import sys
import os
import struct
from zlib import crc32
magic_no = 0xA0FFFF9F
def main(argv):
if(len(argv) < 8):
print("param cnt error")
print("param 0: .py")
print("param 1: input .bin file.(uncompressed file or compressed file)")
print("param 2: output file")
print("param 3: image type ,0:old param user image,1:reserved,2:secboot,3: new param user image")
print("param 4: compressed type,0:uncompressed file,1.compressed file")
print("param 5: firmware version file")
print("param 6: input image storage address")
print("param 7: input image running address")
print("param 8: input original image file")
raise Exception("param cnt error!")
# version
try:
f_ver = open(argv[5], "r+")
except IOError:
print("not find %s file" % argv[5])
raise
else:
version = f_ver.readline(20)
p = version.rfind('.')
if p == -1:
version = '1.0.00'
newversion = '1.0.01'
else:
newversion = version[:p+1]
ver = int(version[p+1:]) + 1
newversion = newversion + '{:0>2d}'.format(ver)
#print(newversion)
if len(newversion) < 16:
newversion = newversion + '\0' * (16 - len(newversion))
#print(len(newversion), newversion)
else:
newversion = newversion[:15] + '\0'
f_ver.close()
# bin file crc
try:
f_bin = open(argv[1], mode='rb')
except IOError:
print("not find %s file" % argv[1])
raise
else:
bin_data = f_bin.read()
bin_len = os.path.getsize(argv[1])
bin_crc = crc32(bin_data) ^ (0xFFFFFFFF)
# print(hex(bin_crc))
magic = struct.pack('<I', magic_no)
img_type = struct.pack('<H', int(argv[3]))
zip_type = struct.pack('<H', int(argv[4]))
# print(argv[7], int(argv[7] ,16))
run_img_addr = struct.pack('<I', int(argv[7], 16))
upd_img_addr = struct.pack('<I', int(argv[6], 16))
upd_img_len = struct.pack('<I', bin_len)
upd_checksum = struct.pack('<I', bin_crc)
upd_no = struct.pack('<I', 0)
ver_name = newversion.encode('utf-8')
# non-zip image
if not int(argv[4]):
run_img_len = struct.pack('<I', bin_len)
run_org_checksum = struct.pack('<I', bin_crc)
else:
# zip image
try:
f_src = open(argv[8], 'rb+')
except IOError:
f_bin.close()
print("not find %s file" % argv[8])
raise
else:
src_data = f_src.read()
src_len = os.path.getsize(argv[8])
src_crc = crc32(src_data) ^ (0xFFFFFFFF)
# print(src_data)
f_src.close()
run_img_len = struct.pack('<I', src_len)
run_org_checksum = struct.pack('<I', src_crc)
#image header crc
image_header = magic + img_type + zip_type + run_img_addr + run_img_len \
+ run_org_checksum + upd_img_addr + upd_img_len + upd_checksum \
+ upd_no + ver_name
header_crc = crc32(image_header) ^ (0xFFFFFFFF)
try:
f_img = open(argv[2], "wb+")
except IOError:
f_bin.close()
print("create %s file fail" % argv[2])
raise
else:
f_img.write(image_header)
f_img.write(struct.pack('<I', header_crc))
f_img.write(bin_data)
# write dummy data to pad 4byte-aligned
dummy = len(bin_data) % 4
if dummy != 0:
dummy = 4 - len(bin_data) % 4
f_img.write(struct.pack('<B', 0) * dummy)
f_img.close()
f_bin.close()
print("image %s create success!" % argv[2])
if __name__ == '__main__':
main(sys.argv)
# -*- coding:utf-8 -*_
#
# W600 make img script
# Copyright (c) 2018 Winner Micro Electronic Design Co., Ltd.
# All rights reserved.
#
# image header structure
# --------------------------------------------------------------------------------------------
# | magic number(4B) | image type(2B)| zip type(2B) | run image addr(4B) | run image len(4B) |
# --------------------------------------------------------------------------------------------
# | run image crc(4B) | update image addr(4B) | update image len(4B) | update image crc(4B) |
# ---------------------------------------------------------------------------------------------
# | update no(4B) | ver(16B) |
# ---------------------------------------------------------------------------------------------
#
#
# FLS File structure
# ----------------------------------------------
# | FLS file header (image header) |
# ------------------------------------
# | secboot header (image header) |
# ------------------------------------
# | 256-sizeof(image header) pad 0xFF |
# ------------------------------------
# | secboot img area-(56*1024 - 256) |
# ------------------------------------
# | application image header (image header) |
# ------------------------------------
# | 256-sizeof(image heager)-pad 0xFF |
# ------------------------------------
# | application image |
# ------------------------------------------------
#
#
import sys
import os
import struct
from zlib import crc32
secboot_img_addr = 0x2100
secboot_header_len = 0x100
secboot_header_pos = secboot_img_addr - secboot_header_len
secboot_img_total_len = 56*1024
run_img_header_len = 0x100
magic_no = 0xA0FFFF9F
def main(argv):
if(len(argv) != 4):
print("param cnt error")
print("param 0: .py")
print("param 1: input \"secboot.img\" file")
print("param 2: input image file")
print("param 3: output FLS file")
raise Exception("param cnt error!")
# second boot
try:
f_sec = open(argv[1], "rb+")
except IOError:
print("not find %s file" % argv[1])
raise
else:
magic_word = f_sec.read(4)
magic, = struct.unpack('<I', magic_word)
if magic != magic_no:
f_sec.close()
raise Exception("input %s file error" % argv[1])
# app image
try:
f_app=open(argv[2], "rb+")
except IOError:
f_sec.close()
print("not find %s file" % argv[2])
raise
else:
magic_word=f_app.read(4)
magic, = struct.unpack('<I', magic_word)
if magic != magic_no:
f_sec.close()
f_app.close()
raise Exception("input %s file error" % argv[1])
appimg_len=os.path.getsize(argv[2])
# create outfile
try:
f_out=open(argv[3], 'wb+')
except IOError:
f_app.close()
f_sec.close()
print("create %s file error" % argv[3])
raise
else:
final_len=secboot_img_total_len + appimg_len
data = struct.pack('<B', 0xff) * final_len
f_out.write(data)
# Write SECBOOT header to output file
f_out.seek(56)
f_sec.seek(0)
f_out.write(f_sec.read(56))
# Write SECBOOT image to output file
f_out.seek(56 + 256)
f_out.write(f_sec.read())
# Write run img header to output file
f_out.seek(56 + secboot_img_total_len)
f_app.seek(0)
f_out.write(f_app.read(56))
# Write run img to output file
f_out.seek(56 + secboot_img_total_len + run_img_header_len)
f_out.write(f_app.read())
# Calculate CRC from secboot header
f_out.seek(56)
out_data = f_out.read()
out_crc = crc32(out_data) ^ (0xFFFFFFFF)
out_len = len(out_data)
#print(hex(out_crc))
magic = struct.pack('<I', magic_no)
img_type = struct.pack('<H', 0)
zip_type = struct.pack('<H', 0)
run_img_addr = struct.pack('<I', secboot_header_pos)
upd_img_addr = struct.pack('<I', 0)
upd_img_len = struct.pack('<I', 0)
upd_checksum = struct.pack('<I', 0)
upd_no = struct.pack('<I', 0)
version = '\0' * 16
ver_name = version.encode('utf-8')
run_img_len = struct.pack('<I', out_len)
run_org_checksum = struct.pack('<I', out_crc)
# image header crc
image_header=magic + img_type + zip_type + run_img_addr + run_img_len \
+ run_org_checksum + upd_img_addr + upd_img_len + upd_checksum \
+ upd_no + ver_name
header_crc=crc32(image_header) ^ (0xFFFFFFFF)
# Write fls's header to output file
f_out.seek(0)
f_out.write(image_header)
f_out.write(struct.pack('<I', header_crc))
f_sec.close()
f_app.close()
f_out.close()
print("create %s file success!" % argv[3])
print("%s size:%dKB. %s size:%dKB" % (argv[2], appimg_len / 1024.0 , argv[3], final_len / 1024.0))
if __name__ == '__main__':
main(sys.argv)
# -*- coding:utf-8 -*-
#
# W600 make gzip file
# Copyright (c) 2018 Winner Micro Electronic Design Co., Ltd.
# All rights reserved.
import sys
import gzip
file_name = sys.argv[1]
file_prefix = file_name + '.gz'
with open(file_name, 'rb') as f_in:
with gzip.open(file_prefix, 'wb') as f_out:
f_out.writelines(f_in)
f_in.close()
f_out.close()
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册