diff --git a/patch_v2/meow_launcherd/build_launcher.sh b/patch_v2/meow_launcherd/build_launcher.sh index 103f343..0fd9f60 100755 --- a/patch_v2/meow_launcherd/build_launcher.sh +++ b/patch_v2/meow_launcherd/build_launcher.sh @@ -22,7 +22,7 @@ ROOT="$HOME/Project/R3ProII" CC="$ROOT/.tools/zig-mipsel-cc" SYSROOT="$ROOT/.tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf" [ -f "../sdk/meow_ui.a" ] || { echo "!! 缺 ../sdk/meow_ui.a,先跑 sdk/build_sdk.sh"; exit 1; } -"$CC" -I"../sdk" -Os -static \ +"$CC" -I"../sdk" -Os -static -Wall -Wextra \ main_menu.c statusbar.c fb_compositor.c settings_page.c power_menu.c \ notif_center.c app_launcher.c audio.c backlight.c net.c about.c \ subpage.c wifi_page.c bt_page.c netmgr_ipc.c now_playing.c bg_page.c \ diff --git a/patch_v2/meow_launcherd/meow_launcher_internal.h b/patch_v2/meow_launcherd/meow_launcher_internal.h index cd1cacf..12c6568 100644 --- a/patch_v2/meow_launcherd/meow_launcher_internal.h +++ b/patch_v2/meow_launcherd/meow_launcher_internal.h @@ -269,7 +269,7 @@ static inline const char *meow_str_zh(const char *id, const char *zh) /* M2.71-bug5:App 前台触摸/交互 → SDK 写该标记;launcher 前台 app 循环消费(unlink + 重置息屏计时) */ #define MEOW_APP_ACTIVITY_FILE "/tmp/meow_app_activity" /* M40 F5/P5-P6:解锁/菜单关闭后强制 App 整帧重画的请求文件。launcher 在 SIGCONT 前写, - * SDK present 层(sdk/meow_ui_repaint.c)看到就 dirty_full() 一次并删除。 */ + * SDK present 层(sdk/meow_ui_repaint.h,static inline)看到就 dirty_full() 一次并删除。 */ #define MEOW_APP_REPAINT_FILE "/tmp/meow_app_repaint" /* ---- 共享结构体/枚举(来自 meow_launcherd.c,拆分后统一放置)---- */ diff --git a/patch_v2/ncm_app/build_ncm_host.sh b/patch_v2/ncm_app/build_ncm_host.sh index 6e3a2fb..765391e 100755 --- a/patch_v2/ncm_app/build_ncm_host.sh +++ b/patch_v2/ncm_app/build_ncm_host.sh @@ -17,9 +17,9 @@ INC="-I. -I../sdk -I../meow_launcherd -Icore \ -Ivendor/mbedtls/include -Ivendor/jsmn -Ivendor/qrcodegen/c -Ivendor/minimp3 -Ivendor/dr_flac" echo "==> host SDK objects" -SDK_SRC="meow_ui_time meow_ui_gfx meow_ui_sys meow_ui_theme meow_ui_vol meow_ui_log meow_ui_widget \ +SDK_SRC="meow_time32 meow_ui_time meow_ui_gfx meow_ui_sys meow_ui_theme meow_ui_vol meow_ui_log meow_ui_widget \ meow_ui_input meow_ui_activity meow_ui_dialog meow_ui_ime meow_ui_draw meow_ui_view \ - meow_ui_img meow_ui_config meow_ui_nav meow_ui_media meow_notify_ipc meow_pinyin \ + meow_ui_img meow_jpeg meow_png_stream meow_img_color meow_ui_config meow_ui_nav meow_ui_media meow_notify_ipc meow_pinyin \ meow_ui_audio meow_ui_anim meow_ui_box meow_ui_scroll meow_ui_str meow_cachegov" for f in $SDK_SRC; do $CC_HOST -O2 -c -DMEOW_UI_HOST_TEST -I"$SDK_DIR" -I"$ROOT/patch_v2/meow_launcherd" \ diff --git a/patch_v2/sdk/CLOCK_ABI.md b/patch_v2/sdk/CLOCK_ABI.md index d52047a..dc4d9d4 100644 --- a/patch_v2/sdk/CLOCK_ABI.md +++ b/patch_v2/sdk/CLOCK_ABI.md @@ -346,3 +346,14 @@ bash build_watchdog.sh host # time32 取时/睡眠 + 电源阈值矩阵 cd ../sdk gcc -Wall -Wextra -I. test_meow_repaint.c -o /tmp/tr && /tmp/tr ``` + +宿主(非 mips o32)走的是 `MEOW_TIME32_KERNEL_ABI=0` 的 libc 回退分支,所以「取时与 libc 一致」 +在宿主恒真;**真机取时路径由反汇编断言兜底**(不只看报文): + +``` +bash patch_v2/sdk/test_time32_abi.sh \ + patch_v2/meow_watchdog/meow_watchdog patch_v2/meow_launcherd/meow_launcherd +# 要求每个二进制:4263(0x10a7) ≥1 处、4403(0x1133) = 0 处 +``` + +M40 起 `build_sdk.sh` 与 `build_launcher.sh` 也带 `-Wall -Wextra`(0 warning 可复验)。 diff --git a/patch_v2/sdk/build_sdk.sh b/patch_v2/sdk/build_sdk.sh index c89b029..212bdd7 100755 --- a/patch_v2/sdk/build_sdk.sh +++ b/patch_v2/sdk/build_sdk.sh @@ -46,7 +46,7 @@ rm -f meow_ui.a *.o # -I../meow_launcherd:meow_notify_ipc.c 复用共享协议头 meow_ipc.h(同一份、杜绝两端漂移) OBJS="meow_time32 meow_ui_time meow_ui_gfx meow_ui_log meow_ui_notify meow_notify_ipc meow_ui_img meow_jpeg meow_png_stream meow_ui_widget meow_ui_input meow_ui_theme meow_ui_ime meow_pinyin meow_ui_sys meow_ui_vol meow_ui_activity meow_ui_global meow_ui_dialog meow_ui_config meow_ui_draw meow_ui_view meow_ui_nav meow_ui_media meow_ui_audio stb_image meow_ui_box meow_ui_anim meow_ui_scroll meow_lazygrid meow_select meow_ui_str meow_ui_ft meow_net_ipc meow_cachegov" -CFLAGS="-Os -static -I$ROOT/patch_v2/meow_launcherd" +CFLAGS="-Os -static -Wall -Wextra -I$ROOT/patch_v2/meow_launcherd" for f in $OBJS; do echo "== cc $f ==" "$CC" $CFLAGS $FT_INCS -c "$f.c" -o "$f.o" diff --git a/patch_v2/sdk/meow_ui_repaint.h b/patch_v2/sdk/meow_ui_repaint.h index d529181..9e75304 100644 --- a/patch_v2/sdk/meow_ui_repaint.h +++ b/patch_v2/sdk/meow_ui_repaint.h @@ -23,6 +23,8 @@ static inline const char *meow_ui_repaint_path(void) { + /* 每帧 getenv 很便宜(/tmp 是 tmpfs,只有一次 access);保持无状态便于宿主单测在运行中 + * 改路径。若后续实测有开销,可照 meow_ui_overlay_suppressed_active 的路径缓存改造。 */ const char *e = getenv("MEOW_APP_REPAINT_FILE"); return (e && e[0]) ? e : MEOW_APP_REPAINT_DEFAULT; } diff --git a/patch_v2/sdk/test_time32_abi.sh b/patch_v2/sdk/test_time32_abi.sh new file mode 100755 index 0000000..4392c18 --- /dev/null +++ b/patch_v2/sdk/test_time32_abi.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# test_time32_abi.sh — 反汇编断言:mipsel 二进制必须走 o32 time32 取时(4263), +# 不得残留 time64 入口(4403)。这是宿主 fallback 单测无法覆盖的「真机取时路径」证据。 +# +# 用法(任意目录): +# 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 +# 可用 OBJDUMP= 指定 objdump(默认 llvm-objdump)。 +# +# 期望:每个二进制 4263 出现 ≥1 次(time32 取时路径存在),4403 出现 0 次 +# (CLOCK_ABI.md §2.3:zig musl 把 time64 分支整段编掉,残留 4403 说明链接到了未修复的取时)。 +set -u + +OD="${OBJDUMP:-llvm-objdump}" +command -v "$OD" >/dev/null 2>&1 || { echo "缺少 objdump: $OD(可用 OBJDUMP=... 覆盖)" >&2; exit 2; } +[ "$#" -gt 0 ] || { echo "用法: $0 [...]" >&2; exit 2; } + +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 + fi + if [ "$n_time64" -ne 0 ]; then + echo "FAIL $bin: 发现 4403(time64)路径(应有 0 处)"; fail=1 + fi +done + +[ "$fail" -eq 0 ] && echo "ALL PASS" || echo "SOME TESTS FAILED" +exit "$fail"