From cdcbd32398d7caf8b5a417aa9d54ea8137c2fbdd Mon Sep 17 00:00:00 2001 From: SashegDev Date: Fri, 11 Sep 2026 08:16:25 +0000 Subject: [PATCH] mkimage: --user content fill (keeps GPT) --- tools/mkimage.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tools/mkimage.py b/tools/mkimage.py index adea923..825e691 100644 --- a/tools/mkimage.py +++ b/tools/mkimage.py @@ -70,12 +70,19 @@ def gpt_header(nent, lba_backup, disk_guid, crc_entries, cur=1): def main(): - out = sys.argv[1] if len(sys.argv) > 1 else "images/emmc.img" + out = sys.argv[-1] if not sys.argv[-1].startswith("-") else "images/emmc.img" + user_src = None + if "--user" in sys.argv: + user_src = sys.argv[sys.argv.index("--user") + 1] pre = (BOOT_MB * 2 + RPMB_MB) * 1024 * 1024 total = FILE_SIZE assert pre + USER_SECTORS * SECTOR <= total print(f"[mkimage] {out}: boot {BOOT_MB}M x2 + rpmb {RPMB_MB}M + " - f"user {USER_SECTORS} sectors") + f"user {USER_SECTORS} sectors" + + (f" + content {user_src}" if user_src else " (zero)")) + with open(out, "wb") as f: + f.truncate(total) # sparse + uoff = pre with open(out, "wb") as f: f.truncate(total) # sparse uoff = pre @@ -106,6 +113,19 @@ def main(): f.seek(uoff + (USER_SECTORS - 1) * SECTOR) f.write(gpt_header(128, 1, disk, crc_e, cur=USER_SECTORS - 1)) + if user_src: + print(f"[mkimage] copying User content (keeps GPT in place)...") + with open(user_src, "rb") as u: + # copy in 128M chunks, skipping GPT areas (LBA 0..33, backup) + u.seek(34 * SECTOR) + f.seek(uoff + 34 * SECTOR) + left = (USER_SECTORS - 33) * SECTOR - 34 * SECTOR + while left > 0: + d = u.read(min(left, 134217728)) + if not d: + break + f.write(d) + left -= len(d) print(f"[mkimage] OK: {len(PARTS)} partitions, primary+backup GPT, CRC ok")