10 lines
800 B
Python
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))
|