MeowOS for HiBy R3 Pro II — 公共发布版本(历史已重置)

• 全新单提交:清除含敏感信息的旧历史(sudo 口令、内网 IP、SSH 密钥路径、热点 SSID、设备 MAC)
• 本地开发文档/测试记录/构建脚本全部移入 gitignored 的 devdocs/ 与 scripts/build/(不入库)
• 保留:MeowOS 源码(launcher/watchdog/bootmenu/meow_svcd/SDK)、项目规范文档、mips-repo
增补组件:SDK 统一日志+通知 API、meow_svcd 服务管理器、mips-repo 软件仓库
This commit is contained in:
MeowOS Dev committed 2026-08-30 01:12:34 +08:00
commit 245bee2946
136 files changed
+32730

No files matched your search

+38
View File
@@ -0,0 +1,38 @@
# mips-repo — MeowOS 板载 mipsel 软件仓库(宿主侧)
目标设备:R3 Pro II / MeowOS 固件(**mipsel-linux-muslsf**,静态,无 glibc 依赖)。
用途:存放针对该设备的交叉编译二进制与构建信息,便于**复用**到后续固件 / TF 卡
(MeowLib / MeowOpt 目录)。
## 仓库结构(每工具一个目录)
```
mips-repo/
README.md # 本文件
<tool>/
build.sh # 交叉编译脚本(可重复执行)
manifest.md # 元信息:来源/版本/arch/校验/产物路径/安装目标
bin/<tool> # 交叉编译产物(静态 mipsel,如存在)
```
## 当前已入库工具
- **mdnsd/**:Apple mDNSResponder-2881.0.25 交叉编译产物(`mipsel-linux-muslsf` 静态)。两种变体同在 `bin/`:
- `bin/mdnsd` = **SAResponder**(mDNSResponderPosix,单服务注册型,`-n/-f` 只发布/回指定服务)strip 后 **885.6 KB**;
- `bin/mdnsd.bin` = **完整 mdnsd** 守护进程(通用宿主响应器,回任意 `.local` 查询)strip 后 **994 KB**。
均远超固件 <200KB 阈值 → 按 mDNS 方案A 用**完整版**部署到 TF `MeowOpt/mdnsd/mdnsd`,由 meow_svcd 托管(需 root / setcap `cap_net_bind_service,cap_net_raw`)。详见 `mdnsd/manifest.md`。
## 目标架构与工具链
- 架构:`mipsel`(MIPS32r2, little-endian)
- 运行库:`musl`(静态链接,避免 libc 版本/动态加载差异)
- 交叉编译器:`~/.tools/zig-mipsel-cc`(zig 目标 mips-linux-musl)
- 目标静态库 sysroot:`~/.tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf`
## 新增一个工具的流程
1. `mkdir -p <tool>/bin`,写 `<tool>/build.sh`(用 zig-mipsel-cc,`-Os -static`)。
2. 跑 `build.sh`,产出放 `<tool>/bin/<tool>`。
3. 写 `<tool>/manifest.md`:来源(如 Apple-OSS/mDNSResponder 版本)、ARCH、`file`
输出摘要、`ls -l` 大小、构建命令、安装路径(固件 or TF MeowOpt)。
## 部署到哪里
- 体积小(约 <200KB)→ 可直接打进固件(/usr/bin 或由 supervisor 启动)。
- 体积大 → 放 TF 卡 `MeowOpt/<tool>/`,由 MeowOS 启动时从卡加载(拔卡降级不崩)。
- **按需取用**:从 `MeowOpt/<tool>/` 按需部署,不一定要全部入库;若某工具体积仍偏重(如 mdnsd 的 885~994KB),可评估更小方案(OpenWrt linkd / libmdns,或自研极简响应器——仅回 A 记录 + `_ssh` 服务)以塞进固件 <200KB。
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+71
View File
@@ -0,0 +1,71 @@
#!/usr/bin/env bash
#
# build.sh — 交叉编译 Apple mDNSResponder 的 POSIX 精简变体 SAResponder(mipsel-linux-muslsf,静态)
#
# 目标架构 : mipsel (MIPS32r2 little-endian), musl, 静态链接, 无 glibc 依赖
# 交叉编译器: zig (目标 mips-linux-musl / mipsel-linux-musleabi),由 ~/Project/R3ProII/.tools/zig-mipsel-cc 包装
# 产物 : bin/mdnsd = SAResponder (mDNSResponderPosix) —— 本脚本构建,无 UDS/IPC 的精简响应器
# bin/mdnsd.bin = 完整 mdnsd 守护进程(上一轮产物,作为对照保留,需重编译见文件尾注释)
# 用途 : MeowOS (R3 Pro II) 板载 mDNS 响应器,回应 .local 查询
#
# 用法 : ./build.sh # 默认构建 SAResponder → bin/mdnsd
#
# 可复现性 : 源码按固定 commit SHA 下载(codeload sha 方式),产物大小/校验值稳定。
set -euo pipefail
REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
BIN_DIR="$REPO_DIR/bin"
WORK="$REPO_DIR/.build"
# ---- 工具链(本机实际路径;zig-mipsel-cc 内部也用 $HOME/Project/R3ProII/.tools)----
ZIGCC="${ZIGCC:-$HOME/Project/R3ProII/.tools/zig-mipsel-cc}"
# ---- 固定源码版本:apple-oss-distributions/mDNSResponder 2881.0.25 ----
MDNS_SHA="${MDNS_SHA:-d4658af3f5f291311c6aee4210aa6d39bda82bbe}"
MDNS_VER="${MDNS_VER:-2881.0.25}"
TARBALL_URL="https://codeload.github.com/apple-oss-distributions/mDNSResponder/tar.gz/${MDNS_SHA}"
TARBALL="$WORK/mDNSResponder-${MDNS_VER}.tar.gz"
SRCDIR="$WORK/src"
mkdir -p "$BIN_DIR" "$WORK"
echo "==> [1/4] 获取源码 mDNSResponder-$MDNS_VER (commit ${MDNS_SHA:0:12})"
if [ ! -f "$TARBALL" ]; then
curl -fsSL --retry 4 --retry-all-errors -o "$TARBALL" "$TARBALL_URL"
fi
gzip -t "$TARBALL" >/dev/null 2>&1 || { echo "错误: 源码包校验失败"; exit 1; }
rm -rf "$SRCDIR"
mkdir -p "$SRCDIR"
tar xzf "$TARBALL" -C "$SRCDIR" --strip-components=1
echo "==> [2/4] 交叉编译 SAResponder (zig: mipsel-linux-musleabi, -Os -static, tls=no)"
cd "$SRCDIR/mDNSPosix"
# 说明:
# - os=linux : 选定 Linux 平台分支 (CFLAGS_OS)
# - tls=no : 关闭 TLS 支持,避免链接 mbedtls (嵌入式设备不需要)
# - CC/LD=$ZIGCC : 强制 zig 交叉编译器,不用宿主 gcc
# - CFLAGS="-Os -static" : -Os 体积优化 + 静态链接;-Wno-date-time 关掉 zig/clang
# 默认的 -Werror -Wdate-time (源码用了 __DATE__/__TIME__ 宏)
# - LINKOPTS="-s" : 链接时直接 strip 符号表 + 调试信息,产出部署版。
# 注意 SAResponder 的链接规则里没有 $(STRIP) $@ 这一行,
# 唯一的 strip 来源就是这个 -s(勿依赖 STRIP=true)
# - SAResponder 目标 : 无 UDS/IPC 的独立响应器,产物 build/prod/mDNSResponderPosix
make os=linux tls=no \
CC="$ZIGCC" CFLAGS="-Os -static -Wno-date-time" \
LD="$ZIGCC" LINKOPTS="-s" STRIP=true SAResponder
echo "==> [3/4] 放置产物 $BIN_DIR/mdnsd (SAResponder)"
install -m 755 build/prod/mDNSResponderPosix "$BIN_DIR/mdnsd"
echo "==> [4/4] 校验"
file "$BIN_DIR/mdnsd"
echo "--- 体积 (静态部署版, strip 后) ---"
ls -l "$BIN_DIR/mdnsd"
echo "字节数: $(stat -c %s "$BIN_DIR/mdnsd")"
echo "MD5 : $(md5sum "$BIN_DIR/mdnsd" | cut -d' ' -f1)"
echo "构建完成: $BIN_DIR/mdnsd"
echo
echo "提示: bin/mdnsd.bin 为上一轮的完整 mdnsd 守护进程(1,018,144 B, md5 fcb0a8ae5ad5696253a6ec56b3e585e6),"
echo " 仅作对照保留。如需重编译完整 mdnsd 放到 mdnsd.bin,改目标为 Daemon 即可:"
echo " make os=linux tls=no CC=\"\$ZIGCC\" CFLAGS=\"-Os -static -Wno-date-time\" LD=\"\$ZIGCC\" LINKOPTS=\"-s\" Daemon"
echo " install -m 755 build/prod/mdnsd \"$BIN_DIR/mdnsd.bin\""
+76
View File
@@ -0,0 +1,76 @@
# mdnsd — Apple mDNSResponder 的 POSIX 精简变体 SAResponder(mipsel-linux-muslsf 静态)
> 本目录现以 **SAResponder(mDNSResponderPosix,无 UDS/IPC 的精简响应器)** 为部署目标。
> 其目标名对应上游 `mDNSPosix/Makefile` 的 `SAResponder`,产物 `build/prod/mDNSResponderPosix`。
> 完整 mdnsd 守护进程(上一轮产物)保留为 `bin/mdnsd.bin`(见下"与 mdnsd 对比")。
## 来源
- 项目 : apple-oss-distributions/mDNSResponder
- 版本 : mDNSResponder-2881.0.25
- commit : d4658af3f5f291311c6aee4210aa6d39bda82bbe
- 许可 : Apache-2.0
- 获取 : https://codeload.github.com/apple-oss-distributions/mDNSResponder/tar.gz/<SHA>
- 源码 : mDNSPosix/(Responder.c,独立响应器 main;非 PosixDaemon.c),tls=no(关闭 mbedtls)
## ARCH / 运行库
- ARCH : mipsel(MIPS32r2 little-endian)
- 编译目标 : mipsel-linux-musleabi(soft-float,对应 MeowOS 的 muslsf)
- 运行库 : musl,静态链接(-static),无 glibc 依赖
## file 结果(部署版 = bin/mdnsd)
ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, stripped
- readelf 复核:无 `.debug_*` / `.symtab` / `.strtab`(真正 strip;仅剩 MIPS 必有的 .mdebug.abi32 / .pdr ABI 元数据段)。
## 体积(关键)
- 未 strip(含 -g 调试信息,make 标准链接 `LINKOPTS=""`) : 3,197,588 字节 ≈ 3122.6 KB ≈ 3.05 MB
(file 判:`with debug_info, not stripped`;md5 33f8fcef0a4df5e907f75b6913d2fe23)
- **strip 后部署版(正式部署体积,`LINKOPTS=-s`)** : **906,864 字节 ≈ 885.6 KB ≈ 0.865 MB ← 以此为准**
- md5 (strip 后) : **3361b1a062d39372a30eff0a5a1f1725**
## 构建命令摘要
见同目录 build.sh。要点(目标由上一轮的 `Daemon` 改为 `SAResponder`):
make os=linux tls=no \
CC="$HOME/Project/R3ProII/.tools/zig-mipsel-cc" \
CFLAGS="-Os -static -Wno-date-time" \
LD="$HOME/Project/R3ProII/.tools/zig-mipsel-cc" \
LINKOPTS="-s" STRIP=true SAResponder
- 目标 `SAResponder`:构造对象 = SPECIALOBJ(13 个) + mDNS.c.o + Responder.c.o,**不含** UDS/IPC 相关对象
(去掉了 PosixDaemon.c.o、uds_daemon.c.o、dnssd_ipc.c.o、ClientRequests.c.o;以 Responder.c.o 作 main)。
- os=linux : 平台分支
- tls=no : 关 mbedtls(嵌入式不需要)
- CFLAGS -Os -static: 体积优化 + 静态链接
- -Wno-date-time : 关掉 zig/clang 默认的 -Werror -Wdate-time(源码用了 __DATE__/__TIME__)
- LINKOPTS=-s : 链接时直接 strip,产出部署版。
注意 `mDNSResponderPosix` 的链接规则里**没有** `$(STRIP) $@` 这一行,唯一 strip 来源就是这个 `-s`(勿依赖 STRIP=true)。
- 一次跑通,仅 Responder.c 报告 6 条无害 warning(unused parameter / set-but-not-used,非错误)。
## 功能差异(关键,勿当 mdnsd 的等价替代)
- SAResponder 是**单服务注册型**独立响应器:必须用 `-n <服务名>` 或 `-f <服务文件>` 指定要发布/回应的服务,
默认服务类型 `_afpovertcp._tcp.`、端口 548。它注册**一个**服务并回应针对该服务的 .local 查询。
- mdnsd(bin/mdnsd.bin)是**通用宿主响应器**:读网络接口、监听组播 224.0.0.251:5353,回应宿主下任意 .local 查询。
- 用途选择:若只需"板载发布单服务"→ 用 SAResponder;若需"通用 .local 解析"→ 用 mdnsd(bin/mdnsd.bin)。
## 与 mdnsd 对比(994 KB → 885.6 KB)
| 变体 | strip 后 | 未 strip | file |
|---|---|---|---|
| SAResponder(bin/mdnsd) | **906,864 B = 885.6 KB**(md5 3361b1a0…) | 3,197,588 B = 3122.6 KB | stripped, static |
| 完整 mdnsd(bin/mdnsd.bin) | 1,018,144 B = 994 KB(md5 fcb0a8ae…) | 3,549,496 B = 3466 KB | stripped, static |
- 差值仅 **~109 KB(约 11%)**。去掉 UDS/IPC 并未显著变小,因为体积大头在 mDNS 核心
(mDNS.c、DNSCommon.c、uDNS.c、dso 系),而非 IPC 层。
## 部署建议(结论:TF,不进固件)
- **885.6 KB 远超 <200KB 阈值 → 放 TF 卡 `MeowOpt/mdnsd/mdnsd`**(若只需单服务),由 MeowOS 启动时从卡加载(拔卡降级不崩)。
- 若需通用 .local 回应,部署 `mdnsd.bin`(原完整守护进程,同样放 TF)。
- 启动/参数(SAResponder):`mdnsd -b -n <name> -t _xxxx._tcp. -p <port>`;`-b` 后台,`-P` pidfile,
`-v 0..2` 调试,`-r` 同时绑 53,`-f <file>` 读服务清单。
- 权限:需 root(或 setcap cap_net_bind_service,cap_net_raw)以绑定 5353/53 并加组播。
- 验证:`qemu-mipsel bin/mdnsd -h` → 打印 Usage 后以 exit 1 退出(预期用法退出,程序可运行)。
## bin/ 内容
- `bin/mdnsd` = SAResponder(mDNSResponderPosix)strip 后部署版(906,864 B)
- `bin/mdnsd.bin` = 完整 mdnsd 守护进程 strip 后(1,018,144 B),对照保留
## 备选(评估)
- 若 885 KB 仍偏重:改用 OpenWrt linkd / libmdns 或自研极简响应器(仅响应 .local 查询)。
理由:纯 mDNS 查询响应是轻需求,完整 Bonjour 栈(DNSCommon/uDNS/dso/GenLinkedList 等核心)即占 ~880KB,
在无动态链接的静态 musl 下已很难再压到 <200KB。