#!/bin/bash # B12R — the ONLY write: cache := B12R candidate (= B12Q + kernel 7.2.7-aurora-b12: b10b5 production config + nf_tables/NAT, same source tree). # Run on 480s ONLY after explicit GO. Derived 1:1 from b12/b12q/B12Q-write.sh (B12Q_CACHE_WRITE_VERIFIED 2026-10-04); changed: image/hashes, # rollback refs, log dir. The pre-write readback of the live cache (must be B12Q 59272cd3) is kept as backup. # Entry: HW EDL (battery on, D+->GND, plug USB, release). Never `edl reset`. Stops at first failed gate. cd ~/doc/modem/jz08-aurora || exit 1 L=firehose/007050e100000000_394a2e47cf830150_fhprg_peek.bin O=logs/b12/b12r/W ; A3=logs/b5a/A3 ; P=logs/b5a/A4pre ; mkdir -p $O NEW=b12/b12r/cache/cache-extlinux-b12r.img ; NEW_SHA=e85d862e463aa4affd7ec1cea9b1f2c7f765bb08e2a6bdce4af9539278f80d33 OLD_SHA=59272cd3fb45a9388934110b345a0e320d62a3199b52aa0c47ec10eb79352aae # current cache = B12Q extlinux BOOT_SHA=e9579f33c7304cd47f487f2b61cd9226dc04fd3a63775d62b4b95fc15bd3ebff ABOOT_SHA=15208dbb4feafccd72d2b06db5714cd746c216701f0ef8822c58bb47105d37c4 # aboot = lk1st-b9l (B9L-PERSIST) die(){ echo "STOP: $*"; exit 1; } sha(){ sha256sum "$1" | cut -d" " -f1; } E(){ edl --loader=$L "$@"; } echo "== G0 inputs" [ "$(sha $L)" = 53f193500c03248f0d671ab57bfe9ca8a42967e97f28403294b4b3f854075aca ] || die loader [ "$(sha $NEW)" = $NEW_SHA ] && [ $(stat -c %s $NEW) = 134217728 ] || die candidate [ "$(sha b12/b12q/cache/cache-extlinux-b12q.img)" = $OLD_SHA ] || die rollback-image [ "$(sha logs/b12/b12q/W/11-cache-readback.bin)" = $OLD_SHA ] || die b12q-readback-backup lsusb | grep -q 05c6:9008 || die "no 9008" echo "== G1 identity + geometry + baseline" E printgpt > $O/00-printgpt.log 2>&1 || die printgpt grep -aq "Serial: *0x" $O/00-printgpt.log || grep -aq "Mode detected: firehose" $O/00-printgpt.log || die serial grep -a "^cache:" $O/00-printgpt.log | grep -q "Offset 0x000000004118c000, Length 0x0000000008000000" || die cache-geometry E rs 0 34 $O/pre-gptp.bin >/dev/null 2>&1; cmp $O/pre-gptp.bin $A3/gpt-primary-34.bin || die gpt-changed E r boot $O/pre-boot.bin >/dev/null 2>&1; [ "$(sha $O/pre-boot.bin)" = $BOOT_SHA ] || die boot-not-emmc1 E r aboot $O/pre-aboot.bin >/dev/null 2>&1; [ "$(sha $O/pre-aboot.bin)" = $ABOOT_SHA ] || die aboot-not-b9l E r cache $O/pre-cache.bin >/dev/null 2>&1; [ "$(sha $O/pre-cache.bin)" = $OLD_SHA ] || die cache-not-backup echo "== W cache := candidate (LBA 2133088, 262144 sectors)" E w cache $NEW > $O/10-cache-write.log 2>&1; echo "rc=$?"; grep -a "Wrote" $O/10-cache-write.log E r cache $O/11-cache-readback.bin > $O/11-cache-readback.log 2>&1 || die readback-rc sha256sum $NEW $O/11-cache-readback.bin cmp $NEW $O/11-cache-readback.bin || die "CACHE READBACK MISMATCH — do NOT reboot; run b12/b12r/B12R-rollback.sh" echo CACHE_MATCH echo "== V everything else unchanged" E rs 0 34 $O/post-gptp.bin >/dev/null 2>&1; cmp $O/post-gptp.bin $A3/gpt-primary-34.bin || die gptp E rs 7634911 33 $O/post-gptb.bin >/dev/null 2>&1; cmp $O/post-gptb.bin $A3/gpt-backup-33.bin || die gptb E rs 305184 1024 $O/post-tzbak.bin >/dev/null 2>&1; cmp $O/post-tzbak.bin $A3/tzbak-305184.bin || die tzbak E r boot $O/post-boot.bin >/dev/null 2>&1; [ "$(sha $O/post-boot.bin)" = $BOOT_SHA ] || die boot E r aboot $O/post-aboot.bin >/dev/null 2>&1; [ "$(sha $O/post-aboot.bin)" = $ABOOT_SHA ] || die aboot for p in sbl1 rpm tz hyp recovery modemst1 modemst2 fsg fsc persist; do E r $p $O/post-$p.bin >/dev/null 2>&1; cmp $O/post-$p.bin $A3/$p.bin || die "$p changed"; echo "$p == A3" done for p in modem system; do E r $p $O/post-$p.bin >/dev/null 2>&1; cmp $O/post-$p.bin $P/$p.bin || die "$p changed"; echo "$p == A4pre"; rm -f $O/post-$p.bin done E rs 2428000 8 $O/post-userdata-sb.bin >/dev/null 2>&1 [ "$(dd if=$O/post-userdata-sb.bin bs=1 skip=1080 count=2 2>/dev/null | od -An -tx1 | tr -d ' \n')" = 53ef ] && [ "$(dd if=$O/post-userdata-sb.bin bs=1 skip=1144 count=16 2>/dev/null | tr -d '\000')" = aurora-alpine ] || die "userdata superblock is not ext4 aurora-alpine" echo "userdata = ext4 aurora-alpine (superblock)" (cd $O && sha256sum *.bin > SHA256SUMS) echo "B12R_CACHE_WRITE_VERIFIED — power off fully (USB, then battery) before first boot"