Merge branch 'feat/m43-time32-rollout-to-system-components'
This commit is contained in:
commit
00e7271395
22 files changed
+264
-43
No files matched your search
@@ -6,6 +6,10 @@ set -e
|
||||
cd "$(dirname "$0")"
|
||||
CC="$HOME/Project/R3ProII/.tools/zig-mipsel-cc"
|
||||
MEOW_TOUCH_DIR="../meow_launcherd"
|
||||
"$CC" -Os -static -I "$MEOW_TOUCH_DIR" meow_bootmenu.c "$MEOW_TOUCH_DIR/meow_touch.c" -o meow_bootmenu
|
||||
# M43: bootmenu 也不链 meow_ui.a,单独链 time32 修取时/睡眠 ABI。只改语义正确的取时来源,
|
||||
# boot_timeout/按键长按/守候计时行为不变(修复后才是真实毫秒;squashfs /usr/bin,改坏影响
|
||||
# 开机选单/自动启动,但不是 initramfs 级不可恢复)。
|
||||
"$CC" -Os -static -I "$MEOW_TOUCH_DIR" -DMEOW_TIME32_LIBC_OVERRIDES \
|
||||
meow_bootmenu.c "$MEOW_TOUCH_DIR/meow_touch.c" ../sdk/meow_time32.c -o meow_bootmenu
|
||||
ls -la meow_bootmenu
|
||||
file meow_bootmenu
|
||||
Binary file not shown.
@@ -33,7 +33,10 @@ if [ "$1" = "am" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
"$CC" -I"$ROOT/patch_v2/meow_launcherd" -Os -Wall -Wextra -static meow_amsd.c -o meow_amsd
|
||||
# meow_time32.c:独立 o32 time32 取时/睡眠(amsd 不链 meow_ui.a);同时修 now_ms 与
|
||||
# usleep 退避。am CLI 无取时/睡眠调用,保持原样。
|
||||
"$CC" -I"$ROOT/patch_v2/meow_launcherd" -Os -Wall -Wextra -static \
|
||||
-DMEOW_TIME32_LIBC_OVERRIDES meow_amsd.c ../sdk/meow_time32.c -o meow_amsd
|
||||
echo "== meow_amsd (mipsel static) =="
|
||||
ls -la meow_amsd
|
||||
md5sum meow_amsd
|
||||
|
||||
Binary file not shown.
@@ -43,7 +43,10 @@ if [ "$1" = "host" ]; then
|
||||
fi
|
||||
|
||||
if [ "$1" = "cli" ]; then
|
||||
"$CC" $INC -Os -Wall -Wextra -static meow_audio.c -o meow_audio -lm
|
||||
# M43: meow_audio 是 musl-static(当前 zig 链),与其它系统组件同源受损 → 链 time32 修
|
||||
# clock_gettime/usleep(monitor 的 100ms 窗口/轮询)。
|
||||
"$CC" $INC -Os -Wall -Wextra -static -DMEOW_TIME32_LIBC_OVERRIDES \
|
||||
meow_audio.c ../sdk/meow_time32.c -o meow_audio -lm
|
||||
echo "== meow_audio (mipsel static CLI) =="
|
||||
ls -la meow_audio
|
||||
md5sum meow_audio
|
||||
@@ -52,6 +55,10 @@ if [ "$1" = "cli" ]; then
|
||||
fi
|
||||
|
||||
# meow_audiod:mipsel glibc-dynamic,BT 直链 libasound(-Llibbt -lasound)。-lpthread 供播放线程。
|
||||
# M43 例外:本目标走 glibc-2.22(time_t 32 位、timespec 8 字节)→ 无 musl time64 头/实现错位;
|
||||
# 当前钉在 fw_content.conf 的出货件则是旧工具链静态 musl,其 4403→ENOSYS→4263+宽度转换本身健康。
|
||||
# 两种形态都不需要 meow_time32.c(其 __clock_* 接管针对 zig musl 内部符号)。musl-static 的
|
||||
# meow_audio CLI 已链 time32。
|
||||
# 链接源 libbt/libasound.so.2.0.0(设备固件 libasound.so.2 副本);缺失时从固件镜像自拷贝(idempotent)。
|
||||
LIBBT="libbt"
|
||||
ASOUND_SRC="$ROOT/hiby_os_crack/r3proii/squashfs-root-example/usr/lib/libasound.so.2.0.0"
|
||||
|
||||
Binary file not shown.
@@ -21,7 +21,9 @@ if [ "$1" = "host" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
"$CC" -Os -Wall -Wextra -static meow_crash.c -o meow_crash
|
||||
# meow_time32.c:独立 o32 time32 取时/睡眠(crash 不链 meow_ui.a);扫描/清理节拍恢复真实毫秒。
|
||||
"$CC" -Os -Wall -Wextra -static -DMEOW_TIME32_LIBC_OVERRIDES \
|
||||
meow_crash.c ../sdk/meow_time32.c -o meow_crash
|
||||
echo "== meow_crash (mipsel static) =="
|
||||
ls -la meow_crash
|
||||
md5sum meow_crash
|
||||
|
||||
Binary file not shown.
@@ -26,7 +26,10 @@ if [ "$1" = "host" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
"$CC" -Os -Wall -Wextra -static -I"$I_HDR" meow_netmgrd.c -o meow_netmgrd
|
||||
# meow_time32.c:独立 o32 time32 取时/睡眠(netmgrd 不链 meow_ui.a);修 DNS TTL 基准
|
||||
# 与 nanosleep 退避。守护/CLI 同一二进制,一次构建两处安装。
|
||||
"$CC" -Os -Wall -Wextra -static -I"$I_HDR" -DMEOW_TIME32_LIBC_OVERRIDES \
|
||||
meow_netmgrd.c ../sdk/meow_time32.c -o meow_netmgrd
|
||||
echo "== meow_netmgrd (mipsel static) =="
|
||||
ls -la meow_netmgrd
|
||||
md5sum meow_netmgrd
|
||||
|
||||
Binary file not shown.
@@ -24,7 +24,10 @@ if [ "$1" = "host" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
"$CC" -Os -Wall -Wextra -static -I"$I_HDR" meow_powermgr.c -o meow_powermgr
|
||||
# meow_time32.c:独立 o32 time32 取时/睡眠(powermgr 不链 meow_ui.a);采样时间戳与
|
||||
# usleep 轮询恢复真实毫秒。
|
||||
"$CC" -Os -Wall -Wextra -static -I"$I_HDR" -DMEOW_TIME32_LIBC_OVERRIDES \
|
||||
meow_powermgr.c ../sdk/meow_time32.c -o meow_powermgr
|
||||
echo "== meow_powermgr (mipsel static) =="
|
||||
ls -la meow_powermgr
|
||||
md5sum meow_powermgr
|
||||
|
||||
Binary file not shown.
@@ -22,7 +22,10 @@ if [ "$1" = "host" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
"$CC" -Os -Wall -Wextra -static -I"$I_HDR" meow_svc_perf.c -o meow_svc_perf
|
||||
# meow_time32.c:独立 o32 time32 取时/睡眠(svc_perf 不链 meow_ui.a);采样间隔/卡死快照
|
||||
# 冷却恢复真实毫秒。
|
||||
"$CC" -Os -Wall -Wextra -static -I"$I_HDR" -DMEOW_TIME32_LIBC_OVERRIDES \
|
||||
meow_svc_perf.c ../sdk/meow_time32.c -o meow_svc_perf
|
||||
echo "== meow_svc_perf (mipsel static) =="
|
||||
ls -la meow_svc_perf
|
||||
md5sum meow_svc_perf
|
||||
|
||||
Binary file not shown.
@@ -21,7 +21,10 @@ if [ "$1" = "host" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
"$CC" -Os -Wall -Wextra -static meow_svcd.c -o meow_svcd
|
||||
# meow_time32.c:独立 o32 time32 取时/睡眠(svcd 不链 meow_ui.a);LIBC_OVERRIDES 在静态
|
||||
# 链接期接管 clock_gettime/time/usleep/nanosleep,修 musl time64 头与 time32 实现的 ABI 错位。
|
||||
"$CC" -Os -Wall -Wextra -static -DMEOW_TIME32_LIBC_OVERRIDES \
|
||||
meow_svcd.c ../sdk/meow_time32.c -o meow_svcd
|
||||
echo "== meow_svcd (mipsel static) =="
|
||||
ls -la meow_svcd
|
||||
md5sum meow_svcd
|
||||
|
||||
Binary file not shown.
@@ -21,7 +21,10 @@ if [ "$1" = "host" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
"$CC" -Os -Wall -Wextra -static meow_sysui.c -o meow_sysui
|
||||
# meow_time32.c:独立 o32 time32 取时/睡眠(sysui 不链 meow_ui.a);LIBC_OVERRIDES 在静态
|
||||
# 链接期接管 clock_gettime/time/usleep/nanosleep,修 musl time64 头与 time32 实现的 ABI 错位。
|
||||
"$CC" -Os -Wall -Wextra -static -DMEOW_TIME32_LIBC_OVERRIDES \
|
||||
meow_sysui.c ../sdk/meow_time32.c -o meow_sysui
|
||||
echo "== meow_sysui (mipsel static) =="
|
||||
ls -la meow_sysui
|
||||
md5sum meow_sysui
|
||||
|
||||
Binary file not shown.
@@ -25,7 +25,10 @@ if [ "$1" = "host" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
"$CC" -Os -Wall -Wextra -static -I. -I"$I_HDR" src/*.c mp_jpeg.c -o meowpanel
|
||||
# meow_time32.c:独立 o32 time32 取时/睡眠(meowpanel 不链 meow_ui.a);修 time(NULL)
|
||||
# 会话过期基准与 usleep 手势/按键节奏。
|
||||
"$CC" -Os -Wall -Wextra -static -I. -I"$I_HDR" -DMEOW_TIME32_LIBC_OVERRIDES \
|
||||
src/*.c mp_jpeg.c ../sdk/meow_time32.c -o meowpanel
|
||||
echo "== meowpanel (mipsel static) =="
|
||||
ls -la meowpanel
|
||||
md5sum meowpanel
|
||||
|
||||
Binary file not shown.
+209
-22
@@ -1,37 +1,224 @@
|
||||
#!/bin/bash
|
||||
# test_time32_abi.sh — 反汇编断言:mipsel 二进制必须走 o32 time32 取时(4263),
|
||||
# 不得残留 time64 入口(4403)。这是宿主 fallback 单测无法覆盖的「真机取时路径」证据。
|
||||
# test_time32_abi.sh — time32 接入门禁(构建级主判据 + 二进制语义辅助判据)。
|
||||
#
|
||||
# 主判据(构建级,直接抓「漏加」这个真实故障模式):
|
||||
# 逐个组件解析 build_*.sh 里真正产出该二进制的编译逻辑行(按 -o <产物> 定位,
|
||||
# 自动拼接反斜杠续行),断言命令行同时包含:
|
||||
# meow_time32.c
|
||||
# -DMEOW_TIME32_LIBC_OVERRIDES
|
||||
# 只查构建命令,不受二进制里无关函数/结构体的干扰。
|
||||
#
|
||||
# 辅助判据(二进制级):
|
||||
# 1) 4263(SYS_clock_gettime time32)出现 ≥1 次;4403(SYS_clock_gettime64)0 次;
|
||||
# 2) 4263 之后必须出现 16 字节 time64 布局写回,且写回数据必须来自被调函数填的
|
||||
# 8 字节 ts32 缓冲(数据依赖,防无关结构体写回造成假阳性):
|
||||
# lw $r, off($sp) → sw $r, 0x0($base)
|
||||
# sra ...,0x1f → sw ..., 0x4($base)
|
||||
# lw $r2, off+4($sp) → sw $r2, 0x8($base)
|
||||
# 同一 base 且 base 不是 $sp。内联形态在 4263 后 70 条内找;非内联形态
|
||||
# (如 launcherd 链接 meow_ui_time.c)在「4263 所在函数的调用者」jal 后 60 条内找。
|
||||
# 缺陷版(4263 的 a1 直接指向调用方 8 字节缓冲、无宽度转换)两条都不成立。
|
||||
#
|
||||
# 用法(任意目录):
|
||||
# bash patch_v2/sdk/test_time32_abi.sh patch_v2/meow_watchdog/meow_watchdog
|
||||
# bash patch_v2/sdk/test_time32_abi.sh patch_v2/meow_watchdog/meow_watchdog patch_v2/meow_launcherd/meow_launcherd
|
||||
# bash patch_v2/sdk/test_time32_abi.sh # 只跑构建门禁(10 个组件)
|
||||
# bash patch_v2/sdk/test_time32_abi.sh <mipsel-bin> ... # 构建门禁 + 二进制检查
|
||||
# bash patch_v2/sdk/test_time32_abi.sh --no-builds <bin> ... # 只跑二进制检查(旧用法)
|
||||
# 可用 OBJDUMP=<path> 指定 objdump(默认 llvm-objdump)。
|
||||
#
|
||||
# 期望:每个二进制 4263 出现 ≥1 次(time32 取时路径存在),4403 出现 0 次
|
||||
# (CLOCK_ABI.md §2.3:zig musl 把 time64 分支整段编掉,残留 4403 说明链接到了未修复的取时)。
|
||||
# 已知自证样本:amsd 出货件(4263-only + 直写调用方)FAIL;修复后 amsd PASS;
|
||||
# 当前 zig 不加 meow_time32.c 重编的 sysui FAIL;launcherd(非内联转换形态)PASS。
|
||||
set -u
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||
OD="${OBJDUMP:-llvm-objdump}"
|
||||
command -v "$OD" >/dev/null 2>&1 || { echo "缺少 objdump: $OD(可用 OBJDUMP=... 覆盖)" >&2; exit 2; }
|
||||
[ "$#" -gt 0 ] || { echo "用法: $0 <mipsel-binary> [...]" >&2; exit 2; }
|
||||
|
||||
usage() {
|
||||
echo "用法: $0 [--builds|--no-builds] [mipsel-binary ...]" >&2
|
||||
echo " 无参数 / --builds 只跑构建门禁(10 个 M43 组件)" >&2
|
||||
echo " <binary> ... 构建门禁 + 二进制检查" >&2
|
||||
echo " --no-builds <binary> 只跑二进制检查" >&2
|
||||
}
|
||||
|
||||
# 组件 → 构建脚本(产物名用于在脚本里定位 -o <产物>)。
|
||||
# meow_audio 是 audiod 构建脚本的 cli 目标;audiod 守护本身是例外(不链 time32)。
|
||||
BUILD_TARGETS='
|
||||
meow_sysui|patch_v2/meow_sysui/build_sysui.sh
|
||||
meow_svcd|patch_v2/meow_svcd/build_svcd.sh
|
||||
meow_bootmenu|patch_v2/bootmenu/build_bootmenu.sh
|
||||
meow_amsd|patch_v2/meow_amsd/build_amsd.sh
|
||||
meow_netmgrd|patch_v2/meow_netmgrd/build_netmgrd.sh
|
||||
meow_crash|patch_v2/meow_crash/build_crash.sh
|
||||
meow_svc_perf|patch_v2/meow_svc_perf/build_svc_perf.sh
|
||||
meow_powermgr|patch_v2/meow_powermgr/build_powermgr.sh
|
||||
meowpanel|patch_v2/meowpanel/build_meowpanel.sh
|
||||
meow_audio|patch_v2/meow_audiod/build_audiod.sh
|
||||
'
|
||||
|
||||
# 语义断言:要求 16 字节写回与「被调函数填的 8 字节 ts32 缓冲」存在数据依赖。
|
||||
sem_awk='
|
||||
function hex2num(h, i, n, c) {
|
||||
n = 0; h = tolower(h)
|
||||
for (i = 1; i <= length(h); i++) {
|
||||
c = index("0123456789abcdef", substr(h, i, 1)) - 1
|
||||
if (c < 0) return -1
|
||||
n = n * 16 + c
|
||||
}
|
||||
return n
|
||||
}
|
||||
function window_dep(from, to, j, l, s, parts, reg, rest, off, base, has_sra, loadoff, sec_off, ok0, ok4, ok8, b) {
|
||||
delete loadoff; delete sec_off; delete ok0; delete ok4; delete ok8
|
||||
has_sra = 0
|
||||
for (j = from; j <= to && j <= NR; j++) {
|
||||
l = line[j]
|
||||
if (match(l, /(^|[ \t])lw[ \t]+\$[0-9a-z]+,[ \t]*0x[0-9a-f]+\(\$sp\)/)) {
|
||||
s = substr(l, RSTART, RLENGTH)
|
||||
sub(/^.*lw[ \t]+\$/, "", s)
|
||||
split(s, parts, /,[ \t]*0x/)
|
||||
reg = parts[1]; rest = parts[2]; off = rest; sub(/\(.*/, "", off)
|
||||
loadoff[reg] = hex2num(off)
|
||||
}
|
||||
if (l ~ /sra[ \t]+\$[0-9a-z]+,[ \t]*\$[0-9a-z]+,[ \t]*0x1f/) has_sra = 1
|
||||
if (match(l, /(^|[ \t])sw[ \t]+\$[0-9a-z]+,[ \t]*0x[048]\(\$[0-9a-z]+\)/)) {
|
||||
s = substr(l, RSTART, RLENGTH)
|
||||
sub(/^.*sw[ \t]+\$/, "", s)
|
||||
split(s, parts, /,[ \t]*0x/)
|
||||
reg = parts[1]; rest = parts[2]
|
||||
off = rest; sub(/\(.*/, "", off)
|
||||
base = rest; sub(/^.*\(\$/, "", base); sub(/\).*/, "", base)
|
||||
if (base == "sp") continue
|
||||
if (off == "0" && (reg in loadoff)) {
|
||||
sec_off[base] = loadoff[reg]; ok0[base] = 1
|
||||
} else if (off == "4" && (base in ok0) && has_sra) {
|
||||
ok4[base] = 1
|
||||
} else if (off == "8" && (base in sec_off) && (reg in loadoff) \
|
||||
&& loadoff[reg] == sec_off[base] + 4) {
|
||||
ok8[base] = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
for (b in ok0) if ((b in ok4) && (b in ok8)) return 1
|
||||
return 0
|
||||
}
|
||||
{ line[NR] = $0 }
|
||||
END {
|
||||
ng = 0; nj = 0
|
||||
for (i = 1; i <= NR; i++) {
|
||||
if (!match(line[i], /^[ \t]*[0-9a-f]+:/)) continue
|
||||
h = substr(line[i], RSTART, RLENGTH); sub(/:$/, "", h); gsub(/[ \t]/, "", h)
|
||||
addr[i] = hex2num(h)
|
||||
if (line[i] ~ /addiu[ \t]+\$[0-9a-z]+,[ \t]*\$zero,[ \t]*0x10a7/) { ng++; gt[ng] = i }
|
||||
if (match(line[i], /jal[ \t]+0x[0-9a-f]+/)) {
|
||||
s = substr(line[i], RSTART, RLENGTH); sub(/.*0x/, "", s)
|
||||
nj++; jfrom[nj] = i; jto[nj] = hex2num(s)
|
||||
}
|
||||
}
|
||||
for (g = 1; g <= ng; g++) {
|
||||
i = gt[g]
|
||||
if (window_dep(i + 1, i + 70)) exit 0
|
||||
}
|
||||
for (g = 1; g <= ng; g++) {
|
||||
a = addr[gt[g]]
|
||||
best = -1
|
||||
for (j = 1; j <= nj; j++) {
|
||||
t = jto[j]
|
||||
if (t <= a && a - t <= 1024 && t > best) best = t
|
||||
}
|
||||
if (best < 0) continue
|
||||
for (j = 1; j <= nj; j++) {
|
||||
if (jto[j] != best) continue
|
||||
if (window_dep(jfrom[j] + 1, jfrom[j] + 60)) exit 0
|
||||
}
|
||||
}
|
||||
exit 1
|
||||
}
|
||||
'
|
||||
|
||||
builds=1
|
||||
bins=()
|
||||
for a in "$@"; do
|
||||
case "$a" in
|
||||
--builds) builds=1 ;;
|
||||
--no-builds) builds=0 ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
-*) echo "未知参数: $a" >&2; usage; exit 2 ;;
|
||||
*) bins+=("$a") ;;
|
||||
esac
|
||||
done
|
||||
if [ "${#bins[@]}" -eq 0 ] && [ "$builds" -eq 0 ]; then
|
||||
usage; exit 2
|
||||
fi
|
||||
|
||||
fail=0
|
||||
for bin in "$@"; do
|
||||
[ -f "$bin" ] || { echo "FAIL 文件不存在: $bin"; fail=1; continue; }
|
||||
dis="$("$OD" -d --triple=mipsel "$bin" 2>/dev/null)" || {
|
||||
echo "FAIL objdump 失败: $bin"; fail=1; continue;
|
||||
}
|
||||
n_time32=$(printf '%s\n' "$dis" | grep -c '0x10a7' || true)
|
||||
n_time64=$(printf '%s\n' "$dis" | grep -c '0x1133' || true)
|
||||
printf '%-60s SYS_clock_gettime(4263)=%s clock_gettime64(4403)=%s\n' \
|
||||
"$bin" "$n_time32" "$n_time64"
|
||||
if [ "$n_time32" -lt 1 ]; then
|
||||
echo "FAIL $bin: 未找到 4263(o32 time32)取时路径"; fail=1
|
||||
|
||||
# ---- 主判据:构建脚本必须链 meow_time32.c 且启用 LIBC_OVERRIDES ----
|
||||
check_build() {
|
||||
target="$1"; script="$2"
|
||||
if [ ! -f "$ROOT/$script" ]; then
|
||||
echo "FAIL build $target: 构建脚本不存在: $script"; fail=1; return
|
||||
fi
|
||||
if [ "$n_time64" -ne 0 ]; then
|
||||
echo "FAIL $bin: 发现 4403(time64)路径(应有 0 处)"; fail=1
|
||||
# 拼接反斜杠续行,按 -o <target> 找真正产出该二进制的逻辑行。
|
||||
line=$(awk -v bin="$target" '
|
||||
{
|
||||
buf = (buf == "" ? $0 : buf " " $0)
|
||||
if (buf ~ /\\[ \t]*$/) { sub(/\\[ \t]*$/, "", buf); next }
|
||||
if (buf ~ ("(^|[ \t])-o[ \t]+" bin "([ \t]|$)")) print buf
|
||||
buf = ""
|
||||
}
|
||||
END {
|
||||
if (buf != "" && buf ~ ("(^|[ \t])-o[ \t]+" bin "([ \t]|$)")) print buf
|
||||
}
|
||||
' "$ROOT/$script")
|
||||
if [ -z "$line" ]; then
|
||||
echo "FAIL build $target: $script 中未找到 -o $target 的编译命令"; fail=1; return
|
||||
fi
|
||||
done
|
||||
has_src=no; has_macro=no
|
||||
case "$line" in *meow_time32.c*) has_src=yes ;; esac
|
||||
case "$line" in *-DMEOW_TIME32_LIBC_OVERRIDES*) has_macro=yes ;; esac
|
||||
printf 'build %-14s src=%-3s macro=%-3s (%s)\n' "$target" "$has_src" "$has_macro" "$script"
|
||||
if [ "$has_src" != yes ] || [ "$has_macro" != yes ]; then
|
||||
echo "FAIL build $target: 编译命令缺少 meow_time32.c 或 -DMEOW_TIME32_LIBC_OVERRIDES"
|
||||
fail=1
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$builds" -eq 1 ]; then
|
||||
echo "== 构建门禁(meow_time32.c + -DMEOW_TIME32_LIBC_OVERRIDES)=="
|
||||
while IFS='|' read -r target script; do
|
||||
[ -z "$target" ] && continue
|
||||
check_build "$target" "$script"
|
||||
done <<EOF
|
||||
$BUILD_TARGETS
|
||||
EOF
|
||||
fi
|
||||
|
||||
# ---- 辅助判据:二进制反汇编 ----
|
||||
if [ "${#bins[@]}" -gt 0 ]; then
|
||||
command -v "$OD" >/dev/null 2>&1 || { echo "缺少 objdump: $OD(可用 OBJDUMP=... 覆盖)" >&2; exit 2; }
|
||||
echo "== 二进制检查(4263/4403 + 16B 数据依赖写回)=="
|
||||
for bin in "${bins[@]}"; do
|
||||
[ -f "$bin" ] || { echo "FAIL 文件不存在: $bin"; fail=1; continue; }
|
||||
dis="$("$OD" -d --triple=mipsel "$bin" 2>/dev/null)" || {
|
||||
echo "FAIL objdump 失败: $bin"; fail=1; continue;
|
||||
}
|
||||
# 只匹配「把系统调用号装进寄存器」的指令:裸 grep 0x1133 会把分支偏移
|
||||
# (如 <.text+0x11338>)误判成残留 4403。
|
||||
n_time32=$(printf '%s\n' "$dis" | grep -cE 'addiu[[:space:]]+\$[0-9a-z]+,[[:space:]]*\$zero,[[:space:]]*0x10a7' || true)
|
||||
n_time64=$(printf '%s\n' "$dis" | grep -cE 'addiu[[:space:]]+\$[0-9a-z]+,[[:space:]]*\$zero,[[:space:]]*0x1133' || true)
|
||||
sem=FAIL
|
||||
if printf '%s\n' "$dis" | awk "$sem_awk"; then sem=OK; fi
|
||||
printf '%-52s 4263=%-2s 4403=%-2s 16B-layout=%s\n' \
|
||||
"$bin" "$n_time32" "$n_time64" "$sem"
|
||||
if [ "$n_time32" -lt 1 ]; then
|
||||
echo "FAIL $bin: 未找到 4263(o32 time32)取时路径"; fail=1
|
||||
fi
|
||||
if [ "$n_time64" -ne 0 ]; then
|
||||
echo "FAIL $bin: 发现 4403(time64)路径(应有 0 处)"; fail=1
|
||||
fi
|
||||
if [ "$sem" != "OK" ]; then
|
||||
echo "FAIL $bin: 4263 后无「ts32 缓冲→16 字节写回」数据依赖(疑似直接写调用方 8 字节/无宽度转换或无关联结构体写回)"; fail=1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
[ "$fail" -eq 0 ] && echo "ALL PASS" || echo "SOME TESTS FAILED"
|
||||
exit "$fail"
|
||||
@@ -27,23 +27,23 @@
|
||||
# ============================================================================
|
||||
|
||||
# ---- 用户态/服务守护二进制(usr/bin,全部 chmod 755 静态 MIPS)----
|
||||
patch_v2/bootmenu/meow_bootmenu|/usr/bin/meow_bootmenu|4441822d87e76bfce2ce584604ac3830|引导选单 M6.25(开机菜单/第二屏亮度按用户设置恢复:显示前读 settings.conf 写回,方案A)
|
||||
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/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|605646c4cc93f2baf29071ea6bc870ea|服务管理器 M2.77(+崩溃上报 meow_crash agent-187)
|
||||
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)
|
||||
patch_v2/meow_sysui/meow_sysui|/usr/bin/meow_sysui|173013cc8f0899b3001d0b894ac0d9e6|系统 UI(sysui)
|
||||
patch_v2/meow_sysui/meow_sysui|/usr/bin/meow_sysui|d33fa6bd71541875de7e373721d8c9d8|系统 UI(sysui);M43 链 meow_time32(o32 time32 取时/睡眠,修 time64 ABI;监督重启退避恢复真实毫秒)
|
||||
patch_v2/meowpkg/nyai|/usr/bin/nyai|ef7940ecf5ece993d718ac1d9019cc82|nyai M35 r1(cf5703b 重编:包身份以已签名 app.json 清单为准 + 暂存迁 SD 并必清理 + 修 exFAT 大小写绕过/fmt_utc 1/2 月/成员名/炸弹纵深;M39 同 commit 把钉值补上——此前仓库内 nyai 已是 ef7940ec 而清单仍钉 M2.97 的 a7d24553,从 main 打包固件会在此行 exit 1);继承 M2.97(M2.89 导出 exec 相对化 + 271 app.json depends 安装提示 agent-240/271)
|
||||
patch_v2/meow_svc_power/meow_svc_power|/usr/bin/meow_svc_power|39ae3aa255695a97f4281124c0621b52|电源专项服务(充电态权威源 mp2731-charger/status,修 battery/status 撒谎恒 Discharging)
|
||||
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|f02c4f45099157dc388b3d10b443aa57|系统级崩溃捕获 (agent-187) + log升级: 清理前缀扩 perf_/hang_ 承接1GB纪律 (337)
|
||||
patch_v2/meow_svc_perf/meow_svc_perf|/usr/bin/meow_svc_perf|566f0615698efe32c1f90a9c62f09148|性能专项服务 M2.75 + log升级(337:卡死快照+perf基线) + OOM治理C(348:Cached/Dirty监控降载, /tmp/meow_cachegov_c.state单点)
|
||||
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|891ab26475ef9e9931bf9147d265dce4|audiod 用户侧 CLI M6.34(+蓝牙P2 audio_output/OUT_BT codec 展示;monitor 实时电平表/文本电平条;status 补 rms/peak;0warning)
|
||||
patch_v2/meow_powermgr/meow_powermgr|/usr/bin/meow_powermgr|1ef2f8afc07acc7aa09dee9f7149aba8|功耗管理专项服务期2 M6.1(期1+history/top/events+mp2731 current_now 实测充电功率+WiFi 未关联档/BT rfkill 细化+系数路径 /data/meow/powermgr/;IPC 0xD0-D7)
|
||||
patch_v2/meow_powermgr/meow_powermgr|/usr/bin/meow_power|1ef2f8afc07acc7aa09dee9f7149aba8|meow_powermgr 的 CLI 形态(同二进制双形态,argv[0]=meow_power 即 CLI:status/estimate/model/history/top/events,policy 期3桩)
|
||||
patch_v2/meow_netmgrd/meow_netmgrd|/usr/bin/meow_netmgrd|20243ea1a800b29badefebb395603aaf|网络管理服务期6 M6.28(蓝牙P1 BT_CTL权威收口:hcitool con判连接/paired-devices补名/a2dp详情/connect-disconnect-pair-unpair-scan)
|
||||
patch_v2/meow_netmgrd/meow_netmgrd|/usr/bin/meow_net|20243ea1a800b29badefebb395603aaf|meow_netmgrd 的 CLI 形态(同二进制双形态,argv[0]=meow_net 即 CLI:status/iface/wifi/bt/rfkill/apps/conns/top/dns/policy/help;M6.28 蓝牙P1 BT_CTL收口)
|
||||
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_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/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,数字决定启动顺序,按文件名自然序)----
|
||||
@@ -61,7 +61,7 @@ patch_v2/bootmenu/S22brightness|/etc/init.d/S22brightness|1a0aa33d6f806f3f164816
|
||||
patch_v2/ntpsync/S45meow_ntpsync|/etc/init.d/S45meow_ntpsync|115e759274c8100391e3ede05a0578dc|新增:开机校时启动器(后台 setsid 拉起 meow_ntpsync -b -t 120,立即返回;失败/未安装不阻断 init;stop 只按 <锁目录>/<pid> 自证 + cmdline 核对后 kill,避免陈旧 pid 误杀)
|
||||
patch_v2/meow_sysui/S70meow_sysui|/etc/init.d/S70meow_sysui|e435affcb56499e5229728c6ae2524b9|sysui 自启 M2.85(launcher.conf enabled=1+迁移)
|
||||
patch_v2/meow_svcd/S89meow_svcd|/etc/init.d/S89meow_svcd|a1ef9d658d37bb7ed012cc9326840ac4|svcd 自启 M6.2(+amsd.conf 热更 exec→/usr/bin 迁移)
|
||||
patch_v2/meow_amsd/meow_amsd|/usr/bin/meow_amsd|b698f176210b07f760f874ea2bb10a14|活动管理器 M6.46 编入 M7 杀后台修复(am kill 与后台页按钮同通道:MSG_AMS_KILL 先打后台保活表走 meow_bg_terminate,无前台会话也能杀;cmd_kill/cmd_start 失败原因细分 connect failed/timeout,no reply;响应串保留 launcher offline 供 MeowPanel 503 映射);继承 M6.35(注册表自愈+busy 识别+显示名 UTF-8 整序列 name[49];批① FG/BG 收编:handle_bg/handle_fg+AMS_FG/BG 状态供批③后台管理页)
|
||||
patch_v2/meow_amsd/meow_amsd|/usr/bin/meow_amsd|486f489c2a57aa53c6b0c3cb82b345a5|活动管理器 M6.46 编入 M7 杀后台修复(am kill 与后台页按钮同通道:MSG_AMS_KILL 先打后台保活表走 meow_bg_terminate,无前台会话也能杀;cmd_kill/cmd_start 失败原因细分 connect failed/timeout,no reply;响应串保留 launcher offline 供 MeowPanel 503 映射);继承 M6.35(注册表自愈+busy 识别+显示名 UTF-8 整序列 name[49];批① FG/BG 收编:handle_bg/handle_fg+AMS_FG/BG 状态供批③后台管理页);M43 链 meow_time32(o32 time32 取时/睡眠,修 time64 ABI)
|
||||
patch_v2/meow_amsd/am|/usr/bin/am|9e323faf1aeb0c6a6fb0425565cf525d|amsd 用户侧CLI(+resolve/picker/rescan)
|
||||
patch_v2/bootmenu/S90meow_bootmenu|/etc/init.d/S90meow_bootmenu|e0ace111ce5ee446a1e3c6605ac1e9c9|bootmenu 自启 M2.85(注释同步)
|
||||
patch_v2/bootmenu/S92_03_start_music_player|/etc/init.d/S92_03_start_music_player|c17257aa3d93f75da72903b57cbe1034|§4.3 兜底 patch(rcS 正常路径被 S90 阻塞不执行)
|
||||
|
||||
Reference in new issue
Block a user