62 lines
5.3 KiB
Markdown
62 lines
5.3 KiB
Markdown
# 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 start` then `echo 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.
|