fix(fw): M51 刷机前批次 — 5 组二进制从最新 main 重编 + 钉值回写 + 语义指纹自证
本轮终结「二进制与源码两条轨道各走各的」:M23/M43/M47/M49/M50 只交源码,产物统一由本单 从 main5a06a8c一次重编。重编后 md5 全变(旧钉值来自另一代工具链/另一份源码),语义由 scripts/build/verify_fingerprints.sh 逐条自证。 - meow_bootmenu 157108 → 158836 8bce6558 (源码与884d4c4一致,变化全部来自工具链代差) - meow_netmgrd 212740 → 222068 e62e7512 (M49 蓝牙控制面 + WiFi 连接修复,+9328 全为源码) - meow_audiod 153484 → 68604 9f58b219 (musl 静态 → glibc-2.22 动态,链 libasound.so.2;M50) - meow_audio 88888 → 88888 3909c8d2 (与钉值逐字节一致,重编即复现) - meow_launcherd 894940 → 901020 e21450ff (M47 蓝牙/WiFi 三态开关 +6592) fw_content.conf:上述 6 行(netmgrd 双路径)md5 回写;desc 改为中性描述(文件是什么/什么形态), 不再写未进产物的功能版本号(M48 查出 bootmenu/netmgrd/audiod 三处 desc 撑谎)。 30/30 行 md5 与磁盘一致、全部 4 字段。 新增 scripts/build/rebuild_binaries.sh:干净 checkout / worktree 里的重编驱动(兼容 HOME + .tools/meow_ui.a 兜底,不改各组件 build_*.sh 的本机硬编码路径)。 新增 scripts/build/verify_fingerprints.sh:字符串/动态段/4263 反汇编判据逐条断言。
This commit is contained in:
1 parent
5a06a8cc1a
commit
31d4c22806
8 files changed
+194
-6
No files matched your search
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -13,6 +13,8 @@
|
||||
| `build_fw_apps.sh` | **通用打包脚本**(配置驱动)。读清单 → 组树 → repack → 校验 → 出固件。**不要改它的逻辑**,除非打包流程本身要变。 |
|
||||
| `fw_content.conf` | **固件内容清单**(默认配置)。每行一条 `<src>|<dst>|<md5>|<desc>`,声明"哪个本地文件装到固件哪里"。**改固件内容只改这里。** |
|
||||
| `build_devkit.sh` | **TF 卡调试工具集**交叉编译脚本(zig → 静态 MIPS32r2):`vmstat/slabtop/free/ps/pmap/sysctl/lsof` → `fw_apps/devkit/`。与固件打包无关,独立跑。详见 `DEVKIT.md`。 |
|
||||
| `rebuild_binaries.sh` | **进固件的那批组件重编驱动**:`bash scripts/build/rebuild_binaries.sh [bootmenu netmgrd audiod audio launcherd]`。在干净 checkout / git worktree 里补齐各组件 `build_*.sh` 的本机布局默认路径(兼容 HOME + `.tools`/`meow_ui.a` 兜底),产物就地写回 `patch_v2/<组件>/`。 |
|
||||
| `verify_fingerprints.sh` | **产物语义指纹自证**:`bash scripts/build/verify_fingerprints.sh`。重编后 md5 必变,能证明「产物含哪些源码改动」的是字符串/动态段/4263 反汇编判据,本脚本逐条断言。 |
|
||||
| `test_build_devkit.sh` | `build_devkit.sh` 的回归测试(不重编;热缓存约 15s,冷启动需先重建基线 1–2 分钟):stamp 命中时 `--with-sources` 必须产出完整 `src/`;`licenses`/`README` 被删要能恢复、`--verify-only` 必须拒绝;MANIFEST 漂移检测。 |
|
||||
| `DEVKIT.md` | devkit 的产物清单、许可证留痕(GPLv2 §3 / LGPL-2.1 §6)、可行性实测、time64 限制、上卡 PATH/busybox 关系。 |
|
||||
| `README.md` | 本说明。 |
|
||||
|
||||
@@ -27,8 +27,8 @@
|
||||
# ============================================================================
|
||||
|
||||
# ---- 用户态/服务守护二进制(usr/bin,全部 chmod 755 静态 MIPS)----
|
||||
patch_v2/bootmenu/meow_bootmenu|/usr/bin/meow_bootmenu|0507739de8fb2f0f69ab6293c9af32f6|引导选单 M6.25(开机菜单/第二屏亮度按用户设置恢复:显示前读 settings.conf 写回,方案A);M43 链 meow_time32(o32 time32 取时/睡眠,修 time64 ABI)
|
||||
patch_v2/meow_launcherd/meow_launcherd|/usr/bin/meow_launcherd|cea0a73514f28f2aca419fe7835f78d6|M42 包安装入口改委托 nyai(删 app_launcher.c 内联解包/验签/部署,新增 pkg_install.c:fork+exec /usr/bin/nyai install <路径>,包身份只来自包内 app.json、不强制 .mpk 后缀、SD 暂存+rename+必清理/拒 ./..、大小写绕过全由 nyai 一站闭合;MEOW_NYAI_BIN 覆写;stdout/stderr 分流抓取取 stderr 尾行做可读错误;start/poll 两段式不阻塞主循环+180s 超时;CLI 失败退 1 并打 stderr 文案), 链 meow_ui.a 86800633;继承 M40 电源键/锁屏链修复(App 前台电源菜单补齐 §10.5:notif 全抑制+帧恢复+SIGCONT 排空+标记翻回,关闭后不再停留菜单画面;show_power_menu 恢复进入前背景帧+重绘挪到首轮按键采样后;activity 标记排空窗+会话入口清理+manual_off 去单向闩锁;锁屏电源改按下边沿+进场 300ms,熄屏退出也恢复底层帧;SIGCONT 前写 /tmp/meow_app_repaint);继承 M39 点击输入门(M39 触摸守卫/MENU_TOUCH_GUARD_MS 150ms + SDK 启动排空);继承 M6.46 杀后台修复+SDK 时钟 ABI 修复(M11/M40);0warning
|
||||
patch_v2/bootmenu/meow_bootmenu|/usr/bin/meow_bootmenu|8bce6558cbc25faa8fbc105078003ef5|开机引导选单(MIPS32 musl 静态二进制):显示前读 settings.conf 的 display.brightness_min 写回面板;菜单超时/按键长按时序
|
||||
patch_v2/meow_launcherd/meow_launcherd|/usr/bin/meow_launcherd|e21450ff6621a67fd854165413c58be1|桌面/启动器主程序(MIPS32 musl 静态,链 SDK meow_ui.a):桌面与状态栏渲染、设置页(亮度/蓝牙/WiFi)、App 启动;包安装委托 /usr/bin/nyai
|
||||
patch_v2/meow_watchdog/meow_watchdog|/usr/bin/meow_watchdog|37c57e0feb9cd220978bfd5deff75a1f|应用看门狗 M40:o32 time32 取时/睡眠(修 held 天文数字→单击误判长按)、电源阈值读 power.longpress_menu_ms/forceoff_ms(缺省 3000/8000,与 launcher 主屏统一);继承 M20 亮屏亮度按 settings 恢复(四支决策不再回退固定 60)
|
||||
patch_v2/meow_svcd/meow_svcd|/usr/bin/meow_svcd|d2111094e458336b52f9e8d524e35a91|服务管理器 M2.77(+崩溃上报 meow_crash agent-187);M43 链 meow_time32(o32 time32 取时/睡眠,修 time64 ABI;重启退避/停止宽限恢复真实毫秒)
|
||||
mips-repo/bins/meow_mdns/bin/meow_mdns|/usr/bin/meow_mdns|d6b0151bda26768f19952dae1342610d|mDNS 应答器 M2.78(启动竞态+换IP重检 agent-194)
|
||||
@@ -38,12 +38,12 @@ patch_v2/meow_svc_power/meow_svc_power|/usr/bin/meow_svc_power|39ae3aa255695a97f
|
||||
patch_v2/meow_verify/meow_verify|/usr/bin/meow_verify|6c2e8ed24aebe5caf41e7aed391312d5|II期验签 2B(多公钥+v2签名块 agent-221)
|
||||
patch_v2/meow_crash/meow_crash|/usr/bin/meow_crash|ce8aa8bede960844b4d50dfa9171a13b|系统级崩溃捕获 (agent-187) + log升级: 清理前缀扩 perf_/hang_ 承接1GB纪律 (337);M43 链 meow_time32(o32 time32 取时/睡眠,修 time64 ABI)
|
||||
patch_v2/meow_svc_perf/meow_svc_perf|/usr/bin/meow_svc_perf|44e2ff6f5666ef6509e63ab3e606bb33|性能专项服务 M2.75 + log升级(337:卡死快照+perf基线) + OOM治理C(348:Cached/Dirty监控降载, /tmp/meow_cachegov_c.state单点);M43 链 meow_time32(o32 time32 取时/睡眠,修 time64 ABI)
|
||||
patch_v2/meow_audiod/meow_audiod|/usr/bin/meow_audiod|b122c9b81880b00f705bca30e42f3d58|独占音频守护 M6.42(开机路由武装瘦身防楔死:去无条件apply_route(5)→target双写,当前端口正确则跳过强烧,仅未武装/端口不对/读失败才写目标;保留M2.91核心防挂死武装,numid=9语义/popen有界超时/D态抛弃/io_thread未动;降低stock hbc3000驱动楔死整机硬冻结触发面;glibc-dynamic链libasound;0warning;需真机多boot复测)
|
||||
patch_v2/meow_audiod/meow_audio|/usr/bin/meow_audio|3909c8d226d9da5afba4563056d105a5|audiod 用户侧 CLI M6.34(+蓝牙P2 audio_output/OUT_BT codec 展示;monitor 实时电平表/文本电平条;status 补 rms/peak;0warning);M43 链 meow_time32(musl-static,修 time64 ABI 的取时/睡眠)
|
||||
patch_v2/meow_audiod/meow_audiod|/usr/bin/meow_audiod|9f58b2197ed91d24951918d41a78cf29|独占音频守护(MIPS32 glibc-2.22 动态链接:interpreter /lib/ld.so.1,NEEDED libasound.so.2 / libc.so.6 / libpthread.so.0):DAC 与蓝牙 A2DP 输出路由、硬件音量、电平监控
|
||||
patch_v2/meow_audiod/meow_audio|/usr/bin/meow_audio|3909c8d226d9da5afba4563056d105a5|audiod 用户侧 CLI(MIPS32 musl 静态):status/volume/monitor 等子命令,monitor 文本电平条
|
||||
patch_v2/meow_powermgr/meow_powermgr|/usr/bin/meow_powermgr|40217b5dc91da5c08d094c403eeb5fb2|功耗管理专项服务期2 M6.1(期1+history/top/events+mp2731 current_now 实测充电功率+WiFi 未关联档/BT rfkill 细化+系数路径 /data/meow/powermgr/;IPC 0xD0-D7);M43 链 meow_time32(o32 time32 取时/睡眠,修 time64 ABI)
|
||||
patch_v2/meow_powermgr/meow_powermgr|/usr/bin/meow_power|40217b5dc91da5c08d094c403eeb5fb2|meow_powermgr 的 CLI 形态(同二进制双形态,argv[0]=meow_power 即 CLI:status/estimate/model/history/top/events,policy 期3桩);M43 链 meow_time32
|
||||
patch_v2/meow_netmgrd/meow_netmgrd|/usr/bin/meow_netmgrd|47efec13690f5c9578d0fd1c1bdfd8dd|网络管理服务期6 M6.28(蓝牙P1 BT_CTL权威收口:hcitool con判连接/paired-devices补名/a2dp详情/connect-disconnect-pair-unpair-scan);M43 链 meow_time32(o32 time32 取时/睡眠,修 time64 ABI;DNS TTL 基准恢复)
|
||||
patch_v2/meow_netmgrd/meow_netmgrd|/usr/bin/meow_net|47efec13690f5c9578d0fd1c1bdfd8dd|meow_netmgrd 的 CLI 形态(同二进制双形态,argv[0]=meow_net 即 CLI:status/iface/wifi/bt/rfkill/apps/conns/top/dns/policy/help;M6.28 蓝牙P1 BT_CTL收口);M43 链 meow_time32
|
||||
patch_v2/meow_netmgrd/meow_netmgrd|/usr/bin/meow_netmgrd|e62e7512d8a71a83bbba6d7c0d5e4fee|网络管理守护(MIPS32 musl 静态):WiFi/以太网连接与扫描、DNS/路由/策略、蓝牙控制面(配对/连接/扫描/已配对列表);/usr/bin/meow_net 为同一二进制的 CLI 形态
|
||||
patch_v2/meow_netmgrd/meow_netmgrd|/usr/bin/meow_net|e62e7512d8a71a83bbba6d7c0d5e4fee|meow_netmgrd 同一二进制的 CLI 形态(argv[0]=meow_net):status/iface/wifi/bt/rfkill/apps/conns/top/dns/policy 等子命令
|
||||
patch_v2/ntpsync/meow_ntpsync|/usr/bin/meow_ntpsync|f3c3abe4a960560f59f4101e6c444722|网络校时 M22(复用固件自带 ntp-4.2.8p14 一次性 -q 校时 + hwclock -w -u 回写 RTC;自带看门狗/总超时/默认路由轮询/进程锁,不自常驻、不阻塞调用方;r1 修:trap 收尸 ntpd 子进程+孤儿收尸、日志不可写不再吞掉 hwclock、锁用 <pid> 子目录自证且只删自己的锁)
|
||||
|
||||
# ---- 开机 init 脚本(etc/init.d,数字决定启动顺序,按文件名自然序)----
|
||||
|
||||
Executable
+97
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
# rebuild_binaries.sh — 重编「进固件的那批组件」,产物就地写回 patch_v2/<组件>/(M51 批次)。
|
||||
#
|
||||
# 为什么需要它:各组件自己的 build_*.sh 里仍散落着本机布局的默认路径
|
||||
# (`$HOME/Project/R3ProII/.tools/...`、`$HOME/.tools/mipsel-linux-muslsf-cross/...`),
|
||||
# 在干净 checkout / git worktree 里直接跑会「找不到编译器」。本脚本不去改那些脚本,
|
||||
# 而是**在调用侧**把这些路径用环境变量与一个兼容 HOME 补齐:
|
||||
#
|
||||
# $COMPAT_HOME/Project/R3ProII -> 本仓库根(脚本里的历史硬编码路径落到当前 checkout)
|
||||
# $COMPAT_HOME/.tools -> 真 .tools(zig-mipsel-cc / muslsf 交叉 sysroot)
|
||||
#
|
||||
# 所有路径都可被环境变量覆盖:
|
||||
# ZIGCC mipsel-musl 交叉编译器包装(默认 $HOME/.tools/zig-mipsel-cc)
|
||||
# ZIG 裸 zig(audiod 守护目标用它做 glibc-2.22 动态链接;默认 PATH 里的 zig)
|
||||
# MEOW_UI_A_SRC launcherd 需要的 SDK 静态库来源(默认主 checkout 的 patch_v2/sdk/meow_ui.a)
|
||||
#
|
||||
# 用法:
|
||||
# bash scripts/build/rebuild_binaries.sh # 全部 5 组
|
||||
# bash scripts/build/rebuild_binaries.sh bootmenu # 只编一个(可多个)
|
||||
# 组件名:bootmenu netmgrd audiod audio launcherd
|
||||
#
|
||||
# 前置:meow_audiod 守护目标需要设备 libasound.so.2 副本(build_audiod.sh 自动从
|
||||
# devdocs/fw-baseline/ 或主 checkout 取);worktree 里没有这些未入库目录时,
|
||||
# 不需要额外指定——build_audiod.sh 用 git-common-dir 回退到主 checkout 取固件树。
|
||||
set -e
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
ZIGCC="${ZIGCC:-$HOME/.tools/zig-mipsel-cc}"
|
||||
ZIG="${ZIG:-$(command -v zig || true)}"
|
||||
MEOW_UI_A_SRC="${MEOW_UI_A_SRC:-}"
|
||||
|
||||
[ -x "$ZIGCC" ] || { echo "!! ZIGCC 不可执行: $ZIGCC(用 ZIGCC=/path 覆盖)" >&2; exit 1; }
|
||||
[ -n "$ZIG" ] && [ -x "$ZIG" ] || { echo "!! 找不到 zig(用 ZIG=/path 覆盖)" >&2; exit 1; }
|
||||
|
||||
# launcherd 链的 SDK 静态库被 .gitignore 忽略,worktree 里没有 → 从主 checkout 取。
|
||||
ensure_ui_a() {
|
||||
local dst="$ROOT/patch_v2/sdk/meow_ui.a"
|
||||
[ -f "$dst" ] && { echo " meow_ui.a: $dst ($(md5sum "$dst" | cut -d' ' -f1))"; return 0; }
|
||||
local src="$MEOW_UI_A_SRC"
|
||||
if [ -z "$src" ]; then
|
||||
local main
|
||||
main="$(git -C "$ROOT" rev-parse --git-common-dir 2>/dev/null || true)"
|
||||
[ -n "$main" ] && main="$(cd "$ROOT/$(dirname "$main")/.." 2>/dev/null && pwd)/patch_v2/sdk/meow_ui.a"
|
||||
src="$main"
|
||||
fi
|
||||
[ -n "$src" ] && [ -f "$src" ] || {
|
||||
echo "!! 缺 patch_v2/sdk/meow_ui.a,且找不到来源;用 MEOW_UI_A_SRC=/path 指定" >&2
|
||||
echo " (它由 patch_v2/sdk/build_sdk.sh 产出,被 .gitignore 忽略,不入库)" >&2
|
||||
exit 1; }
|
||||
cp "$src" "$dst"
|
||||
echo " meow_ui.a: 复制 $src → $dst ($(md5sum "$dst" | cut -d' ' -f1))"
|
||||
}
|
||||
|
||||
# 兼容 HOME:历史脚本按 $HOME 拼路径,这里让那些路径解析到当前 checkout 与真工具链。
|
||||
COMPAT_HOME="${COMPAT_HOME:-${TMPDIR:-$HOME/tmp}/meow-build-home}"
|
||||
mkdir -p "$COMPAT_HOME/Project"
|
||||
ln -sfn "$ROOT" "$COMPAT_HOME/Project/R3ProII"
|
||||
ln -sfn "$HOME/.tools" "$COMPAT_HOME/.tools"
|
||||
|
||||
run() { # run <组件> <工作目录> <命令...>
|
||||
local name="$1" dir="$2"; shift 2
|
||||
echo "==> [$name] $*"
|
||||
( cd "$ROOT/$dir" && HOME="$COMPAT_HOME" ZIGCC="$ZIGCC" ZIG="$ZIG" \
|
||||
ZIG_GLOBAL_CACHE_DIR="$HOME/.cache/zig" "$@" )
|
||||
}
|
||||
|
||||
report() { # report <产物路径>
|
||||
local f="$ROOT/$1"
|
||||
printf ' %-44s %8s B %s\n' "$1" "$(stat -c%s "$f")" "$(md5sum "$f" | cut -d' ' -f1)"
|
||||
}
|
||||
|
||||
do_bootmenu=0; do_netmgrd=0; do_audiod=0; do_audio=0; do_launcherd=0
|
||||
if [ $# -eq 0 ]; then do_bootmenu=1; do_netmgrd=1; do_audiod=1; do_audio=1; do_launcherd=1; fi
|
||||
for a in "$@"; do
|
||||
case "$a" in
|
||||
bootmenu) do_bootmenu=1 ;;
|
||||
netmgrd) do_netmgrd=1 ;;
|
||||
audiod) do_audiod=1 ;;
|
||||
audio) do_audio=1 ;;
|
||||
launcherd) do_launcherd=1 ;;
|
||||
*) echo "!! 未知组件: $a(bootmenu netmgrd audiod audio launcherd)" >&2; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo "==> 重编批次(ROOT=$ROOT)"
|
||||
echo " ZIGCC=$ZIGCC"
|
||||
echo " ZIG=$ZIG ($("$ZIG" version 2>/dev/null || echo '?'))"
|
||||
|
||||
[ "$do_bootmenu" = 1 ] && { run bootmenu patch_v2/bootmenu bash build_bootmenu.sh; report patch_v2/bootmenu/meow_bootmenu; }
|
||||
[ "$do_netmgrd" = 1 ] && { run netmgrd patch_v2/meow_netmgrd bash build_netmgrd.sh; report patch_v2/meow_netmgrd/meow_netmgrd; }
|
||||
# audiod 守护:glibc-2.22 动态链接(链设备 libasound.so.2);**不链 meow_time32.c**(见 build_audiod.sh 头注)。
|
||||
# meow_audio CLI:musl 静态 + meow_time32.c。
|
||||
[ "$do_audiod" = 1 ] && { run audiod patch_v2/meow_audiod bash build_audiod.sh; report patch_v2/meow_audiod/meow_audiod; }
|
||||
[ "$do_audio" = 1 ] && { run audio patch_v2/meow_audiod bash build_audiod.sh cli; report patch_v2/meow_audiod/meow_audio; }
|
||||
[ "$do_launcherd" = 1 ] && { ensure_ui_a; run launcherd patch_v2/meow_launcherd bash build_launcher.sh; report patch_v2/meow_launcherd/meow_launcherd; }
|
||||
|
||||
echo "==> 完成。产物自证:bash scripts/build/verify_fingerprints.sh"
|
||||
Executable
+89
@@ -0,0 +1,89 @@
|
||||
#!/bin/bash
|
||||
# verify_fingerprints.sh — 语义指纹自证(M51 批次产物)。
|
||||
#
|
||||
# 背景:仓内钉值的 md5 来自旧工具链时代,重编后**必然全变**,md5 不再是「产物含哪些源码改动」
|
||||
# 的证据。能证明产物语义的只有两样东西:二进制里的字符串/动态段(功能存在),以及反汇编里的
|
||||
# time32 系统调用形态(4263 + 16 字节布局写回,见 patch_v2/sdk/test_time32_abi.sh)。
|
||||
# 本脚本把这些判据固化下来,重编后跑一遍即可。
|
||||
#
|
||||
# 用法:bash scripts/build/verify_fingerprints.sh
|
||||
# 退出码:全部命中 0;任一条不命中最 1。
|
||||
#
|
||||
# 注意:中文串用 `grep -a -o -F` 直接数二进制里的字节序列,**不能**用 strings ——
|
||||
# strings 只输出可打印 ASCII 串,UTF-8 中文(每字节 ≥0x80)整段被跳过。
|
||||
set -u
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
BM="$ROOT/patch_v2/bootmenu/meow_bootmenu"
|
||||
NM="$ROOT/patch_v2/meow_netmgrd/meow_netmgrd"
|
||||
AD="$ROOT/patch_v2/meow_audiod/meow_audiod"
|
||||
AU="$ROOT/patch_v2/meow_audiod/meow_audio"
|
||||
LC="$ROOT/patch_v2/meow_launcherd/meow_launcherd"
|
||||
|
||||
PASS=0; FAIL=0
|
||||
ok() { PASS=$((PASS+1)); printf ' PASS %s\n' "$1"; }
|
||||
bad() { FAIL=$((FAIL+1)); printf ' FAIL %s\n' "$1"; }
|
||||
|
||||
# cnt <file> <literal>:二进制里该字面量的出现次数
|
||||
cnt() { grep -a -o -F -- "$2" "$1" 2>/dev/null | wc -l; }
|
||||
|
||||
# eq <name> <file> <literal> <期望次数>
|
||||
eq() {
|
||||
local got; got=$(cnt "$2" "$3")
|
||||
if [ "$got" -eq "$4" ]; then ok "$1: '$3' = $got"; else bad "$1: '$3' = $got(期望 $4)"; fi
|
||||
}
|
||||
# ge <name> <file> <literal> <最少次数>
|
||||
ge() {
|
||||
local got; got=$(cnt "$2" "$3")
|
||||
if [ "$got" -ge "$4" ]; then ok "$1: '$3' = $got (>= $4)"; else bad "$1: '$3' = $got(期望 >= $4)"; fi
|
||||
}
|
||||
|
||||
echo "==> meow_bootmenu(亮度单一权威源 + time32)"
|
||||
eq bootmenu "$BM" 'display.brightness_min' 1
|
||||
eq bootmenu "$BM" '0.1.0-m2.30-bri-src' 1
|
||||
|
||||
echo "==> meow_netmgrd(蓝牙控制面 / WiFi 连接修复 + time32)"
|
||||
ge netmgrd "$NM" 'paired-devices' 1
|
||||
ge netmgrd "$NM" 'hcitool con' 1
|
||||
ge netmgrd "$NM" 'list-pcms' 1
|
||||
ge netmgrd "$NM" 'A2DP none' 1
|
||||
ge netmgrd "$NM" 'bt scan on' 1
|
||||
eq netmgrd "$NM" 'connected=%d' 4
|
||||
eq netmgrd "$NM" 'bt cmd:' 0 # 旧「一条命令行」形态已删
|
||||
eq netmgrd "$NM" 'a2dp list' 0 # 旧的整段 dump 形态已删
|
||||
|
||||
echo "==> meow_audiod(蓝牙 A2DP 输出端到端;glibc-dynamic 链 libasound)"
|
||||
ge audiod "$AD" 'audio.output_bt' 1
|
||||
ge audiod "$AD" 'bluealsa:DEV=%s,PROFILE=a2dp,CODEC=%s' 1
|
||||
ge audiod "$AD" 'btdev=' 1
|
||||
ge audiod "$AD" 'btcodec=' 1
|
||||
ge audiod "$AD" 'btacodec=' 1
|
||||
eq audiod "$AD" 'pcm.bluealsa' 0 # 打开名改走 bluealsa:DEV=... 内联参数
|
||||
eq audiod "$AD" '/usr/data/alsa.conf' 0 # 不再读写 HiBy 播放器的非法 alsa.conf
|
||||
if readelf -d "$AD" 2>/dev/null | grep -q 'libasound.so.2'; then ok "audiod: readelf -d NEEDED libasound.so.2"
|
||||
else bad "audiod: readelf -d 缺 libasound.so.2"; fi
|
||||
if readelf -l "$AD" 2>/dev/null | grep -q 'interpreter: /lib/ld.so.1'; then ok "audiod: interpreter = /lib/ld.so.1"
|
||||
else bad "audiod: interpreter 不是 /lib/ld.so.1"; fi
|
||||
|
||||
echo "==> meow_audio(CLI,musl 静态 + time32)"
|
||||
ge audio "$AU" 'S24' 1
|
||||
ge audio "$AU" 'S32' 1
|
||||
|
||||
echo "==> meow_launcherd(装包委托 nyai + 开关三态)"
|
||||
ge launcherd "$LC" 'pkg_install: nyai unavailable at %s' 1
|
||||
ge launcherd "$LC" 'pkg_install: rejected path: %s' 1
|
||||
ge launcherd "$LC" 'pkg_install: ok' 1
|
||||
ge launcherd "$LC" '--pkg-install' 1
|
||||
ge launcherd "$LC" '/usr/bin/nyai' 1
|
||||
for s in '正在%s…(等待设备确认)' '无法确认当前状态(上次已知:%s)' '切换未生效:当前仍为%s' \
|
||||
'蓝牙状态未知' 'WiFi 开关状态未知' '无法读取开关状态(服务/控制器无响应)' \
|
||||
'无法读取射频状态(rfkill/网卡无响应)'; do
|
||||
ge launcherd "$LC" "$s" 1
|
||||
done
|
||||
|
||||
echo "==> time32 二进制判据(4263 + 16B 布局写回;audiod 守护例外见 build_audiod.sh)"
|
||||
bash "$ROOT/patch_v2/sdk/test_time32_abi.sh" --no-builds "$BM" "$NM" "$AU" "$LC"
|
||||
|
||||
echo "==> 汇总:fingerprints PASS=$PASS FAIL=$FAIL"
|
||||
[ "$FAIL" -eq 0 ] || exit 1
|
||||
echo " ALL PASS"
|
||||
Reference in new issue
Block a user