esp32-s2_dfu/tools/mksunxi.py

48 lines
1.3 KiB
Python

#!/usr/bin/env python3
import sys
import struct
def align(num, alignment):
if num % alignment != 0:
num += (alignment - num % alignment)
return num
def process_file(input, output):
with open(input, 'rb') as fin:
content = bytearray(fin.read())
align_value = 512
padded_length = align(len(content), align_value)
# pad file to actual length
content += b'\x00' * (padded_length - len(content))
struct_format = '<L8sLL'
(instruction, magic, checksum, length) = struct.unpack_from(struct_format, content)
if magic != b'eGON.BT0':
print("Magic is invalid:", magic)
return 2
checksum = 0x5F0A6C39
length = align(length, align_value)
struct.pack_into(struct_format, content, 0, instruction, magic, checksum, length)
checksum = 0
for i in range(0, length, 4):
(n, ) = struct.unpack_from('<L', content, i)
checksum += n
checksum %= 4294967296
struct.pack_into(struct_format, content, 0, instruction, magic, checksum, length)
with open(output, 'wb') as fout:
fout.write(content)
return 0
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Usage: mksunxi.py input.bin output.bin")
exit(1)
exit(process_file(sys.argv[1], sys.argv[2]))