Files
MeowOS-For-R3P2/mips-repo/bins/mdnsd/manifest.md
T

5.2 KiB
Raw Blame History

mdnsd — Apple mDNSResponder 的 POSIX 精简变体 SAResponder(mipsel-linux-muslsf 静态)

本目录现以 SAResponder(mDNSResponderPosix,无 UDS/IPC 的精简响应器) 为部署目标。 其目标名对应上游 mDNSPosix/Makefile 的 SAResponder,产物 build/prod/mDNSResponderPosix。 完整 mdnsd 守护进程(上一轮产物)保留为 bin/mdnsd.bin(见下"与 mdnsd 对比")。

来源

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。