Files
MeowOS-For-R3P2/scripts/build/rebuild_binaries.sh
T
AskaEth 31d4c22806 fix(fw): M51 刷机前批次 — 5 组二进制从最新 main 重编 + 钉值回写 + 语义指纹自证
本轮终结「二进制与源码两条轨道各走各的」:M23/M43/M47/M49/M50 只交源码,产物统一由本单
从 main 5a06a8c 一次重编。重编后 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 反汇编判据逐条断言。
2026-11-11 20:29:21 +08:00

98 lines
5.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"