uzbek-plus/linux/b4b1/b4b1.sh
q 105bef466a Project Aurora: mainline ARM64 Linux on JZ08AU (MSM8916) LTE modem
Sanitized research log, build/reproducibility docs, DTS, kernel configs,
patches, initramfs sources, bootchain migration plans and test logs.
B5 direct boot PASS; B6 modem lifecycle in progress.
No dumps, NV/EFS, vendor firmware or device identifiers included.
2026-09-30 17:23:18 +03:00

43 lines
3.4 KiB
Bash

#!/bin/sh
# B4b1: BAM-DMUX observation. The only state-changing QMI command allowed is the B4a one
# (--dms-set-operating-mode=online), and only if the mode is not already online.
# No WDA/WDS, no bind, no bearer, no IP address. One wwan0 up/down cycle (mux OPEN/CLOSE only).
D=/dev/wwan0qmi0; Q="qmicli -p -d $D"; O=/tmp/b4b1
t() { cut -d' ' -f1 /proc/uptime; }
g() { echo "### $(t) $*"; timeout 30 $Q "$@" 2>&1; echo "### rc=$?"; }
nv() { for want in modemst1 modemst2 fsg fsc persist; do for p in /sys/class/block/mmcblk0p*; do
[ "$(sed -n 's/^PARTNAME=//p' $p/uevent)" = "$want" ] && echo "$want $(sha256sum /dev/$(basename $p) | cut -d' ' -f1)"; done; done; }
B=$(ls -d /sys/bus/platform/devices/*bam-dmux* 2>/dev/null | head -1)
pm() { echo "### $(t) PM dev=$B drv=$(basename $(readlink $B/driver) 2>/dev/null) status=$(cat $B/power/runtime_status) control=$(cat $B/power/control) autosuspend_ms=$(cat $B/power/autosuspend_delay_ms) active_ms=$(cat $B/power/runtime_active_time) suspended_ms=$(cat $B/power/runtime_suspended_time) usage=$(cat $B/power/runtime_usage 2>/dev/null)"; }
nets() { echo "### $(t) NET"; for nd in /sys/class/net/*; do echo "$(basename $nd) flags=$(cat $nd/flags) oper=$(cat $nd/operstate) type=$(cat $nd/type) mtu=$(cat $nd/mtu)"; done; ip link 2>&1; }
dm() { echo "### $(t) DMESG bam/wwan/resume/remoteproc"; dmesg | grep -iE "bam|wwan|resume|remoteproc|q6v5|dmux|Oops|panic|fatal" | tail -30; }
mkdir -p $O
nv > $O/nv-before.txt; cat /sys/block/mmcblk0/stat > $O/stat-before.txt
{ g --dms-get-operating-mode; } > $O/mode-initial.txt
if ! grep -q "Mode: 'online'" $O/mode-initial.txt; then
{ echo "### $(t) SET --dms-set-operating-mode=online"; timeout 30 $Q --dms-set-operating-mode=online 2>&1; echo "### rc=$?"; } > $O/set.txt
grep -q "^### rc=0" $O/set.txt || { echo B4B1-STOPPED-SET; exit 1; }
else echo "already online, no SET" > $O/set.txt; fi
# wait for automatic registration (GET only, <=90 s)
: > $O/reg.txt; for i in $(seq 1 30); do g --nas-get-serving-system >> $O/reg.txt; tail -20 $O/reg.txt | grep -q "Registration state: 'registered'" && break; sleep 3; done
# BAM-DMUX observation ~5 min (PM/net/dmesg every 30 s, QMI GET every 60 s)
: > $O/obs.txt; t0=$(cut -d. -f1 /proc/uptime); n=0
while [ $(( $(cut -d. -f1 /proc/uptime) - t0 )) -lt 300 ]; do
{ pm; nets; } >> $O/obs.txt
[ $((n % 2)) = 0 ] && { g --dms-get-operating-mode; g --nas-get-serving-system; g --nas-get-signal-info; cat /sys/class/remoteproc/remoteproc0/state; } >> $O/obs.txt
n=$((n+1)); sleep 30
done
dm > $O/dmesg-pre-updown.txt
# single wwan0 up/down cycle (no IP, no bearer)
{ pm; echo "### $(t) ip link show wwan0"; ip link show wwan0 2>&1
echo "### $(t) ip link set wwan0 up"; ip link set wwan0 up 2>&1; echo "rc=$?"; sleep 2; pm; ip link show wwan0 2>&1
sleep 10; pm
echo "### $(t) ip link set wwan0 down"; ip link set wwan0 down 2>&1; echo "rc=$?"; sleep 2; pm; ip link show wwan0 2>&1
sleep 30; pm; } > $O/updown.txt 2>&1
dm > $O/dmesg-post-updown.txt
# QMI regression (GET only)
{ g --dms-get-operating-mode; g --uim-get-card-status; g --nas-get-serving-system; g --nas-get-signal-info; cat /sys/class/remoteproc/remoteproc0/state; } > $O/qmi-final.txt
nv > $O/nv-after.txt; cat /sys/block/mmcblk0/stat > $O/stat-after.txt
cp /tmp/rmtfs.log $O/rmtfs.log; dmesg > $O/dmesg-full.txt
cmp -s $O/nv-before.txt $O/nv-after.txt && echo "NV BEFORE==AFTER" > $O/nv-result.txt || echo "NV DIFFERENT" > $O/nv-result.txt
tar -C /tmp -cf /tmp/b4b1.tar b4b1; echo B4B1-DONE