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