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).
31 lines
1.8 KiB
Python
31 lines
1.8 KiB
Python
import re,glob,os,sys
|
|
STAGES=[("DDR-HANG",None),("sbl_end","SBL1, End"),("lk","welcome to lk"),("target_init","target_init\\(\\)"),("mmc","MMC card: "),("fastboot","fastboot: processing|fastboot_init"),("jump","Jumping to kernel|booting linux @"),("linux","Booting Linux on physical")]
|
|
rows=[]
|
|
for f in sorted(glob.glob(sys.argv[1]+"/*.log")):
|
|
L=open(f,errors="replace").read().splitlines()
|
|
starts=[i for i,l in enumerate(L) if "Format: Log Type" in l]
|
|
for n,s in enumerate(starts):
|
|
e=starts[n+1] if n+1<len(starts) else len(L)
|
|
seg=L[s:e]; txt="\n".join(seg)
|
|
g=lambda rx: (re.search(rx,txt) or [None,None])
|
|
sblS=g(r"B -\s+(\d+) - SBL1, Start")[1]; pmd=g(r"D -\s+(\d+) - pm_device_init")[1]
|
|
pmdrv=g(r"D -\s+(\d+) - pm_driver_init")[1]; batt=g(r"batt_voltage=(\d+)")[1]; sbld=g(r"D -\s+(\d+) - SBL1, Delta")[1]
|
|
stage="ddr" if "Pre_DDR_clock_init" in txt else "?"
|
|
if "pm_driver_init" in txt: stage="clk"
|
|
for name,rx in STAGES[1:]:
|
|
if re.search(rx,txt): stage=name
|
|
# previous context: last non-garbage line before start
|
|
prev=""
|
|
for j in range(s-1,max(0,s-40),-1):
|
|
t=L[j][13:]
|
|
if re.search(r"[A-Za-z]{3}",t) and "Format" not in t: prev=L[j][:12]+" "+t.strip()[:70]; break
|
|
# linux uptime at end
|
|
kt=None
|
|
for l in seg[::-1]:
|
|
m=re.match(r"\S+ \[\s*(\d+\.\d+)\]",l)
|
|
if m: kt=float(m[1]); break
|
|
# stock vs new chain
|
|
chain="stock" if "Android Bootloader" in txt and ("pm8x41_get_is_cold_boot" in txt or "Welcome to" in txt) else ""
|
|
rows.append((os.path.basename(f)[:22],L[s][:8],sblS,pmd,pmdrv,sbld,batt,stage,kt,prev))
|
|
for r in rows:
|
|
print("%-22s %s sblS=%-6s pmdev=%-5s pmdrv=%-5s sbl=%-6s batt=%-4s %-11s kt=%-9s prev: %s"%r)
|