diff --git a/bin/base.py b/bin/base.py new file mode 100644 index 0000000..da7a719 --- /dev/null +++ b/bin/base.py @@ -0,0 +1,19 @@ +import os +import sys + + + + + +# 获取执行文件所在的目录 +def bin_path(): + if(sys.argv[0].endswith('.exe')): + path=os.path.dirname(os.path.realpath(sys.executable)) + return os.path.join(path,'bin') + else: + path=os.path.abspath(__file__) + path=os.path.split(path)[0] + return path + + + diff --git a/bin/bin_to_hex.py b/bin/bin_to_hex.py index 4a2c62a..fd8a843 100644 --- a/bin/bin_to_hex.py +++ b/bin/bin_to_hex.py @@ -4,6 +4,7 @@ import sys import struct import json from bin.log import myprint +from bin.base import bin_path # kunlun1,kunlun2,kunlun3的img类型 @@ -157,8 +158,8 @@ def tran_img_headerv0(data:bytearray): ret["sha256"]=data[32:].hex() t=str(ret) t=t.replace(',','\n') - return t - return "" + return t,ret + return "",{} def tran_img_headerv1(data:bytearray): size=len(data) @@ -186,8 +187,8 @@ def tran_img_headerv1(data:bytearray): ret["sha256"]=data[32:].hex() t=str(ret) t=t.replace(',','\n') - return t - return "" + return t,ret + return "",{} # 判断是不是pkt_header @@ -215,12 +216,13 @@ def img_header_check(data:bytearray): # 转化为hex文本 -def bin_to_hex(bin:bytearray,f): +def bin_to_hex(bin:bytearray,f,oem_file=None): all_size=len(bin) pack_size=32 turned=0 turned_old=0 out_text='' + kunlun='' if(pkt_header_check(bin)): out_text=tran_pkg_header(bin[0:96])+'\n' f.write(out_text) @@ -238,14 +240,24 @@ def bin_to_hex(bin:bytearray,f): hdr_data=bytearray() hdr_v=img_header_check(hdr_data) if(hdr_v=='V0'): - out_text=tran_img_headerv0(hdr_data)+'\n' + kunlun='kl1' + out_text,ret=tran_img_headerv0(hdr_data) + out_text+='\n' f.write(out_text) elif(hdr_v=='V1'): - out_text=tran_img_headerv1(hdr_data)+'\n' + kunlun='kl3' + out_text,ret=tran_img_headerv1(hdr_data) + out_text+='\n' f.write(out_text) + # 截取oem部分 + if(oem_file is not None): + if(_ImgType[hdr_data[1]]=="imgV1OEM"): + size=int(ret["imgSize"]) + oem_bin=bin[turned_old+32:turned_old+32+size] + oem_file.write(oem_bin) out_text=f"[{hex(turned_old)}] {data.hex(' ')}\n" f.write(out_text) - + return kunlun def bin_to_hex_file(bin_file_name:str,hex_file_name:str,enc=0): @@ -258,8 +270,19 @@ def bin_to_hex_file(bin_file_name:str,hex_file_name:str,enc=0): for index in range(len(bin)): bin[index]=bin[index]^pat with open(hex_file_name,mode='w+',encoding="utf-8") as f: - bin_to_hex(bin,f) - + # oem_bin 去除原始后缀 .bin.txt 添加新后缀 -oem.bin + oem_name=hex_file_name[0:-8]+'-oem.bin' + with open(oem_name,mode='wb+') as oem_f: + kl=bin_to_hex(bin,f,oem_f) + # 调用oem_tool 打印oem信息 + myprint(bin_path()) + oem_tool=os.path.join(bin_path(),f"{kl}_oem.exe") + if(os.path.exists(oem_tool)): + cmd_str=f"{oem_tool} --parse={oem_name}" + myprint(cmd_str) + os.system(cmd_str) + else: + myprint(f"oem_tool not found: {oem_tool}") def bin_file_decrypt(bin_file:str): with open(bin_file,mode='rb') as f: diff --git a/bin/kl3_oem.exe b/bin/kl3_oem.exe new file mode 100644 index 0000000..6aa252c Binary files /dev/null and b/bin/kl3_oem.exe differ diff --git a/kunlun.py b/kunlun.py index 383ccae..52e7b42 100644 --- a/kunlun.py +++ b/kunlun.py @@ -15,6 +15,7 @@ from bin.log import log_init from bin.bin_to_hex import bin_to_hex_file from bin.bin_to_hex import bin_file_decrypt from bin.bin_to_hex import clear_tmp +from bin.base import bin_path def init_send(s_port:serial.Serial, send_str:str): @@ -223,14 +224,6 @@ def burn_fun(): print_device_str(ser_read_data) -# 获取执行文件所在的目录 -def bin_path(): - if(sys.argv[0].endswith('.exe')): - path=os.path.dirname(os.path.realpath(sys.executable)) - else: - path=os.path.abspath(__file__) - path=os.path.split(path)[0] - return os.path.join(path,'bin') def global_def(): global init_str