| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #!/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]))
|