Files
MeowOS-For-R3P2/mips-repo/README.md
T

99 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 静态)。join `224.0.0.251:5353`,应答 `<host>.local` A + `_ssh._tcp.local` PTR/SRV/TXT;零 IPv6 依赖。部署到 TF `MeowOS/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` 前台(供
supervisor `fork/exec`+`waitpid` 托管)。
- **服务目录规则(双源板载优先)**:固件工具 → 板载 `/usr/data/meow/services.d/<name>.conf`(Data 区,
拔卡保留);TF 工具/第三方 → TF `MeowOS/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/`)**:
1. `mkdir -p bins/<tool>/bin`,写 `bins/<tool>/build.sh`(用 zig-mipsel-cc,`-Os -static`)。
2. 跑 `build.sh`,产出放 `bins/<tool>/bin/<tool>`。
3. 写 `bins/<tool>/manifest.md`:来源(如 Apple-OSS/mDNSResponder 版本)、ARCH、`file`
输出摘要、`ls -l` 大小、构建命令、安装路径(固件 or TF MeowOpt)。
- **应用包(进 `mpk/`)**:
1. 打包不含 data/cache 的 `MeowAPPs/<包名>/` → `mpk/<包名>.mpk`(或 `nyai export`)。
2. `nyai index mpk/` 生成/刷新 `Packages` 索引(供经源安装)。
3. `.mpk` 字段与安装语义见 `mpk/README.md` / `APPS.md 附录 §3`。
## 部署到哪里
- 体积小(约 <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}`)。