5.3 KiB
B12Q — Alpine as primary rootfs (2026-10-04) — RAM VALIDATED
Architecture
lk2nd/cache → kernel 7.2.7-aurora-b10b5 (unchanged) + prod DTB e47762d1 (unchanged) + B9C cmdline (unchanged)
→ initramfs stage0 (b12/b12q/rootfs/init): eMMC RO → userdata p27 checks (PARTNAME, geometry, ext4 magic, label aurora-alpine)
→ lift disk RO flag + RW p27 only (every other partition + boot0/1 verified RO) → e2fsck -p → mount → validate (/sbin/init, /sbin/openrc,
/etc/alpine-release, /etc/aurora/primary-root, dev/proc/sys/run/tmp) → boot counter → mount --move dev/sys/proc → switch_root → Alpine /sbin/init
(busybox init from Alpine 3.24.2, inittab → OpenRC 0.63.2).
Rescue: aurora.alpine=off, any check failure, or ≥3 unconfirmed boots (/var/lib/aurora/boot-attempts, reset by aurora-bootok) → relock → exec /init.lfs
(= byte-identical B9C/B10 LFS init, never mounts p27). Reason printed to UART + fbcon via kmsg (ALPINE PRIMARY ROOT NOT USED: …).
Audit (dependencies of the LFS boot)
- All non-Aurora userspace in the LFS initramfs = Alpine packages; every version exists in v3.24 (only pcre2 10.48→10.49, libcrypto 3.5.8→3.5.9 differ). rmtfs, libqrtr, iw, ModemManager, qmi-proxy, libqmi from v3.24 packages are bit-identical to the initramfs files.
- Aurora-specific: aurora-modem (B12P gate), aurora-wifi, aurora-display + service wrappers, /etc/aurora/{modem,wifi}.conf, linebuf.so (rmtfs LD_PRELOAD), /usr/libexec/aurora/{busybox (ntpd), wifi/hostapd bundle}, WCNSS NV, panel firmware, debug tools.
- Daemons udevd/dbus/polkitd/ModemManager are started by the modem controller itself (unchanged; OpenRC services for them installed but NOT enabled).
- Busybox applets used by the scripts are all in Alpine busybox; telnetd from busybox-extras. No kernel modules (CONFIG_MODULES=n).
- Init duties moved to OpenRC: devfs, sysfs (sysinit); hostname, aurora-ro (RO policy + /tmp tmpfs), aurora-firmware (B1 modem FAT RO + fw path), aurora-ncm (USB gadget 18d1:d001 + 172.16.42.1 + telnetd) (boot); aurora-display, aurora-modem, aurora-wifi, aurora-bootok (default). inittab: getty tty1, root shell on ttyMSM0. Time bootstrap stays inside aurora-modem. No syslog (kernel log only) to avoid eMMC writes.
p27 changes (B12Q-2, writes only p27)
44 packages from a local signed-package repo (no network): openrc, busybox-extras, eudev, dbus, polkit, modemmanager(+udev), libqmi, qmi-utils,
libqrtr-glib, rmtfs, hostapd, iw, mobile-broadband-provider-info + deps; package scripts ran natively (messagebus/polkitd users). 150 packages total.
Overlay b12/b12q/alpine-overlay (contains the Wi-Fi PSK — never publish). Installer b12/b12q/install-p27.sh.
RAM tests (fastboot boot, nothing flashed)
| normal1 (aurora-b12q.img a0b66b59) | off1 (aurora.alpine=off) | failtest1 (aurora.b12q.failtest=init) | |
|---|---|---|---|
| / | /dev/mmcblk0p27 ext4 rw | rootfs (initramfs) | rootfs |
| PID1 | /bin/busybox (/sbin/init, Alpine) → OpenRC | /bin/busybox sh /init.lfs | /bin/busybox sh /init.lfs |
| stage0 | fsck clean, switch_root 2.5 s, attempt 1/3, BOOT OK → counter 0 | "aurora.alpine=off … p27 not touched" | fsck clean, "/sbin/init.failtest-missing missing" → rescue, relocked |
| modem / LTE | START OK 71.7 s, ping 4/4 | START OK 72.9 s, ping 4/4 | START OK 72.8 s |
| Wi-Fi AP | 76 s, WCNSS+MSS running | 77 s | 77 s |
| NCM/telnet | OK | OK | OK |
| display | DISPLAY READY, getty tty1 | OK (LFS) | OK (LFS) |
| charger | CHARGING fault none | CHARGING | CHARGING |
| apk | 3.0.8, 150 pkgs, B12P file persisted | – | – |
| eMMC RO | all RO except disk flag + p27 | all 30 RO | all 30 RO |
| eMMC writes | p27 only (51) | 0 | p27 only (52, mount/umount) |
PASS: / = p27, PID1 = Alpine/OpenRC, modem, LTE, Wi-Fi, NCM, display, charger, rescue fallback (off + failtest), eMMC writes outside p27 = 0.
Verdict: B12Q Alpine primary rootfs: RAM VALIDATED.
Persistent candidate (NOT written)
b12/b12q/cache/cache-extlinux-b12q.img 59272cd3 (B12P recipe, initrd 9ade7cff, label b12q). lk2nd emulator: S13 candidate boots
(kernel 8c8bfccb, dtb e47762d1, ramdisk 9ade7cff), S12 current B12P identical, F1/F3 revert. Write: b12/b12q/B12Q-write.sh (expects live cache B12P 98d061ef,
backup kept), rollback b12/b12q/B12Q-rollback.sh → B12P 98d061ef. Needs separate GO.
Notes / open
- Root password locked (tty1 login unusable without one); access = telnet on NCM (no auth, dev) + UART shell. SSH not added yet.
- No default route → apk has no network (router stack next).
- Rescue path: to retry Alpine after 3 failed boots, from LFS rescue
aurora-alpine startthenecho 0 > /alpine/var/lib/aurora/boot-attempts.
Persistent (2026-10-04, GO)
- HW EDL
B12Q-write.sh: B12Q_CACHE_WRITE_VERIFIED — cache 59272cd3 (readback match), backup W/pre-cache.bin = B12P 98d061ef, all other partitions unchanged, userdata superblock aurora-alpine. - cold1 (normal power-on, no RESET): NCM 70 s after observer start, stage0 fsck clean + switch_root 3.1 s (attempt 1/3), BOOT OK 5.4 s, / = p27, PID1 = Alpine init/OpenRC, modem START OK 70.4 s, ping 4/4, AP 74.9 s, DISPLAY READY, charger CHARGING fault none, apk 3.0.8, RW only disk flag + p27, eMMC writes only p27 (32).
- B12Q CLOSED: Alpine is the primary rootfs. Rollback
b12/b12q/B12Q-rollback.sh→ B12P 98d061ef.