1import re 2import subprocess 3import os 4import platform 5 6#tool_pwd=os.path.normpath(os.getcwd()+r'/packages/realtek_ameba/sdk-ameba-v4.0b_without_NDA_GCC_V1.0.0/component/soc/realtek/8711b/misc/iar_utility/common/tools') 7 8pwd=[] 9def findfile(path,filename): 10 for x in os.listdir(path): 11 if x=='8195a': 12 continue 13 x=os.path.join(path,x) 14 if os.path.isdir(x): 15 findfile(x,filename) 16 else: 17 if filename in os.path.split(x)[1]: 18 pwd.append(os.path.split(x)[0]) 19 break 20 return 21 22findfile(os.path.abspath('.'),'pick.exe') 23if pwd: 24 print(pwd[0]) 25 26tool_pwd=str(pwd[0]) 27 28def grep_func(file,str): 29 fd=open(file,'r') 30 strtmp=r'^[0-9]{8}\s[a-zA-Z]{1}\s%s$' % str 31 for line in fd.readlines(): 32 if re.match(strtmp,line): 33 #print(line) 34 value=re.split(r'[\s+]+',line) 35 fd.close() 36 return value[0] 37 fd.close() 38 39#=====================start======================= 40 41os.system(r'arm-none-eabi-objdump -d rtthread.axf > application.asm') 42os.system(r'arm-none-eabi-size rtthread.axf') 43os.system(r'arm-none-eabi-nm rtthread.axf | sort > application.nmap') 44 45#====================process===================== 46 47addr1=grep_func(r'application.nmap','__ram_image2_text_start__') 48addr2=grep_func(r'application.nmap','__ram_image2_text_end__') 49addr3=grep_func(r'application.nmap','__ram_image2_text_start__') 50addr4=grep_func(r'application.nmap','__ram_image2_text_end__') 51addr5=grep_func(r'application.nmap','__xip_image2_start__') 52addr6=grep_func(r'application.nmap','__xip_image2_start__') 53 54sysstr = platform.system() 55print(sysstr) 56if(sysstr == "Linux"): 57 exec_pick=os.path.join(tool_pwd,'pick') 58 exec_checksum=os.path.join(tool_pwd,'checksum') 59 os.system('chmod +x ' + exec_pick) 60 os.system('chmod +x ' + exec_checksum) 61 #print(exec_pick) 62elif(sysstr == "Windows"): 63 exec_pick=os.path.join(tool_pwd,'pick.exe') 64 exec_checksum=os.path.join(tool_pwd,'checksum.exe') 65 #print(exec_pick) 66else: 67 print("not support!!!") 68 69exec_pick_param1=r' 0x%s 0x%s ram_2.r.bin ram_2.bin raw' % (addr1,addr2) 70exec_pick_param2=r' 0x%s 0x%s ram_2.bin ram_2.p.bin' % (addr3,addr4) 71exec_pick_param3=r' 0x%s 0x%s xip_image2.bin xip_image2.p.bin' % (addr5,addr6) 72#print(exec_pick_param1) 73#print(exec_pick_param2) 74#print(exec_pick_param3) 75 76exec_cmd1=exec_pick+exec_pick_param1 77exec_cmd2=exec_pick+exec_pick_param2 78exec_cmd3=exec_pick+exec_pick_param3 79#print(exec_cmd1) 80#print(exec_cmd2) 81#print(exec_cmd3) 82 83os.system(exec_cmd1) 84os.system(exec_cmd2) 85os.system(exec_cmd3) 86 87#================create bin file================ 88 89if os.path.exists('image2_all_ota1.bin'): 90 os.remove('image2_all_ota1.bin') 91 92with open('xip_image2.p.bin','rb') as src: 93 with open('image2_all_ota1.bin', 'wb') as dst: 94 dst.write(src.read()) 95 96with open('ram_2.p.bin','rb') as src: 97 with open('image2_all_ota1.bin', 'ab') as dst: 98 dst.write(src.read()) 99 100exec_cmd4 = exec_checksum + ' image2_all_ota1.bin || true' 101os.system(exec_cmd4) 102 103os.remove("ram_2.bin") 104os.remove("ram_2.p.bin") 105os.remove("ram_2.r.bin") 106os.remove("xip_image2.bin") 107os.remove("xip_image2.p.bin") 108os.remove("rdp.bin") 109 110print("Done...") 111 112#=====================end=======================