• 全新单提交:清除含敏感信息的旧历史(sudo 口令、内网 IP、SSH 密钥路径、热点 SSID、设备 MAC) • 本地开发文档/测试记录/构建脚本全部移入 gitignored 的 devdocs/ 与 scripts/build/(不入库) • 保留:MeowOS 源码(launcher/watchdog/bootmenu/meow_svcd/SDK)、项目规范文档、mips-repo 增补组件:SDK 统一日志+通知 API、meow_svcd 服务管理器、mips-repo 软件仓库
5.2 KiB
5.2 KiB
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/
- 源码 : 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后台,-Ppidfile,-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。