blflashcommand/libs/base/bflb_img_create.py

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