142 lines
6.0 KiB
Python
142 lines
6.0 KiB
Python
from pathlib import Path
|
|
from device.LaminaAdapter import LaminaAdapter
|
|
from device.LaminaAdapter import GenerateImage_DLSY001_p460, GeneratePackage_DLSY001_p460
|
|
|
|
|
|
def Process2():
|
|
""" 优化器-DLSY001 镜像生成流程 """
|
|
root = Path(r"D:\WorkingProject\LightStackOptimizer\software\lamina_optimizer\lamina_optimizer\Debug")
|
|
# result = Path(r"test\p460_o1\result")
|
|
result = root
|
|
# 正常启动镜像
|
|
hex_boot = Path(r"test\p460_o1\bootloader.hex")
|
|
hex_main = root / r"lamina_optimizer.hex"
|
|
hex_back = root / r"lamina_optimizer.hex"
|
|
hex_update = root / r"lamina_optimizer.hex"
|
|
|
|
file_image = result / f'{hex_main.stem}_ROM.bin'
|
|
file_main_header = result / 'DLSY001_header_main.bin'
|
|
file_back_header = result / 'DLSY001_header_back.bin'
|
|
file_package = result / f'{hex_update.stem}.dat'
|
|
file_bin = result / f'{hex_update.stem}.bin'
|
|
|
|
data_bins = GenerateImage_DLSY001_p460(hex_boot, hex_main, hex_back)
|
|
data_package, data_bin = GeneratePackage_DLSY001_p460(hex_update)
|
|
|
|
file_image.write_bytes(data_bins[0].copy())
|
|
file_main_header.write_bytes(data_bins[1].copy())
|
|
file_back_header.write_bytes(data_bins[2].copy())
|
|
file_package.write_bytes(data_package)
|
|
file_bin.write_bytes(data_bin)
|
|
|
|
# 异常镜像-主分区md5错误
|
|
file_image1 = result / f'{file_image.stem}_b1.bin'
|
|
data_image = data_bins[0].copy()
|
|
data_image[0x054018: 0x05401A] = [0x00, 0x01]
|
|
file_image1.write_bytes(data_image)
|
|
|
|
# 异常镜像-备份分区md5错误
|
|
file_image2 = result / f'{file_image.stem}_b2.bin'
|
|
data_image = data_bins[0].copy()
|
|
data_image[0x056018: 0x05601A] = [0x00, 0x01]
|
|
file_image2.write_bytes(data_image)
|
|
|
|
# 异常镜像-双分区md5错误
|
|
file_image3 = result / f'{file_image.stem}_b3.bin'
|
|
data_image = data_bins[0].copy()
|
|
data_image[0x054018: 0x05401A] = [0x00, 0x01]
|
|
data_image[0x056018: 0x05601A] = [0x00, 0x01]
|
|
file_image3.write_bytes(data_image)
|
|
|
|
|
|
def Process(type_dev: str, path_boot: Path, path_project: Path, makePackages: bool =True, makeImage: bool = True):
|
|
""" 镜像生成流程 """
|
|
root_boot = path_boot
|
|
root_main = path_project
|
|
result = root_main
|
|
|
|
# 程序文件名适配
|
|
if type_dev[:4] == 'DLSY':
|
|
program_name = 'lamina_optimizer'
|
|
else:
|
|
program_name = 'lamina_adapter'
|
|
|
|
# 正常启动镜像
|
|
hex_boot = root_boot / "bootloader.hex"
|
|
hex_main = root_main / f"{program_name}.hex"
|
|
hex_back = root_main / f"{program_name}_back.hex"
|
|
|
|
file_image = result / f'{hex_main.stem}_ROM.bin'
|
|
file_package = result / f'{hex_main.stem}.dat'
|
|
file_package_backup = result / f'{hex_back.stem}.dat'
|
|
|
|
dev_lamina = LaminaAdapter(None, type_dev=type_dev)
|
|
|
|
if makePackages:
|
|
if hex_main.exists():
|
|
data_package = dev_lamina.make_package(hex_main)
|
|
file_package.write_bytes(data_package)
|
|
if hex_back.exists():
|
|
data_package_backup = dev_lamina.make_package(hex_back, upgrade_backup=True)
|
|
file_package_backup.write_bytes(data_package_backup)
|
|
if makeImage:
|
|
if (not hex_boot.exists()) or (not hex_main.exists()) or (not hex_back.exists()):
|
|
raise Exception("缺失必要程序文件")
|
|
data_image = dev_lamina.make_image(hex_boot, hex_main, hex_back, output_header=True, output_bin=True)
|
|
file_image.write_bytes(data_image)
|
|
|
|
# 异常镜像-主分区md5错误
|
|
file_image1 = result / f'{file_image.stem}_b1.bin'
|
|
data_image_copy = data_image
|
|
if type_dev == 'SLCP001':
|
|
data_image_copy[0x0FC018: 0x0FC01A] = [0x00, 0x01]
|
|
else:
|
|
data_image_copy[0x054018: 0x05401A] = [0x00, 0x01]
|
|
file_image1.write_bytes(data_image_copy)
|
|
|
|
# 异常镜像-备份分区md5错误
|
|
file_image2 = result / f'{file_image.stem}_b2.bin'
|
|
data_image_copy = data_image
|
|
if type_dev == 'SLCP001':
|
|
data_image_copy[0x0FE018: 0x0FE01A] = [0x00, 0x01]
|
|
else:
|
|
data_image_copy[0x056018: 0x05601A] = [0x00, 0x01]
|
|
file_image2.write_bytes(data_image_copy)
|
|
|
|
# 异常镜像-双分区md5错误
|
|
file_image3 = result / f'{file_image.stem}_b3.bin'
|
|
data_image_copy = data_image
|
|
if type_dev == 'SLCP001':
|
|
data_image_copy[0x0FE018: 0x0FE01A] = [0x00, 0x01]
|
|
data_image_copy[0x0FC018: 0x0FC01A] = [0x00, 0x01]
|
|
else:
|
|
data_image_copy[0x054018: 0x05401A] = [0x00, 0x01]
|
|
data_image_copy[0x056018: 0x05601A] = [0x00, 0x01]
|
|
file_image3.write_bytes(data_image_copy)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
path_boot1 = Path(r"D:\WorkingProject\LightStackAdapter\software\umon\4A0-PROJ_STACKLIGHT_PARALLEL_ADAPTOR")
|
|
path_boot2 = Path(r"D:\WorkingProject\LightStackAdapter\software\umon\460-PROJ_STACKLIGHT_PARALLEL_ADAPTOR")
|
|
path_boot3 = Path(r"D:\WorkingProject\LightStackAdapter\software\umon\460-PROJ_STACKLIGHT_OPTIMIZER")
|
|
path_main1 = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\lamina_adapter\Debug")
|
|
path_main2 = Path(r"D:\WorkingProject\LightStackOptimizer\software\lamina_optimizer\lamina_optimizer\Debug")
|
|
path_main3 = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\release\device_V1\lamina_adapter\Debug")
|
|
path_main4 = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\release\device_V3.01\lamina_adapter\Debug")
|
|
path_main5 = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\release\device_V2.03\lamina_adapter\Debug")
|
|
|
|
mode_config = {
|
|
'SLCP001': ('SLCP001', path_boot1, path_main3),
|
|
'SLCP101': ('SLCP101', path_boot2, path_main5),
|
|
'SLCP102': ('SLCP102', path_boot2, path_main4),
|
|
'DLSY001': ('DLSY001', path_boot3, path_main2),
|
|
'SLCP102_error': ('SLCP101', path_boot2, path_main4),
|
|
}
|
|
|
|
# Process0(path_boot1, path_main) # 适配器SLCP001
|
|
# Process1(path_boot2, path_main) # 适配器SLCP101
|
|
# Process1_v2(path_boot2, path_main) # 适配器SLCP102
|
|
# Process2()
|
|
|
|
Process(*mode_config['SLCP101'])
|