uzbek-plus/logs/b4b2/b4b2.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

58 lines
5 KiB
Bash

#!/bin/sh
# B4b2: direct qmicli data test (no ModemManager). Sequence = JZ02 MM sequence:
# WDA raw-ip -> WDS client + Bind Data Port a2-mux-rmnet0 -> start-network (APN internet, IPv4, no auth) -> settings -> wwan0.
# Host routes only (no default route change). Single start-network, no retries. Clean stop at the end.
D=/dev/wwan0qmi0; Q="qmicli -p -d $D"; O=/tmp/b4b2; mkdir -p $O
t() { cut -d' ' -f1 /proc/uptime; }
g() { echo "### $(t) $*"; timeout 40 $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=/sys/bus/platform/devices/4080000.remoteproc:bam-dmux
pm() { echo "### $(t) PM status=$(cat $B/power/runtime_status) active_ms=$(cat $B/power/runtime_active_time) rproc=$(cat /sys/class/remoteproc/remoteproc0/state)"; }
cnt() { echo "### $(t) CNT $(for f in rx_packets rx_bytes tx_packets tx_bytes; do printf '%s=%s ' $f $(cat /sys/class/net/wwan0/statistics/$f); done)"; }
L=$O/log.txt; : > $L
# --- precheck
{ g --dms-get-operating-mode; g --nas-get-serving-system; g --nas-get-signal-info; g --uim-get-card-status; pm; ip link show wwan0; } > $O/pre.txt 2>&1
nv > $O/nv-before.txt; cat /sys/block/mmcblk0/stat > $O/stat-before.txt; wc -l < /tmp/rmtfs.log > $O/rmtfs-offset.txt
grep -q "Mode: 'online'" $O/pre.txt && grep -q "Registration state: 'registered'" $O/pre.txt && grep -q "PS: 'attached'" $O/pre.txt \
&& grep -q "Application state: 'ready'" $O/pre.txt && grep -q "wwan0: <POINTOPOINT,NOARP>" $O/pre.txt || { echo "PRECHECK FAILED" >> $L; echo B4B2-STOPPED; exit 1; }
# --- WDA raw-ip (only link-layer-protocol)
{ g --wda-set-data-format="link-layer-protocol=raw-ip"; g --wda-get-data-format; } > $O/wda.txt
grep -q "Link layer protocol: 'raw-ip'" $O/wda.txt || { echo "WDA raw-ip NOT confirmed" >> $L; echo B4B2-STOPPED; exit 1; }
# --- WDS client + bind a2-mux-rmnet0 (keep CID)
g --wds-bind-data-port=a2-mux-rmnet0 --client-no-release-cid > $O/bind.txt
CID=$(sed -n "s/.*CID: '\([0-9]*\)'.*/\1/p" $O/bind.txt | head -1)
grep -q "^### rc=0" $O/bind.txt && [ -n "$CID" ] || { echo "BIND FAILED (cid='$CID')" >> $L; [ -n "$CID" ] && g --wds-noop --client-cid=$CID >> $O/bind.txt; echo B4B2-STOPPED; exit 1; }
echo "CID=$CID" >> $L
# --- single start-network (APN internet, IPv4, no user/pass/auth)
{ pm; g --client-cid=$CID --client-no-release-cid --wds-start-network="apn=internet,ip-type=ipv4"; pm; } > $O/start.txt
PDH=$(sed -n "s/.*Packet data handle: '\([0-9]*\)'.*/\1/p" $O/start.txt | head -1)
grep -q "^### rc=0" $O/start.txt && [ -n "$PDH" ] || { echo "START FAILED" >> $L; g --wds-noop --client-cid=$CID >> $O/start.txt; echo B4B2-STOPPED; exit 1; }
echo "PDH=$PDH" >> $L
# --- current settings / status (same client)
{ g --client-cid=$CID --client-no-release-cid --wds-get-current-settings; g --client-cid=$CID --client-no-release-cid --wds-get-packet-service-status; } > $O/settings.txt
v() { sed -n "s/.*$1: '\{0,1\}\([0-9.]*\)'\{0,1\}.*/\1/p" $O/settings.txt | head -1; }
A=$(v "IPv4 address"); MASK=$(v "IPv4 subnet mask"); GW=$(v "IPv4 gateway address"); DNS1=$(v "IPv4 primary DNS"); DNS2=$(v "IPv4 secondary DNS"); MTU=$(v "MTU")
PF=$(ipcalc -p $A $MASK 2>/dev/null | cut -d= -f2)
echo "A=$A MASK=$MASK PF=$PF GW=$GW DNS1=$DNS1 DNS2=$DNS2 MTU=$MTU" >> $L
if [ -n "$A" ] && [ -n "$PF" ]; then
# --- configure wwan0 (address + host routes only)
{ cnt; ip addr add $A/$PF dev wwan0; echo "addr rc=$?"; [ -n "$MTU" ] && ip link set wwan0 mtu $MTU; ip link set wwan0 up; echo "up rc=$?"; sleep 2; pm
for h in 77.88.8.8 1.1.1.1 8.8.8.8 $DNS1 $DNS2; do ip route add $h/32 dev wwan0 src $A 2>&1; done
ip addr show wwan0; ip route; } > $O/cfg.txt 2>&1
# --- IP ping tests (no DNS)
{ for h in 77.88.8.8 1.1.1.1 8.8.8.8; do echo "### $(t) ping $h"; ping -c 5 -W 3 $h 2>&1; pm; done; cnt; } > $O/ping.txt 2>&1
# --- DNS via operator DNS (after IP PASS)
{ for s in $DNS1 $DNS2; do echo "### $(t) nslookup ya.ru $s"; nslookup ya.ru $s 2>&1; done; pm; cnt; } > $O/dns.txt 2>&1
fi
# --- clean disconnect: stop-network with same handle/client (releases CID), verify, unconfigure
{ g --client-cid=$CID --wds-stop-network=$PDH; g --wds-get-packet-service-status; pm
for h in 77.88.8.8 1.1.1.1 8.8.8.8 $DNS1 $DNS2; do ip route del $h/32 dev wwan0 2>/dev/null; done
ip addr flush dev wwan0; ip link set wwan0 down; echo "down rc=$?"; ip link show wwan0; sleep 10; pm; } > $O/stop.txt 2>&1
# --- post
{ g --dms-get-operating-mode; g --nas-get-serving-system; g --nas-get-signal-info; g --uim-get-card-status; pm; ip route; } > $O/post.txt 2>&1
nv > $O/nv-after.txt; cat /sys/block/mmcblk0/stat > $O/stat-after.txt
tail -n +$(( $(cat $O/rmtfs-offset.txt) + 1 )) /tmp/rmtfs.log > $O/rmtfs-delta.log
dmesg | grep -iE "bam|dmux|wwan|resume|-110|-22|Oops|panic|fatal|remoteproc|q6v5" > $O/dmesg.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/b4b2.tar b4b2; echo B4B2-DONE