uzbek-plus/logs/b7/b7b/B7B-RESULT.md
q 8d7721c775 B7: add network time bootstrap and persistent B7C cache
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).
2026-10-02 20:18:25 +03:00

2.9 KiB
Raw Blame History

B7B — one system clock step 1970 → QMI DMS UTC on the live modem: PASS

2026-10-02, same boot as R3A/R3B/B7A (uptime ≈ 2925–3130 s). No eMMC write (writes 0), no RTC write, image unchanged, no reboot. Only RAM files in /tmp/b7b and one temporary /32 route to ntp1.vniiftri.ru (89.109.251.21), removed afterwards. Script b7/b7b/b7b-run.sh (sha 58ed0d00…), detached on the board.

Time-source checks (b7b-time-source.txt)

3 DMS samples + 1 NITZ, each bracketed by adjtimex µs timestamps. All PASS → VERDICT=GO: values present; DMS ≥ image build 2026-10-02T08:09:01Z; year ≥ 2026; < build + 5 y (1980/2017 excluded); 3 samples consistent (spread 0.8 ms); |DMS − NITZ| = 0.54 s < 2. Dry runs first (logs dry/): run 1 was stopped by the gate itself, because my parser bug gave DMS = 1980-01-06 → STOP, clock not touched. Fixed, run 2 = GO (dry).

Step (b7b-actions.txt)

date -u -s @1790934303 (09:45:03 UTC), started at a local instant chosen so that the new clock lands on a whole DMS second (usleep 1.386 s), rc=0. Clock 2929.968714 → 1790934303.002845. No hwclock. adjtimex stays status 64 (UNSYNC), offset 0, so the kernel 11-min RTC sync does not engage. RTC since_epoch kept counting from boot (2926 → 2929 → … 3112): RTC untouched. Right after the step: DMS − clock = +14.5/+14.2/+14.0 ms (date -s exec ran ≈ 12 ms after the target instant).

Stack after the step (b7b-post.txt, b7b-observe.txt, b7b-host-checks.txt)

  • PIDs unchanged pre/post/all of the observation: ModemManager 1655, rmtfs 1056, qmi-proxy 1701, telnetd 615, udevd 1613, dbus 1640, polkitd 1644.
  • 36 samples over 182 s (every 5 s): state BEARER_CONNECTED, wwan0 10.41.212.24/28, LTE ping 77.88.8.8 36/36 ok, host 172.16.42.2 up 36/36; mm connected/home, bearer1 connected=yes in all 13 mmcli samples.
  • lifecycle.log 35 lines before and after (no FAIL/rollback/error). dmesg: only the three [b7b] marker lines after the step, no kernel message. ModemManager log: no new lines at all after the step. dmesg-errs 0.
  • Host: telnet + ping 172.16.42.1 OK on 15/15 checks during the run.

Residual vs NTP (b7b-ntp-check.txt, ntpd -w query only, ntp1.vniiftri.ru)

4 replies: offset +0.2922 / +0.3001 / +0.3002 / +0.2985 s (RTT 60–75 ms). Best (min delay) = +0.292 s: the system clock is 0.29 s slow. That matches B7A: DMS bias −0.280 s plus the ≈ 0.013 s step latency (DMS − clock = +13…14 ms at the end too, so no drift in 200 s). Route removed, table identical to before.

Verdict

PASS on every criterion: the clock is current (2026-10-02, −0.29 s vs VNIIFTRI), the modem stack did not react to the 56-year forward step, bearer/wwan0 stayed up, MM/rmtfs were not restarted, LTE ping worked, no new FAIL/rollback/error, residual ≈ 0.3 s as expected. Not covered (B7C): DMS validity before registration on a class-A cold boot; ntpd in the image; integrating the step into the boot flow.