標籤:nal 進位 offset 二進位檔案 資料 col read open get
在燒錄程式的時候,需要將多個二進位bin檔案合成一個,並且要指定資料區段地址位移量,在資料區段之間的地址填充預設值0xff。因為不想手動操作,想直接通過make命令就可以產生合并後的bin檔案,具體方法是通過在makefile中添加調用python指令碼命令來實現bin檔案合併作業,沒正經學過指令碼語言,python上手最快,就決定用python寫一個指令碼,然後添加到makefile中就好了。
python像c一樣操作二進位檔案需要用到struct庫。
指令碼編寫的大概思想是:
1.根據最後一個檔案資料的地址位移量和最後一個檔案的大小來確定合成後檔案的最終大小。
2.因為第一個bin檔案的位移量為0,所以建立一個第一個檔案的副本,根據資料地址位移量在檔案末尾添加0xff或者其他bin檔案資料,所有bin檔案添加完後,該副本即為合并後bin檔案。
python指令碼代碼如下:
import osimport shutilimport structbin1_path = ‘demo1.bin‘bin2_path = ‘demo2.bin‘bin3_path = ‘demo3.bin‘bin4_path = ‘demo4.bin‘bin_result_path = ‘imagedemo.bin‘offset1 = 0x00000000offset2 = 0x00008000offset3 = 0x0000a000offset4 = 0x00100000shutil.copyfile(bin1_path,bin_result_path)bin_1 = open(bin1_path,‘rb‘)bin_2 = open(bin2_path,‘rb‘)bin_3 = open(bin3_path,‘rb‘)bin_4 = open(bin4_path,‘rb‘)bin_merge = open(bin_result_path, ‘ab‘)bin4_size = os.path.getsize(bin4_path)bin_result_size = os.path.getsize(bin_result_path)final_size = 1024*1024*1 + bin4_sizeoffset = bin_result_sizevalue_default = struct.pack(‘B‘, 0xff)while offset < final_size: if offset == offset2: data = bin_2.read() bin_merge.write(data) offset = bin_merge.tell() elif offset == offset3: data = bin_3.read() bin_merge.write(data) offset = bin_merge.tell() elif offset == offset4: data = bin_4.read() bin_merge.write(data) offset = bin_merge.tell() else: bin_merge.write(value_default) offset = bin_merge.tell()bin_1.close()bin_2.close()bin_3.close()bin_4.close()bin_merge.close()
python 讀寫和合并二進位bin檔案