From 92d7b0e878b4806aafee193a04b2a5c75e067f41 Mon Sep 17 00:00:00 2001 From: ranchuan Date: Tue, 15 Oct 2024 18:05:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=A0=E5=AF=86=E5=9B=BA?= =?UTF-8?q?=E4=BB=B6=E7=83=A7=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/kl3_ram_build.bin | Bin 48156 -> 48388 bytes bin_to_hex.py | 53 ++++++++++++++++++++++++++++++++++++------ kunlun.py | 28 +++++++++++++++------- log.py | 9 ++++--- 4 files changed, 72 insertions(+), 18 deletions(-) diff --git a/bin/kl3_ram_build.bin b/bin/kl3_ram_build.bin index 5941fcc1981ee1f068e34cb748bf8ca2f59d1a4a..2badb94753c170c49f94b75c179b8cb68b48ba52 100644 GIT binary patch delta 8662 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',data[0:32]) if(a[8]==_IMG_HEADER_MAGIC_NO): - ret["devType"]=hex(a[0])+f"({_DevType[a[0]]})" - ret["imgType"]=hex(a[1])+f"({_ImgType[a[1]]})" + ret["devType"]=hex(a[0])+f"({_DevType.get(a[0],'unknown')})" + ret["imgType"]=hex(a[1])+f"({_ImgType.get(a[1],'unknown')})" ret["imgSize"]=str(a[2]) ret["imgVer"]=hex(a[3]) ret["psramSize"]=str(a[4]) @@ -149,8 +167,8 @@ def tran_img_headerv1(data:bytearray): # f 单精度浮点 d 双精度浮点 s 字符串 a=struct.unpack('>BBBBIBBBBIIIBBBBI',data[0:32]) if(a[11]==_IMG_HEADER_MAGIC_NO): - ret["devType"]=hex(a[0])+f"({_DevType[a[0]]})" - ret["imgType"]=hex(a[1])+f"({_ImgType[a[1]]})" + ret["devType"]=hex(a[0])+f"({_DevType.get(a[0],'unknown')})" + ret["imgType"]=hex(a[1])+f"({_ImgType.get(a[1],'unknown')})" ret["encType"]=hex(a[2]) ret["cfg"]=hex(a[3]) ret["imgSize"]=str(a[4]) @@ -176,7 +194,7 @@ def pkt_header_check(data:bytearray): magic=(data[12]<<24)|(data[13]<<16)|(data[14]<<8)|(data[15]) if (magic==_PKT_HEADER_MAGIC_NO): return True - print(f"magic={hex(magic)}") + myprint(f"magic={hex(magic)}") return False # 判断是不是img_header @@ -186,7 +204,7 @@ def img_header_check(data:bytearray): magic=(data[20]<<24)|(data[21]<<16)|(data[22]<<8)|(data[23]) if (magic==_IMG_HEADER_MAGIC_NO): imghdr_v=data[11] - print(f"magic={hex(magic)}, imghdr_v={imghdr_v}") + myprint(f"magic={hex(magic)}, imghdr_v={imghdr_v}") # 返回使用的结构体类型 if(imghdr_v==0x10): return 'V1' @@ -233,12 +251,33 @@ def bin_to_hex_file(bin_file_name:str,hex_file_name:str,enc=0): with open(bin_file_name,mode='rb') as f: bin=bytearray(f.read()) if(enc): - pat=(bin[0]^0x03)&0xff + myprint("start decrypt") + pat=(bin[12]^0x00)&0xff + myprint(f"decrypt image:{hex(pat)}({_PatternType.get(pat,'unknown')})") 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) + +def bin_file_decrypt(bin_file:str): + with open(bin_file,mode='rb') as f: + bin=bytearray(f.read()) + # 自动判断是否需要解密 + if ((bin[12]==bin[13])and(bin[12]!=0x00)): + pat=(bin[12]^0x00)&0xff + myprint(f"decrypt image:{hex(pat)}({_PatternType.get(pat,'unknown')})") + for index in range(len(bin)): + bin[index]=bin[index]^pat + else: + pat=bin[1] + myprint(f"copy image:{hex(pat)}({_PatternType.get(pat,'unknown')})") + with open('tmp.bin',mode='wb+') as f: + f.write(bin) + return "tmp.bin" + + + # bin_to_hex.py input_file output_file if __name__ == "__main__": # bin_to_hex_file(sys.argv[1],sys.argv[2],sys.argv[3]) diff --git a/kunlun.py b/kunlun.py index b9d2d96..4d5c720 100644 --- a/kunlun.py +++ b/kunlun.py @@ -13,6 +13,7 @@ import binascii from log import myprint from log import log_init from bin_to_hex import bin_to_hex_file +from bin_to_hex import bin_file_decrypt def init_send(s_port:serial.Serial, send_str): @@ -59,7 +60,7 @@ def burn_flash_bin(s_port:serial.Serial, x_modem:xmodem.XMODEM, f_file): continue print_device_str(tmp) s_info += tmp - if(s_info.find(b'C')>=0 and bytes2read==1): + if(s_info.find(b'CCC')>=0 and bytes2read==1): m_flash=True else: m_flash=False @@ -79,10 +80,12 @@ def burn_flash_bin(s_port:serial.Serial, x_modem:xmodem.XMODEM, f_file): myprint("Cannot load file, please check the file path and retry. Press to exit") sys.exit() - xmodem_send = x_modem.send(stream, quiet=True, callback=download_callback) + xmodem_send = x_modem.send(stream, quiet=True, callback=download_callback,retry=16) etime = datetime.datetime.now() trans_time_1 = (etime - stime).seconds myprint ("\nTransferring %s result: %s, consuming time: %d s \n" % (f_file,xmodem_send, trans_time_1)) + if(xmodem_send is False): + break elif m_done: myprint("Update done.") break @@ -107,9 +110,9 @@ def print_device_str(data:bytearray): for item in data: try: d=item.decode('utf-8') - myprint(d.strip()) + myprint("DEVICE:",d.strip()) except Exception as e: - myprint(f" {item.hex()}") + myprint("DEVICE:",item) # 上传固件 def upload_bin(x_modem:xmodem.XMODEM, w_file): @@ -250,8 +253,17 @@ if __name__ == '__main__': # 发送启动字符让设备进入xmodem模式 init_send(ser, init_str.encode("utf-8")) - burn_ram_bin(modem, ram_file) - # burn_ram_bin(modem, "kl3_ram_build.bin") - upload_fun() - # burn_fun() + # burn_ram_bin(modem, ram_file) + # upload_fun() + + burn_ram_bin(modem, "bin/kl3_ram_build.bin") + dir_path="\\\\10.0.15.200\\内网拷贝进来的\\ran.chuan\\" + for item in os.listdir(dir_path): + if(item.endswith('.bin')): + iot_flash_file=os.path.join(dir_path,item) + break + # iot_flash_file="C:\\new\\buildout\\kl3_sta_kunlun.bin" + iot_flash_file="C:\\new\\buildout\\HZ-SG-TCE3PS03.bin" + iot_flash_file=bin_file_decrypt(iot_flash_file) + burn_fun() diff --git a/log.py b/log.py index 5b04b56..cc31776 100644 --- a/log.py +++ b/log.py @@ -12,9 +12,12 @@ def myprint_dec(func): def wrapper(*args, **kwargs): # 在这里添加额外的功能 print(*args, **kwargs) - kwargs["file"]=_log_fp - result = func(*args, **kwargs) - _log_fp.flush() + if(_log_fp is not None): + kwargs["file"]=_log_fp + result = func(*args, **kwargs) + _log_fp.flush() + else: + result=None return result return wrapper