gen_bin.py 3.1 KB

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