• 全新单提交:清除含敏感信息的旧历史(sudo 口令、内网 IP、SSH 密钥路径、热点 SSID、设备 MAC) • 本地开发文档/测试记录/构建脚本全部移入 gitignored 的 devdocs/ 与 scripts/build/(不入库) • 保留:MeowOS 源码(launcher/watchdog/bootmenu/meow_svcd/SDK)、项目规范文档、mips-repo 增补组件:SDK 统一日志+通知 API、meow_svcd 服务管理器、mips-repo 软件仓库
80 lines
4.2 KiB
Bash
80 lines
4.2 KiB
Bash
#!/bin/bash
|
||
# verify_meow_m22.sh — R3 Pro II MeowOS 常驻主界面 + 系统拔营(挂卡/联网)真机验证编排
|
||
#
|
||
# 前提:设备已在 MeowOS 模式(播放器已死)且联网可 SSH;或先在此脚本内确认无播放器。
|
||
# 场景(用户实测 M2.1 三现象 + 拔营):
|
||
# - 现象3:启动即显示应用列表(非播放器死帧/启动图卡屏)→ `shot m22_start`
|
||
# - 现象1:BACK TO PLAYER 显示「重启后返回播放器」提示并留下 → `--sim-exit-tap`
|
||
# - 现象2:无播放器时不备份/不冻结/不 SIGCONT、不恢复死帧 → 全程 logmsg 确认
|
||
# - 拔营:TF 卡自动挂载(ensure_card_mounted)、WiFi 自动联网(ensure_wifi)
|
||
#
|
||
# 用法:./verify_meow_m22.sh <设备IP> [ssh私钥]
|
||
# ./verify_meow_m22.sh <device_ip>
|
||
#
|
||
# 纪律:不 killall(仅已知 pid SIGTERM);禁 SIGUSR1;禁经 hiby_player.sh;
|
||
# 启动前 rm -f /data/recovery_all;本脚本不刷机。
|
||
set -u
|
||
DEV="${1:-<device_ip>}"
|
||
KEY="${2:-$HOME/Project/R3ProII/ssh_keys/<device_key>}"
|
||
ROOT="$HOME/Project/R3ProII"
|
||
LAUNCHER="$ROOT/patch_v2/meow_launcherd/meow_launcherd"
|
||
SSH="ssh -i $KEY -o StrictHostKeyChecking=accept-new -o ConnectTimeout=8"
|
||
SCP="scp -i $KEY -o StrictHostKeyChecking=accept-new"
|
||
|
||
s() { timeout 60 $SSH root@"$DEV" "$1"; }
|
||
sbg() { timeout 60 $SSH root@"$DEV" "$1" >"$ROOT/device_test/$2.raw" 2>/dev/null; }
|
||
|
||
shot() {
|
||
# 抓取当前 fb0 显示帧(buffer0, 480*720*2)并起名
|
||
s 'dd if=/dev/fb0 of=/data/_m22.raw bs=691200 count=1 2>/dev/null' >/dev/null
|
||
local name="${1:-m22_shot}"
|
||
sbg 'cat /data/_m22.raw' "$name"
|
||
local sz=$(stat -c%s "$ROOT/device_test/$name.raw")
|
||
if [ "$sz" = "691200" ]; then
|
||
python3 "$ROOT/device_test/fb2png.py" "$ROOT/device_test/$name.raw" "$ROOT/device_test/$name.png" >/dev/null 2>&1
|
||
python3 "$ROOT/device_test/ascii_fb.py" "$ROOT/device_test/$name.raw" 96 40 > "$ROOT/device_test/$name.txt"
|
||
echo "saved device_test/$name.png/.txt (raw $sz)"
|
||
else
|
||
echo "!! unexpected raw size $sz (期望 691200); 可能 fb0 非 RGB565 或 dd 失败"
|
||
fi
|
||
}
|
||
|
||
echo "==> 连接 $DEV ..."
|
||
s 'echo OK' >/dev/null || { echo "!! SSH 失败(设备可能在 MeowOS 未联网,或未开机)"; exit 1; }
|
||
|
||
echo "==> 红线:清 /data/recovery_all"
|
||
s 'rm -f /data/recovery_all; ls /data/recovery_all 2>/dev/null && echo FLAG || echo no_flag'
|
||
|
||
echo "==> 当前播放器状态(MeowOS 模式应无)"
|
||
s 'pidof hiby_player && echo PLAYER_ALIVE || echo NO_PLAYER'
|
||
PLAYER_PID=$(s 'pidof hiby_player' | tr -d ' ')
|
||
|
||
echo "==> 推送新 launcher 到 /data(不覆盖系统二进制)"
|
||
$SCP "$LAUNCHER" root@"$DEV":/data/meow_launcherd_m22
|
||
s 'chmod 755 /data/meow_launcherd_m22; md5sum /data/meow_launcherd_m22'
|
||
|
||
if [ -n "$PLAYER_PID" ]; then
|
||
echo "==> 有播放器在跑(HibyOS 覆盖语境)。若要测 MeowOS 常驻需先杀之(已知 pid SIGTERM):"
|
||
echo " 请确认后手动:$SSH root@$DEV 'kill $PLAYER_PID; sleep 2; pidof hiby_player || echo DEAD'"
|
||
echo " (本脚本不代杀,避免误触 watchodog;走 MeowOS 启动路径最干净)"
|
||
exit 2
|
||
fi
|
||
|
||
echo "==> 前端后台拉起新 launcher(MeowOS 常驻): "
|
||
echo " --sim-exit-tap 6000 —— 6s 点 BACK TO PLAYER 行(应 toast「REBOOT TO RETURN TO PLAYER」并留下)"
|
||
s 'rm -f /tmp/meow_boot.log; kill $(cat /usr/data/meow_launcherd.pid 2>/dev/null) 2>/dev/null; \
|
||
nohup /data/meow_launcherd_m22 --sim-exit-tap 6000 >/tmp/meow_boot.log 2>&1 & echo "launcher pid $!"'
|
||
sleep 3
|
||
shot m22_start # 现象3:启动即应用列表(非死帧)
|
||
sleep 3
|
||
shot m22_back_toast # 现象1:BACK TO PLAYER toast
|
||
echo "==> 日志(确认不备份/不冻结/不恢复死帧 + 挂卡/联网拔营)"
|
||
s 'grep -E "meow mode|sd_0 mounted|wifi not up|menu close|BACK TO PLAYER|card ready" /tmp/meow_boot.log | head -30'
|
||
|
||
echo "==> 清理:SIGTERM 已知 pid,结束恢复干净"
|
||
LPID=$(s 'cat /usr/data/meow_launcherd.pid 2>/dev/null')
|
||
[ -n "$LPID" ] && s "kill $LPID 2>/dev/null" || true
|
||
s 'sleep 1; kill $(pidof meow_launcherd_m22) 2>/dev/null; rm -f /data/_m22.raw /data/recovery_all; \
|
||
grep sd_0 /proc/mounts >/dev/null && echo SD_STILL_MOUNTED || echo SD_UMOUNTED; echo done'
|
||
echo "==> 完成。物理交互(热键开关/触摸/按键/音频)留用户真机确认。"
|