B7A: QMI DMS time vs VNIIFTRI NTP (DMS = UTC - 0.28 s, sigma 1 ms; NITZ = DMS truncated to 1 s). B7B: a 1970 -> 2026 date -s step is harmless for the modem stack. B7C: aurora-modem probes DMS/NITZ along the start flow and steps CLOCK_REALTIME once at the first valid sample (REG registered/attached), never RTC; background SNTP check (query only) after START OK. 3/3 class-A cold boots PASS (residual +0.04/+0.36/+0.84 s), cache 14fe453a written (B7C_WRITE_VERIFIED) and verified by a normal power-on (V1, +0.26 s). Also publishes the prerequisite R2 (boot-hang / lk eMMC investigation, T4 telnet baseline that B7C builds on) and R3 (autonomous cold boot, NCM loss) material, and extends tools/publish-sanitize.py to r2/, r3/, b7/. Binary images, initramfs, busybox and raw logs stay out (see b7/*/SHA256SUMS).
40 lines
3.5 KiB
Markdown
40 lines
3.5 KiB
Markdown
# B7C — automatic system time bootstrap from QMI DMS (RAM test image): **PASS 3/3 class-A cold boots**
|
||
|
||
Image b7/b7c/out/aurora-mm1-b7c.img (d0c4cc00…) = T4 initramfs + overlay (aurora-modem 932c9ff2 with time bootstrap, build-epoch 1790935600,
|
||
Alpine busybox-static a6bb1e6e for `ntpd -w`). Booted only by RESET-held power-on + `fastboot boot`. **No cache/eMMC write.**
|
||
|
||
## Counted class-A cold boots
|
||
| run | RTC at Linux boot | first VALID DMS | TIME SET (uptime) | DMS−NITZ | START OK | SNTP residual (clock behind VNIIFTRI) |
|
||
|---|---|---|---|---|---|---|
|
||
| c5 | 6 s | REG registered/attached | 27.46 s | +0.76 s | 78.8 s | **+0.041 s** |
|
||
| c6 | 5 s | REG registered/attached | 24.44 s | +0.31 s | 66.0 s | **+0.356 s** |
|
||
| c7 (c7r)* | 34 s | REG registered/attached (after one registration-denied) | 69.64 s | +0.08 s | 122.2 s | **+0.843 s** |
|
||
\* c7: first `fastboot boot` failed with a USB write error (rc=1); repeated at once from the same fastboot session (one SBL1 start, single PMIC POR,
|
||
RTC counted continuously → class A; the extra ~30 s were spent in lk fastboot).
|
||
|
||
All three: probes before registration INVALID (year<2026), set once, never backwards, no re-set, START OK, bearer up, LTE ping 3/3, adjtimex status UNSYNC,
|
||
RTC untouched, eMMC writes 0, dmesg-errs 0, no FAIL/rollback. SNTP stage ran in background after START OK and did not delay it.
|
||
|
||
## Findings
|
||
1. **DMS before registration = modem uptime counted from 1980-01-06** (3.2 s at QMI_READY, …) in every run (class A and B). It becomes real UTC exactly at
|
||
registered/attached. NITZ (`--nas-get-network-time`) can return a bogus **1980-01-06** value before that (c4b, c5, c7). The year/build-floor gate rejected
|
||
all of them. TIME_REQUIRE_NITZ=1 costs nothing: DMS and real NITZ become valid at the same moment.
|
||
2. Time is set 20–70 s after power-on (= registration time), before ModemManager/bearer. No USB host is involved (only for `fastboot boot` of the test image).
|
||
3. Residual vs VNIIFTRI over all 6 boots with data: +0.04, +0.19, +0.36, +0.45, +0.58, +0.84 s (always behind, < 1 s). This matches DMS being set from
|
||
whole-second NITZ at registration: a per-boot error in [0, 1) s, not a fixed −0.28 s. Meets the B7C limit (≤ ~1 s). SNTP threshold 1 s → never stepped.
|
||
4. Kernel CONFIG_RTC_SYSTOHC=y is harmless as long as nothing clears STA_UNSYNC (date -s does not; ntpd is used only with -w).
|
||
|
||
## Not counted / incidents (details in cN/)
|
||
c1, c2b, c4b: functional PASS, class B. c2: battery fell out ~46 s after power-on (silent reset). c3: 14 s power-off + UART wire off + repeated resets.
|
||
c4: three starts in 47 s (no fastboot feedback). Driver bugs found and fixed during the series: wait matched its own telnet echo (c1), "NCM ok" after timeout (c2),
|
||
booting a board already in fastboot (c2b); added RTC class print and `now`/`collect` modes.
|
||
|
||
## Open / for later (not done)
|
||
- Sub-second SNTP correction (aligned step like tset) would bring the residual to ~10 ms; currently |offset| < 1 s is only logged.
|
||
- Pre-existing B6P quirk: modem.conf ROUTES overrides the route-list file path (file "/77.88.8.8 1.1.1.1"); cleanup works.
|
||
- Persistent integration = new cache image + eMMC write: only with a separate GO.
|
||
|
||
## Persistent cache (2026-10-02)
|
||
Written with GO: cache = cache-extlinux-b7c.img 14fe453a (B7C_WRITE_VERIFIED, logs/b7/b7c/W/). First normal power-on V1 (class A, RTC 3 s):
|
||
lk "Trying to boot 'b7c'", TIME SET at uptime 21.44 s, START OK 73.9 s, SNTP residual +0.262 s, eMMC writes 0. Details cV1/V1-RESULT.md.
|
||
Rollback: b7/b7c/cache/B7C-rollback.sh (→ T4 9d3bc890).
|