本轮终结「二进制与源码两条轨道各走各的」: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 反汇编判据逐条断言。
98 lines
5.0 KiB
Bash
Executable File
98 lines
5.0 KiB
Bash
Executable File
#!/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"
|