180 lines
6.8 KiB
Python
180 lines
6.8 KiB
Python
|
# decompyle3 version 3.9.0
|
||
|
# Python bytecode version base 3.7.0 (3394)
|
||
|
# Decompiled from: Python 3.7.16 (default, Mar 30 2023, 01:25:49)
|
||
|
# [GCC 12.2.1 20220924]
|
||
|
# Embedded file name: libs/base/bflb_img_create.py
|
||
|
import re, os, sys, time, shutil, zipfile
|
||
|
from libs import bflb_utils
|
||
|
from libs.bflb_utils import app_path, chip_path, set_error_code, convert_path
|
||
|
from libs.bflb_configobj import BFConfigParser
|
||
|
from libs.base import bflb_efuse_boothd_create
|
||
|
|
||
|
def take_second(elem):
|
||
|
return elem[1]
|
||
|
|
||
|
|
||
|
def factory_mode_set(file, value):
|
||
|
cfg = BFConfigParser()
|
||
|
cfg.read(file)
|
||
|
if cfg.has_option('EFUSE_CFG', 'factory_mode'):
|
||
|
cfg.set('EFUSE_CFG', 'factory_mode', value)
|
||
|
cfg.write(file, 'w')
|
||
|
|
||
|
|
||
|
def check_pt_file(file, addr):
|
||
|
if len(file) > 0:
|
||
|
i = 0
|
||
|
L = []
|
||
|
while i < len(file):
|
||
|
L.append([convert_path(file[i]), int(addr[i], 16)])
|
||
|
i += 1
|
||
|
|
||
|
L.sort(key=take_second)
|
||
|
i = 0
|
||
|
try:
|
||
|
while i < len(L) - 1:
|
||
|
address = L[i][1]
|
||
|
address_next = L[i + 1][1]
|
||
|
file_size = os.path.getsize(os.path.join(app_path, L[i][0]))
|
||
|
if address_next < address + file_size:
|
||
|
bflb_utils.printf('pt check fail, %s is overlayed with %s in flash layout, please check your partition table to fix this issue' % (
|
||
|
L[i][0], L[i + 1][0]))
|
||
|
return False
|
||
|
else:
|
||
|
i += 1
|
||
|
|
||
|
except Exception as e:
|
||
|
try:
|
||
|
bflb_utils.printf(e)
|
||
|
return False
|
||
|
finally:
|
||
|
e = None
|
||
|
del e
|
||
|
|
||
|
return True
|
||
|
|
||
|
|
||
|
def compress_dir(chipname, zippath, efuse_load=False, address=None, flash_file=None, efuse_file=None, efuse_mask_file=None):
|
||
|
zip_file = os.path.join(chip_path, chipname, zippath, 'whole_img.pack')
|
||
|
dir_path = os.path.join(chip_path, chipname, chipname)
|
||
|
cfg_file = os.path.join(chip_path, chipname, 'eflash_loader/eflash_loader_cfg.ini')
|
||
|
cfg = BFConfigParser()
|
||
|
cfg.read(cfg_file)
|
||
|
if not address:
|
||
|
address = []
|
||
|
if not flash_file:
|
||
|
flash_file = []
|
||
|
if check_pt_file(flash_file, address) is not True:
|
||
|
bflb_utils.printf('PT Check Fail')
|
||
|
set_error_code('0082')
|
||
|
return False
|
||
|
flash_file.append(os.path.join(chip_path, chipname, 'eflash_loader/eflash_loader_cfg.ini'))
|
||
|
if efuse_load:
|
||
|
if efuse_file:
|
||
|
flash_file.append(efuse_file)
|
||
|
if efuse_mask_file:
|
||
|
flash_file.append(efuse_mask_file)
|
||
|
if len(flash_file) > 0:
|
||
|
i = 0
|
||
|
try:
|
||
|
while i < len(flash_file):
|
||
|
if chip_path in flash_file[i]:
|
||
|
relpath = os.path.relpath(os.path.join(app_path, convert_path(flash_file[i])), chip_path)
|
||
|
dir = os.path.join(chip_path, chipname, relpath)
|
||
|
if os.path.isdir(os.path.dirname(dir)) is False:
|
||
|
os.makedirs(os.path.dirname(dir))
|
||
|
shutil.copyfile(os.path.join(app_path, convert_path(flash_file[i])), dir)
|
||
|
else:
|
||
|
relpath = os.path.relpath(os.path.join(chipname, 'img_create', os.path.basename(flash_file[i])))
|
||
|
dir = os.path.join(chip_path, chipname, relpath)
|
||
|
if os.path.isdir(os.path.dirname(dir)) is False:
|
||
|
os.makedirs(os.path.dirname(dir))
|
||
|
shutil.copyfile(flash_file[i], dir)
|
||
|
i += 1
|
||
|
|
||
|
verfile = os.path.join(chip_path, chipname, chipname, 'version.txt')
|
||
|
with open(verfile, mode='w') as f:
|
||
|
f.write(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
|
||
|
except Exception as e:
|
||
|
try:
|
||
|
bflb_utils.printf(e)
|
||
|
return False
|
||
|
finally:
|
||
|
e = None
|
||
|
del e
|
||
|
|
||
|
try:
|
||
|
z = zipfile.ZipFile(zip_file, 'w')
|
||
|
for dirpath, dirnames, filenames in os.walk(dir_path):
|
||
|
for file in filenames:
|
||
|
z.write(os.path.join(dirpath, file), os.path.relpath(os.path.join(dirpath, file), os.path.join(chip_path, chipname)))
|
||
|
|
||
|
z.close()
|
||
|
shutil.rmtree(dir_path)
|
||
|
except Exception as e:
|
||
|
try:
|
||
|
bflb_utils.printf(e)
|
||
|
return False
|
||
|
finally:
|
||
|
e = None
|
||
|
del e
|
||
|
|
||
|
return True
|
||
|
|
||
|
|
||
|
def img_create(args, chipname='bl60x', chiptype='bl60x', img_dir=None, config_file=None):
|
||
|
sub_module = __import__(('libs.' + chiptype), fromlist=[chiptype])
|
||
|
img_dir_path = os.path.join(chip_path, chipname, 'img_create')
|
||
|
if img_dir is None:
|
||
|
sub_module.img_create_do.img_create_do(args, img_dir_path, config_file)
|
||
|
else:
|
||
|
sub_module.img_create_do.img_create_do(args, img_dir, config_file)
|
||
|
|
||
|
|
||
|
def create_sp_media_image_file(config, chiptype='bl60x', cpu_type=None):
|
||
|
sub_module = __import__(('libs.' + chiptype), fromlist=[chiptype])
|
||
|
sub_module.img_create_do.create_sp_media_image(config, cpu_type)
|
||
|
|
||
|
|
||
|
def encrypt_loader_bin(chiptype, file, sign, encrypt, encrypt_key, encrypt_iv, publickey_file, privatekey_file):
|
||
|
sub_module = __import__(('libs.base.' + chiptype), fromlist=[chiptype])
|
||
|
return sub_module.img_create_do.encrypt_loader_bin_do(file, sign, encrypt, encrypt_key, encrypt_iv, publickey_file, privatekey_file)
|
||
|
|
||
|
|
||
|
def run():
|
||
|
parser_image = bflb_utils.image_create_parser_init()
|
||
|
args = parser_image.parse_args()
|
||
|
bflb_utils.printf('Chipname: %s' % args.chipname)
|
||
|
if args.chipname:
|
||
|
chip_dict = { 'bl56x': 'bl60x',
|
||
|
'bl60x': 'bl60x',
|
||
|
'bl562': 'bl602',
|
||
|
'bl602': 'bl602',
|
||
|
'bl702': 'bl702',
|
||
|
'bl702l': 'bl702l',
|
||
|
'bl808': 'bl808',
|
||
|
'bl606p': 'bl808',
|
||
|
'bl616': 'bl616',
|
||
|
'wb03': 'wb03'}
|
||
|
chipname = args.chipname
|
||
|
chiptype = chip_dict[chipname]
|
||
|
img_create_path = os.path.join(chip_path, chipname, 'img_create_mcu')
|
||
|
img_create_cfg = os.path.join(chip_path, chipname, 'img_create_mcu') + '/img_create_cfg.ini'
|
||
|
bh_cfg_file = img_create_path + '/efuse_bootheader_cfg.ini'
|
||
|
bh_file = img_create_path + '/bootheader.bin'
|
||
|
if args.imgfile:
|
||
|
imgbin = args.imgfile
|
||
|
cfg = BFConfigParser()
|
||
|
cfg.read(img_create_cfg)
|
||
|
cfg.set('Img_Cfg', 'segdata_file', imgbin)
|
||
|
cfg.write(img_create_cfg, 'w')
|
||
|
bflb_efuse_boothd_create.bootheader_create_process(chipname, chiptype, bh_cfg_file, bh_file, img_create_path + '/bootheader_dummy.bin')
|
||
|
img_create(args, chipname, chiptype, img_create_path, img_create_cfg)
|
||
|
else:
|
||
|
bflb_utils.printf('Please set chipname config, exit')
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
run()
|
||
|
# okay decompiling ./libs/base/bflb_img_create.pyc
|