# 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 -t _xxxx._tcp. -p `;`-b` 后台,`-P` pidfile, `-v 0..2` 调试,`-r` 同时绑 53,`-f ` 读服务清单。 - 权限:需 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。