merge_rtsmart.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import os
  2. import sys
  3. compress_flag = 0
  4. def create_flash_default_data(length):
  5. datas = bytearray(length)
  6. for i in range(length):
  7. datas[i] = 0xff
  8. return datas
  9. def gen_flash_bin():
  10. bootload_file = "./pre_build_bin/spl_bl808_d0.bin"
  11. dtb_file = "./pre_build_bin/hw.dtb.5M" # 64k
  12. opensbi_file = "./pre_build_bin/opensbi_v0.6.bin" # 64k
  13. kernel_file = "./Image.bin"
  14. kernel_out_img_file = "./whole_img_d0.bin"
  15. bootload_file_size = os.stat(bootload_file).st_size
  16. dtb_file_size = os.stat(dtb_file).st_size
  17. linux_opensbi_file_size = os.stat(opensbi_file).st_size
  18. kernel_file_size = os.stat(kernel_file).st_size
  19. whole_img_data = create_flash_default_data(0x10000 + 0x10000 + 0x10000 + kernel_file_size)
  20. # bootload
  21. print("bootload size:", bootload_file_size)
  22. fp = open(bootload_file, 'rb')
  23. data00 = fp.read() + bytearray(0)
  24. fp.close()
  25. whole_img_data[0x0:0x0+len(data00)] = data00 # 0x0~0x10000 64k
  26. # dtb
  27. print("dtb size:", dtb_file_size)
  28. fp = open(dtb_file, 'rb')
  29. data0 = fp.read() + bytearray(0)
  30. fp.close()
  31. whole_img_data[0x10000:0x10000+len(data0)] = data0 # 0x0~0x10000 64k
  32. # opensbi
  33. print("opensbi size:",linux_opensbi_file_size)
  34. fp = open(opensbi_file, 'rb')
  35. data1 = fp.read() + bytearray(0)
  36. fp.close()
  37. whole_img_data[0x20000:0x20000+len(data1)] = data1 # 0x10000~0x20000 64k
  38. # linux kernel
  39. print("kernel img size:",kernel_file_size)
  40. b0 = (kernel_file_size & 0xff000000) >> 24
  41. b1 = (kernel_file_size & 0xff0000) >> 16
  42. b2 = (kernel_file_size & 0xff00) >> 8
  43. b3 = kernel_file_size & 0xff
  44. # print(b0)
  45. # print(b1)
  46. # print(b2)
  47. # print(b3)
  48. header2 = [0x00,0x00,0x00,compress_flag,b3,b2,b1,b0]
  49. whole_img_data[0x2fff8:0x30000] = bytearray((header2)) # image header
  50. fp = open(kernel_file, 'rb')
  51. data2 = fp.read() + bytearray(0)
  52. fp.close()
  53. whole_img_data[0x30000:0x30000+len(data2)] = data2 # 4M
  54. fp = open(kernel_out_img_file, 'wb+')
  55. fp.write(whole_img_data)
  56. fp.close()
  57. if __name__ == '__main__':
  58. if(len(sys.argv) < 2):
  59. compress_flag = 0
  60. os.system('cp -rf rtthread_d0.bin Image.bin')
  61. else:
  62. if int(sys.argv[1]) == 1:
  63. print("compress mode...")
  64. compress_flag = 1
  65. os.system('lz4 -9 -f rtthread_d0.bin Image.bin')
  66. else:
  67. compress_flag = 0
  68. os.system('cp -rf rtthread_d0.bin Image.bin')
  69. print("merge bin start...")
  70. gen_flash_bin()
  71. print("merge done!")
  72. os.system('rm -rf Image.bin')