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=======================