fix(fw): M43 系统组件接入 o32 time32(9 组件 + meow_audio CLI)

- 构建脚本链 ../sdk/meow_time32.c + -DMEOW_TIME32_LIBC_OVERRIDES:
  sysui/svcd/bootmenu/amsd/netmgrd/crash/svc_perf/powermgr/meowpanel,
  以及 musl-static 的 meow_audio CLI(monitor 取时/轮询)
- meow_audiod 守护例外:glibc-2.22 time_t 32 位,无 musl time64 ABI 错位,不链
- 重编 10 个产物:反汇编 4263=3 / 4403=0,__clock_gettime 按 16 字节布局写回
- test_time32_abi.sh 收紧为 addiu 系统调用号匹配,避免 .text+0x1133x 偏移误报
- fw_content.conf 同步全部新 md5(清单逐行校验通过)
This commit is contained in:
AskaEth committed 2026-11-11 18:51:16 +08:00
1 parent 96c15a06ec
commit 884d4c4891
22 files changed
+58 -24

No files matched your search

+4 -1
View File
@@ -6,6 +6,9 @@ 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/按键长按/守候计时行为不变(修复后才是真实毫秒;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.
+4 -1
View File
@@ -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.
+7 -1
View File
@@ -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,9 @@ if [ "$1" = "cli" ]; then
fi
# meow_audiod:mipsel glibc-dynamic,BT 直链 libasound(-Llibbt -lasound)。-lpthread 供播放线程。
# M43 例外:本守护走 glibc-2.22(time_t 32 位、struct timespec 8 字节),头/实现 ABI 一致,
# 不存在 zig-musl 的 time64 头 vs time32 实现错位;meow_time32.c 的 __clock_* 接管是 musl 内部
# 符号,对 glibc 目标无意义且可能引入符号冲突,故**不链**。musl-static 的 meow_audio CLI 已链。
# 链接源 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.
+3 -1
View File
@@ -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.
+4 -1
View File
@@ -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.
+4 -1
View File
@@ -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.
+4 -1
View File
@@ -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.
+4 -1
View File
@@ -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.
+4 -1
View File
@@ -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.
+4 -1
View File
@@ -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.
+4 -2
View File
@@ -21,8 +21,10 @@ for bin in "$@"; do
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)
# 只匹配「把系统调用号装进 a0」的指令,不能裸 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)
printf '%-60s SYS_clock_gettime(4263)=%s clock_gettime64(4403)=%s\n' \
"$bin" "$n_time32" "$n_time64"
if [ "$n_time32" -lt 1 ]; then