uzbek-plus/b6p/mkbootimg.py

10 lines
800 B
Python

#!/usr/bin/env python3
# Minimal Android boot.img v0 writer (same layout as golden aurora-mm1.img: page 2048, base-relative addrs, sha1 id, zero padding).
# usage: mkbootimg.py KERNEL RAMDISK CMDLINE_FILE OUT
import struct, sys, hashlib
k = open(sys.argv[1], 'rb').read(); r = open(sys.argv[2], 'rb').read(); cmd = open(sys.argv[3], 'rb').read().rstrip(b'\n'); PS = 2048
h = hashlib.sha1(); [h.update(x) for x in (k, struct.pack('<I', len(k)), r, struct.pack('<I', len(r)), b'', struct.pack('<I', 0))]
hdr = b'ANDROID!' + struct.pack('<10I', len(k), 0x80080000, len(r), 0x82000000, 0, 0, 0x81e00000, PS, 0, 0) + b'\0' * 16
hdr += cmd.ljust(512, b'\0') + h.digest().ljust(32, b'\0') + b'\0' * 1024
pad = lambda b: b + b'\0' * ((-len(b)) % PS)
open(sys.argv[4], 'wb').write(pad(hdr) + pad(k) + pad(r))