docs(repo): 仓库公开文档同步到 M2.73/0.7.68 + 修 fw_content.conf 过期 md5(meow_svcd da6ebc66/meow_svc_perf fa073bf9, 否则打包 md5 强校验失败中止) (agent-171)

This commit is contained in:
MeowOS committed 2026-08-31 01:41:11 +08:00
1 parent ae51fe9f70
commit c515a33ac4
7 files changed
+44 -26

No files matched your search

+18 -11
View File
@@ -3,7 +3,7 @@
> 把 HiBy R3 Pro II 便携播放器(君正 X1600,MIPS32r2 / mipsel / musl 静态软浮点,480×720,无 GPU 软渲染)变成一个可扩展的「第二系统 + 应用框架」。
> MeowOS 与官方 HibyOS 共存于同一台设备:开机由引导选单二选一;启动后 MeowOS 作为主控层,提供自己的桌面 UI、应用框架、服务管理与系统组件。
>
> 版本:**M2.71(0.7.66)**(版本号单点 = 板上 `/etc/meowos_version`,见「构建」)。
> 版本:**M2.73(0.7.68)**(M2.73 已推卡真机验收;M2.74 / 0.7.69 待打)。版本号单点 = 板上 `/etc/meowos_version`,见「构建」。
>
> 许可证:Apache-2.0(见 [`LICENSE`](LICENSE))。本仓库为非官方第三方项目。
@@ -15,7 +15,7 @@
- **双系统共存**:官方 HibyOS 原样保留;开机引导选单决定本次进入哪个系统(MeowOS / HibyOS),两者互斥运行,任一时刻只跑一个。
- **应用框架**:一套 C 应用 SDK(`meow_ui`),第三方 App 用统一控件 / 输入 / 主题 / 字体 / 通知 API 开发,无需自读帧缓冲、自读输入、自管返回——把每个 App 都要踩一遍的坑收口到框架里。
- **系统组件**:状态栏、通知中心、电源菜单、全局左缘返回手势、主界面(应用列表)、设置页、服务管理器、mDNS 广播;系统进程总监 `meow_sysui`(M2.71);专项子服务 `meow_svc_perf` / `meow_svc_power`(一期在跑);MeowPanel 外部管理面板。
- **系统组件**:状态栏、通知中心、电源菜单、全局左缘返回手势、主界面(应用列表)、设置页、服务管理器、mDNS 广播;系统进程总监 `meow_sysui`(M2.71);专项子服务 `meow_svc_perf` / `meow_svc_power`(M2.73 已落地:perf 含 network 采集、power 含升级写保护 + dac 真实音量,见 §2.9);MeowPanel 外部管理面板(SDK 控件库 M2.73 修复 W_LIST 视口裁剪 / 残影脏区 / IME 行为,见 §2.4)。
- **进程隔离**:系统 UI 渲染进程与 App 进程相互独立,App 卡死不会冻结整个 UI。
**面向谁**:
@@ -51,7 +51,7 @@ init (rcS)
```
- **进程总监 `meow_sysui`(M2.71 已落地,`/usr/bin/meow_sysui` + `S70meow_sysui`)**:监管系统进程,**一个崩→只拉起它,绝不级联、绝不拖垮自身**。自身最小依赖、不渲染、不承载重逻辑 → 最稳。当前默认只监护 `meow_svcd`(launcher 仍由 bootmenu 的 `execv` 拥有,`enabled=0` 防双重拉起,移交见后端让位);`meow_mdns` 是 svcd 的服务子进程(不双重管理)。配置 `sysui.d/` 目录式(复用 services.d 语义),见 `patch_v2/meow_sysui/meow_sysui.md` 与 `docs/MEOWOS_SPEC_REF.md` §4。
- **专项子服务(一期在跑,规划见 `devdocs/plan/SYSTEM_FRAMEWORK_SERVICES.md`)**:新增两个 **svcd 托管、板载 `trigger=boot`** 的专项子服务——`meow_svc_perf`(性能 / 系统只读聚合)、`meow_svc_power`(关机 / 重启 / 升级 / 回 HiBy 系统动作)。launcher 电源菜单与 MeowPanel 改经这些服务 IPC 触发,不再直连 `sys_do_reboot`/爬 `/proc`。电源 CLI `meow_svc_power <cmd>`(root 免鉴权、单一命令、不覆盖系统 shutdown/reboot)。**二期**补关键 IPC 只接受 `os.meow.*` 鉴权 + `.mpk` 打包签名验签。
- **专项子服务(M2.73 已落地,规划见 `devdocs/plan/SYSTEM_FRAMEWORK_SERVICES.md`)**:新增两个 **svcd 托管、板载 `trigger=boot`** 的专项子服务——`meow_svc_perf`(性能 / 系统只读聚合,含 network)、`meow_svc_power`(关机 / 重启 / 升级 / 回 HiBy 系统动作,含升级写保护 + dac 真实音量)。launcher 电源菜单与 MeowPanel 改经这些服务 IPC 触发,不再直连 `sys_do_reboot`/爬 `/proc`。电源 CLI `meow_svc_power <cmd>`(root 免鉴权、单一命令、不覆盖系统 shutdown/reboot)。**二期**补关键 IPC 只接受 `os.meow.*` 鉴权 + `.mpk` 打包签名验签。详见 §2.9。
- **隔离保证(现已落地)**:系统组件各自独立进程;App 进程与系统 UI 渲染进程独立;svcd 的**每个服务是独立子进程**(服务崩只重启该服务,不拖垮 svcd)。任何 App / 服务崩溃都不冻结系统 UI。
### 2.2 双系统引导(bootmenu)
@@ -100,6 +100,7 @@ init (rcS)
**SDK 控件库(统一控件架构,M2.70/M2.71 两批落地,见 `MEOW_APP_SDK.md` §5.8)**:
- **第一批 = 通用基座(M2.70/0.7.65)**:`meow_widget` 基座统一标准控件与自定义画布;`meow_widget_opts`(Modifier 式通用 Options,`meow_widget_set_opts`);统一状态机 `MEOW_WS_ENABLED/SELECTED/FOCUSED/PRESSED`(`meow_widget_set_state`);`meow_widget_custom_create`(自定义画布,App 提供 render/hit 回调);布局 `meow_row/column/box` + `meow_layout_add/arrange` + `spacer`;主题接口 `meow_ui_set_style` / `meow_theme_get`(MD3/MIUIx × 明暗 + 背景全局源)。
- **第二批 = Material 组件子集(M2.71/0.7.66)**:Button 五型(`meow_btn_create_variant`)/ TextField(IME)/ Card / Divider / Badge / Checkbox / Radio / ProgressBar / FAB / TopAppBar / NavigationBar / TabBar / LazyColumn/LazyRow / Dialog / BottomSheet。
- **M2.73 控件库修复(`meow_ui.a` md5 `e8341975`,见 `MEOW_APP_SDK.md` §5.8)**:`W_LIST`(含 LazyColumn/LazyRow)**视口裁剪**——滚动时只绘制落在视口内的行/分隔线/文本,杜绝「行滚出视口把内容画到视口外并标脏上屏」导致的标题栏/底部脏区(SDK 全局生效,非 App 侧)。z 序:**App 侧 `d_paint_region`**(`hello_app`)局部刷新时按 z 栈重画(内容→标题→slider 值→chrome),根治「层动态控件实时重绘盖住/抹掉上层 FAB」;**SDK 级全局 z 序方案在评估,暂未落定(标注)**。IME(`meow_ui_ime.c`):键盘区背景快照/恢复(无残影)、配色走主题、shift 大小写、阻塞 `meow_ui_text_input` 喂 `on_tick`(避免进度条卡死)、OK(回车)= 提交并关闭 / ESC = 取消并关闭、回显条=实时输入回显(非候选/联想,候选框留中文输入法)。渲染:局部刷新不再清底重画单个控件(改 z 栈重画),消除重叠区残留。
- 既有 `meow_btn/slider/switch/list_create` 签名一字不改(向后兼容),Options/状态机走新增挂载器。
### 2.5 服务
@@ -108,6 +109,7 @@ init (rcS)
- **双源 services.d**:板载 `/usr/data/meow/services.d/<name>.conf`(Data 区,拔卡保留,权威优先)+ TF `MeowOS/services.d/<name>.conf`(随卡存在/消失)。同名**板载优先**(TF 被屏蔽 + WARN)。
- 目录式 `key=value`:`exec`(必填)/`args`/`env`/`enabled`/`restart`/`backoff_ms`/`max_restart`/`trigger`(`boot`/`card-mount`/`wifi-up`,默认 `card-mount`)。
- 状态机 `DISABLED/STOPPED/RUNNING/STOPPING/FAILED`;CLI(SSH 直呼):`status` / `reload` / `start|stop|restart <name|all>` / `pid`。
- **M2.73 悬垂指针修复(md5 `da6ebc66`)**:`scan_and_reconcile` 用 `*s=tmp` 整体拷贝后 `s->argv[]` 曾指向已销毁栈帧 → `execv`/`/proc/pid/cmdline` 错乱;新增 `svc_rebuild_argv` 重定位到服务自身 `exec`/`argbuf`(删除服务后同 tick 拉起不再错位)。
- **meow_mdns(mDNS 应答器,自研)**:`/usr/bin/meow_mdns`,**IPv4-only**(该设备内核无 IPv6,完整 mDNSResponder/SAResponder 均无法运行),应答 `<host>.local` 的 A 记录与 `_ssh._tcp` 的 PTR/SRV/TXT。由 `meow_svcd` 托管(板载 `services.d/mdnsd.conf`,`trigger=boot`)。
- **hostname = `meowos`**(设置键 `system.hostname`,缺省 `meowos`;`S89meow_svcd` 开机 `sethostname`)→ 即 `meowos.local`。
- 注:手机热点会丢弃设备→主机的组播应答,`avahi-resolve meowos.local` 在上网热点下会超时(网络层热点隔离,非应答器缺陷),主机可用 DNS 兜底。
@@ -142,17 +144,20 @@ init (rcS)
把**系统复用功能收敛到系统框架**(`devdocs/plan/SYSTEM_FRAMEWORK_SERVICES.md`,一期在跑):meow_sysui 派生 → meow_svcd 托管 → IPC。新增两个 **svcd 托管、板载 `trigger=boot`** 的专项子服务:
- **`meow_svc_perf`**(性能 / 系统只读聚合);**`meow_svc_power`**(关机 / 重启 / 升级 / 回 HiBy 系统动作)。
- **电源 CLI `meow_svc_power <cmd>`**(root 免鉴权、单一命令、**不覆盖**系统 shutdown/reboot):`shutdown` / `reboot`(强制回 MeowOS)/ `upgrade`(写 mtd5)/ `set-default-hiby` / `reboot --hiby` + `status` / `screen` / `dac` / `battery` / `reboot-reason` / `upgrade-status`。
- **`meow_svc_perf`**(性能 / 系统只读聚合,IPC `/usr/data/meow_perf.sock`,`MSG_PERF_QUERY(0x0050)→MSG_PERF_RESULT(0x0051)`);**`meow_svc_power`**(关机 / 重启 / 升级 / 回 HiBy 系统动作,IPC `/usr/data/meow_power.sock`,`MSG_POWER_ACTION(0x0060)→MSG_POWER_STATUS(0x0061)`,服务端 `SO_PEERCRED uid==0` 基础鉴权)。**M2.73 已落地**:`meow_svc_perf` 增 **network** 子集(真实 WiFi `wpa_cli`/`ip` + 蓝牙 `hci0`/sysfs + `hostname_local`),并入 SYSTEM 子集输出;`meow_svc_power` **升级写保护**(`upgrade` 写 mtd5 前校验卡根 `r3proii.upt` 存在+可读+常规文件+size>0,失败不写 mtd5/不重启——**只完整性、不签名**,海贝官方固件无签名,签名会挡自刷)与 **`dac status` 读板载 `settings.conf` 的 `audio.volume` 真实值**(弃 amixer dummy)。新 md5:perf `fa073bf9`、power `f3e653d5`。
- **电源 CLI `meow_svc_power <cmd>`**(root 免鉴权、单一命令、**不覆盖**系统 shutdown/reboot):`shutdown` / `reboot[--hiby]`(强制回 MeowOS)/ `upgrade`(写 mtd5,含升级写保护)/ `set-default-meow` / `set-default-hiby` + `status` / `battery` / `reboot-reason` / `upgrade-status` / `screen on|off|timeout<秒>` / `dac on|off|status`。
- launcher 电源菜单与 MeowPanel 均**改为经这些服务 IPC 触发**,不再直连 `sys_do_reboot` / 爬 `/proc`。
- **二期**:关键 IPC 只接受 `os.meow.*` 鉴权 + `.mpk` 打包签名验签(防伪造包名,解包验签 / 导出保留签名)。
- **开机默认**:权威标记 `/data/meow_boot_default`(单值 O_TRUNC:`0`=MeowOS / `1`=HiByOS)。
### 2.10 MeowPanel(外部管理面板)
- **协议**:`devdocs/plan/MEOWPANEL_PROTOCOL.md`(31 端点)。
- **前端**:`patch_v2/meowpanel/web/`(MD3/MIUIx 双主题 + 宝塔式 + 浏览日夜)。
- **外置部署**:`MeowOS/opt/MeowPanel/` + `services.d` 经 svcd + sysui 管理,**无卡依赖最小化**;`/usr/bin/nyai` 装 `.mpk`;launcher 的 `meow_pkg_export` / `nyai export` 导出 tar.gz(busybox tar + gzip,不需 zip)。
- **定位/部署**:**外置 TF 卡系统组件**(`MeowOS/opt/MeowPanel/` + `MeowOS/services.d/meowpanel.conf`,svcd 托管、无卡跳过、系统核心不依赖),**不进固件**。
- **后端**:`patch_v2/meowpanel/meowpanel.c` 单进程零第三方依赖 C 静态二进制,内嵌 HTTP/JSON 服务器(8080)+ 静态托管(`/`→index.html、`/assets/*`)+ 框架专项服务 IPC 客户端 + `settings.conf` 设置镜像。**读侧透传** `meow_svc_perf` IPC(`/api/{status,perf,system}`,单一权威源,不各自爬 /proc)、**动作侧**经 `meow_svc_power` IPC(`/api/system/{reboot,shutdown,ota}`)。
- **能力**:设置镜像(`settings.conf` 解析 `key = value` 带空格 + 精确匹配,防 `audio.volume` 误配 `audio.volume_max`)、文件白名单(`MeowOS/Music/MeowData/MeowAPPs/book`,`..` 逃逸→403)、应用(`nyai install/export/remove`,包名 = `app.json.package`)、按键注入(`/dev/input/event*` evdev,只注入音量/电源/播放/上下曲,**禁返回(158)/主页(172)/确认(28)/退出(96)**)、日志(`MeowOS/logs`)。
- **M2.73**:系统页「以太网」→「**蓝牙**」栏(无网口有蓝牙);**OTA 检查升级 bug 已修**(改读 `GET /api/system` 返回的 `ota` 字段,不再误触 `POST /api/system/ota` 触发升级)。新后端 md5 `11ed76ec`。
- **⚠️ 无鉴权**:内网信任模型(`reboot/shutdown/ota/apps/删除/上传` 等危险端点无鉴权,**勿把 8080 暴露到不可信网络**);`meow_svc_power` 服务端做 `SO_PEERCRED uid==0` 基础校验。
- **前端**:`patch_v2/meowpanel/web/`(MD3/MIUIx 双主题 + 宝塔式 + 浏览日夜);`/usr/bin/nyai` 装 `.mpk`;launcher 的 `meow_pkg_export` / `nyai export` 导出 tar.gz(busybox tar + gzip,不需 zip)。详见 `patch_v2/meowpanel/README.md`。
---
@@ -173,7 +178,7 @@ init (rcS)
- **`bootlogos/`(入库)**—— 启动 / 关机 logo。
- **`LICENSE`** —— Apache-2.0。
- **顶层文档(入库)**—— `APPS.md`、`MEOW_APP_SDK.md`、`FRAMEWORK_DESIGN.md`、`SYSTEM_SETTINGS.md`、`NOTIFICATION_SYSTEM.md`、`TF_CARD_LAYOUT.md`、`DEVELOPMENT_PLAN.md`、`GESTURE_BACK_DESIGN.md`、`KEY_CONTROL_DESIGN.md`、`PERF_SCHEDULER.md`、`MEOWOS_API.md`。
- **本地构建资产(gitignore,不入库)**—— `scripts/build/`(固件打包脚本)、`fw_apps/`(固件组装产物)、官方固件基线 rootfs、交叉工具链、本地开发文档、设备密钥等。详见「构建」与「部署」。
- **本地构建资产(根目录 gitignore;但 `scripts/build/` 的 `README.md`/`build_fw_apps.sh`/`fw_content.conf` 已 `git add -f` 入库)**—— 其余(`fw_apps/` 固件组装产物、官方固件基线 rootfs、交叉工具链、本地开发文档、设备密钥等)不入库。详见「构建」与「部署」。
---
@@ -197,8 +202,8 @@ patch_v2/hello_app/build_hello.sh # 链 meow_ui.a + libz.a + -lpthread → hel
固件 = 官方 v1.4 固件基线 rootfs + SSH 工具集 + MeowOS 系统组件(`meow_bootmenu` / `meow_launcherd` / `meow_watchdog` / `meow_svcd` / `meow_mdns` / `meow_sysui` / `nyai` + 相关 init 脚本 + `/etc/meowos_version`)。特点:
- 打包脚本 `scripts/build/build_fw_apps.sh` 是**配置驱动**的通用脚本(`-c fw_content.conf -v <ver> -o <out.upt> [-b <base>]`):`fw_content.conf` 清单逐条 `src|dst|md5|desc`,**`.upt` 条目 md5 配置化**(`md5` 空=不校验,填了=构建前强校验源文件,不一致即中止)。历史逐版 `build_fw_apps_m2NN.sh` 保留(本地,方便对照/回退)。这些是**本地构建工具(gitignore 不入库)**——本仓库只提交源码与文档,需本地交叉工具链 + 官方固件基线 rootfs 才能复现。
- **rootfs 上限 45,088,768 B(≈45MB)**;产物 `fw_apps/r3proii_m2NN.upt`。
- 打包脚本 `scripts/build/build_fw_apps.sh` 是**配置驱动**的通用脚本(`-c fw_content.conf -v <ver> -o <out.upt> [-b <base>]`):`fw_content.conf` 清单逐条 `src|dst|md5|desc`,**`.upt` 条目 md5 配置化**(`md5` 空=不校验,填了=构建前强校验源文件,不一致即中止);**改固件内容只改 `fw_content.conf`,不动脚本**。历史逐版 `build_fw_apps_m2NN.sh` 已**删除**(每版复制一个、内部硬编码 md5、且共享 `fw_apps/` 互相清空)。工作区 `fw_apps/build/`(每次重建)与产物归档 `fw_apps/out/` 分离防互清。这些脚本/清单已 `git add -f` 入库(`scripts/build/` 根目录仍 gitignore),其余为**本地构建工具(gitignore 不入库)**——本仓库只提交源码与文档,需本地交叉工具链 + 官方固件基线 rootfs 才能复现。详见 `scripts/build/README.md`。
- **rootfs 上限 45,088,768 B(≈45MB)**;产物归档 `fw_apps/out/r3proii_m2NN.upt`。
- `/usr/bin` 各组件为静态 MIPS32r2;版本号以 `/etc/meowos_version` 为单点(`build_fw_apps.sh -v` 写入)。
- **`.upt` 容器 md5 不可复现**(repack 时间戳),以**内容级 0 diff 回验**为准。
- 外围 CLI(curl/socat/tmux/jq/…)已迁 TF 卡 `MeowOS/opt/bin/`(不进固件);固件**不含** SDK 库(`meow_ui.a` 只随 App 链接),`hiby_player` 保持官方原样。
@@ -318,6 +323,8 @@ patch_v2/hello_app/build_hello.sh # 链 meow_ui.a + libz.a + -lpthread → hel
| `GESTURE_BACK_DESIGN.md` / `KEY_CONTROL_DESIGN.md` / `PERF_SCHEDULER.md` | 左缘返回 / 按键契约与信号 / 帧率调度 |
| `mips-repo/README.md` | mipsel 软件仓库(`bins/` 工具 + `mpk/` 应用包)与 meow_svcd CLI |
| `patch_v2/meow_sysui/meow_sysui.md` | 系统进程总监 meow_sysui:监管模型、`sysui.d/` 配置、与 bootmenu/svcd 的托管关系 |
| `patch_v2/meowpanel/README.md` | MeowPanel 外置面板后端:端点实现清单、IPC 对接、设置镜像、白名单、按键注入、**无鉴权风险** |
| `scripts/build/README.md` | 固件打包通用脚本用法:配置驱动、产物归档、踩坑记录 |
| `devdocs/plan/MEOWPANEL_PROTOCOL.md` | MeowPanel 外部管理面板协议(31 端点)(devdocs,gitignored) |
| `devdocs/plan/SYSTEM_FRAMEWORK_SERVICES.md` | 系统框架专项服务(perf/power + 电源 CLI + 二期 `os.meow.*` 鉴权 / .mpk 签名)(devdocs,gitignored) |