mips-repo — MeowOS 板载 mipsel 软件仓库(宿主侧)
目标设备:R3 Pro II / MeowOS 固件(mipsel-linux-muslsf,静态,无 glibc 依赖)。
用途:存放针对该设备的交叉编译二进制与构建信息,便于复用到后续固件 / TF 卡
(MeowOS/opt 目录;MeowLib 未定义/未用——MeowOpt 与 MeowOS/opt 命名需归一:代码用 MeowOS/opt,文档 MeowOpt 指卡上外部工具目录。[源:审计 2026-08-30])。
仓库结构(两半:bins/ 普通二进制工具 + mpk/ .mpk 软件包)
mips-repo/
README.md # 本文件
bins/ # 「普通二进制/工具」仓库:交叉编译产物 + 构建/元信息
<tool>/
build.sh # 交叉编译脚本(可重复执行;可搬,路径相对本目录)
manifest.md # 元信息:来源/版本/arch/校验/产物路径/安装目标
bin/<tool> # 交叉编译产物(静态 mipsel,如存在)
(<tool>.c 源码如自研也放此)
mpk/ # 「.mpk 文件」仓库:MeowAPPs 软件包(.mpk = tar.gz)
README.md # .mpk 规范说明(格式/字段/安装)
<pkg>.mpk # 成品包(app.json + meow 二进制 + 资源;不含 data/cache)
两者定位不同:
bins/是宿主侧工具(服务/二进制,如 mDNS 应答器、netd),由 meow_svcd 托管、打进固件或按需从卡MeowOS/opt/<tool>/部署;mpk/是应用层 软件包(MeowAPP 分发单元),用nyai安装到MeowAPPs/<包名>/。
当前已入库工具
bins/(普通二进制 / 工具仓库)
- bins/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。 ⚠️ 实测(内核无 IPv6)两者均失败:socket AF_INET6: Address family not supported by protocol;且即便make HAVE_IPV6=0编译通过、daemon 能跑,也不发布主机名 A 记录(IPC 服务型守护进程,等客户端注册)。故 mDNS 方案A 判为不达标,由bins/meow_mdns/替代(见下)。
- bins/meow_mdns/:自研极简 IPv4-only mDNS 应答器(~77.6 KB,
mipsel-linux-muslsf静态)。join224.0.0.251:5353,应答<host>.localA +_ssh._tcp.localPTR/SRV/TXT;零 IPv6 依赖。部署到 TFMeowOS/opt/mdnsd/mdnsd(95 KB < 阈值,可考虑进固件,实际已改板载/usr/bin/meow_mdns,见下)。详见bins/meow_mdns/manifest.md。⚠️ 手机热点丢弃客户端间组播→ 设备能应答、主机收不到(avahi 只认组播应答),avahi-resolve *.local仍超时(网络层热点隔离,非应答器缺陷),需主机 DNS 兜底。
mpk/(.mpk 软件包仓库)
- 目前为空(仅
README.md说明规范)。MeowAPPs 成品包.mpk集中放此,供nyai经sources.list(本地源 =MeowOS/opt/repo)或nyai install <x.mpk>直接安装。
目标架构与工具链
- 架构:
mipsel(MIPS32r2, little-endian) - 运行库:
musl(静态链接,避免 libc 版本/动态加载差异) - 交叉编译器:
~/.tools/zig-mipsel-cc(zig 目标 mips-linux-musl) - 目标静态库 sysroot:
~/.tools/mipsel-linux-muslsf-cross/mipsel-linux-muslsf
服务管理:meow_svcd CLI(托管 bins/ 下的服务)
bins/ 里的常驻服务(如 meow_mdns)由 meow_svcd(类 systemd/systemctl,固件
/usr/bin/meow_svcd,板载 etc/init.d/S89meow_svcd 开机自启)托管,SSH 到设备后可直接用:
meow_svcd status # 列出所有服务与状态(card_present/wifi_up/services=N)
meow_svcd restart meow_mdns # 重启单服务(如板载 mDNS 应答器)
meow_svcd stop all # 停止全部服务
meow_svcd reload # 重读板载+TF 双源 services.d
meow_svcd start meow_mdns # 启动单服务
meow_svcd pid # 打印守护进程 pid
- 控制走 AF_UNIX 单行文本,默认 socket
/tmp/meow_svcd.sock;应答OK/ERR no-such-service/ 多行svc=<name> state=… pid=… restart=… exit=…。守护默认后台;-f/--foreground前台(供 supervisorfork/exec+waitpid托管)。 - 服务目录规则(双源板载优先):固件工具 → 板载
/usr/data/meow/services.d/<name>.conf(Data 区, 拔卡保留);TF 工具/第三方 → TFMeowOS/services.d/<name>.conf(随卡存在/消失);同名板载优先(TF 被屏蔽 + WARN)。 - 详见
patch_v2/meow_svcd/meow_svcd.md/docs/MEOWOS_SPEC_REF.md §4。
应用包:.mpk 规范 & nyai
.mpk 是 MeowOS 的应用分发单元(MeowAPPs),规范与 nyai 用法见 APPS.md 附录 §3(.mpk) / §5(nyai)。
要点:
- 包名 = 文件名茎 =
app.json的package(如os.meow.hello→os.meow.hello.mpk)。 - 格式:
.mpk= tar.gz,含app.json+meow二进制 + 资源,不含 data/cache(运行时按设备生成)。 - 安装:
nyai install <pkg或文件.mpk>;nyai index <dir>为目录生成Packages索引 (Package/Version/Filename/Size/SHA256/Depends/Description);nyai export <pkg>打包导出。 - 部署
nyai:MeowOS/opt/bin/nyai(卡,随 TF_CARD_LAYOUT 外围工具目录)。M2.12+ 固件meow_card_path.sh已前插MeowOS/opt/bin可直呼;更早固件上 SSH 需绝对路径/usr/data/mnt/sd_0/MeowOS/opt/bin/nyai或export PATH=/usr/data/mnt/sd_0/MeowOS/opt/bin:$PATH。
新增一个工具/包的流程
- 工具(进
bins/):mkdir -p bins/<tool>/bin,写bins/<tool>/build.sh(用 zig-mipsel-cc,-Os -static)。- 跑
build.sh,产出放bins/<tool>/bin/<tool>。 - 写
bins/<tool>/manifest.md:来源(如 Apple-OSS/mDNSResponder 版本)、ARCH、file输出摘要、ls -l大小、构建命令、安装路径(固件 or TF MeowOpt)。
- 应用包(进
mpk/):- 打包不含 data/cache 的
MeowAPPs/<包名>/→mpk/<包名>.mpk(或nyai export)。 nyai index mpk/生成/刷新Packages索引(供经源安装)。.mpk字段与安装语义见mpk/README.md/APPS.md 附录 §3。
- 打包不含 data/cache 的
部署到哪里
- 体积小(约 <200KB)→ 可直接打进固件(/usr/bin 或由 supervisor/meow_svcd 启动)。
- 体积大 → 放 TF 卡
MeowOS/opt/<tool>/,由 MeowOS 启动时从卡加载(拔卡降级不崩)。 - 按需取用:从
MeowOS/opt/<tool>/按需部署,不一定要全部入库;若某工具体积仍偏重(如 mdnsd 的 885~994KB),可评估更小方案(OpenWrt linkd / libmdns,或自研极简响应器——仅回 A 记录 +_ssh服务)以塞进固件 <200KB。 .mpk→ 经nyai装到MeowAPPs/<包名>/(数据建MeowData/<包名>/{data,cache})。