import re,glob,os,sys # per SBL1 boot: B-times and D-deltas of key markers keys=["SBL1, Start","pm_device_init","boot_flash_init","boot_config_data_table_init","sbl1_ddr_set_params","Pre_DDR_clock_init","pm_driver_init","batt_voltage","clock_init","QSEE Execution","SBL1, End","SBL1, Delta"] for f in sorted(glob.glob(sys.argv[1]+"/*.log")): L=open(f,errors="replace").read().splitlines() cur=None def flush(): if cur: print(os.path.basename(f)[:26], cur["ln"], cur["ts"], " ".join(f"{k}={v}" for k,v in cur["v"].items()), "| next:", cur["after"][:90]) for i,l in enumerate(L): if "Format: Log Type" in l: flush(); cur={"ln":i+1,"ts":l[:12],"v":{},"after":""} continue if not cur: continue m=re.search(r"([BD]) -\s+(\d+) - (.*?)(, (Start|Delta|End))?\s*$",l) if m: name=m[3]; kind=m[5] or "" short={"SBL1":"sbl","pm_device_init":"pmdev","boot_flash_init":"flash","boot_config_data_table_init":"cdt","sbl1_ddr_set_params":"ddr","Pre_DDR_clock_init":"preddr","pm_driver_init":"pmdrv","clock_init":"clk","QSEE Execution":"qsee"}.get(name,None) if name.startswith("batt_voltage"): cur["v"]["batt"]=name.split("=")[1]; cur["v"]["tbatt"]=m[2] elif short: cur["v"][short+("S" if kind=="Start" else "E" if kind=="End" else "d")]=m[2] elif "UART_DM" in l or "welcome to lk" in l: if not cur["after"]: cur["after"]=l[13:] flush()