From c515a33ac4776dafb2c50c128fbb5e7300d082d5 Mon Sep 17 00:00:00 2001 From: MeowOS Date: Mon, 31 Aug 2026 01:41:11 +0800 Subject: [PATCH] =?UTF-8?q?docs(repo):=20=E4=BB=93=E5=BA=93=E5=85=AC?= =?UTF-8?q?=E5=BC=80=E6=96=87=E6=A1=A3=E5=90=8C=E6=AD=A5=E5=88=B0=20M2.73/?= =?UTF-8?q?0.7.68=20+=20=E4=BF=AE=20fw=5Fcontent.conf=20=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=20md5(meow=5Fsvcd=20da6ebc66/meow=5Fsvc=5Fperf=20fa073bf9,=20?= =?UTF-8?q?=E5=90=A6=E5=88=99=E6=89=93=E5=8C=85=20md5=20=E5=BC=BA=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E5=A4=B1=E8=B4=A5=E4=B8=AD=E6=AD=A2)=20(agent-171)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APPS.md | 2 +- MEOW_APP_SDK.md | 8 ++++++++ README.md | 29 ++++++++++++++++++----------- docs/MEOWOS_SPEC_REF.md | 12 ++++++++---- patch_v2/meowpanel/README.md | 13 ++++++------- scripts/build/README.md | 2 +- scripts/build/fw_content.conf | 4 ++-- 7 files changed, 44 insertions(+), 26 deletions(-) diff --git a/APPS.md b/APPS.md index 2aff98d..dd28dbb 100644 --- a/APPS.md +++ b/APPS.md @@ -30,7 +30,7 @@ - 只允许触碰:TF 卡(`/usr/data/mnt/sd_0`)、`/usr/data`、bind-mount 覆盖点 - **绝不写 NAND 分区**;调试全程 bind-mount/直接替换可写卷文件,重启即回退,变砖风险为零 -- **系统动作(关机/重启/升级/回 HiBy)统一经专项服务触发**:App/组件不直连 `sys_do_reboot`、不写 NAND、不写 mtd5 —— 改走 `meow_svc_power`(IPC,root 免鉴权、单一命令、不覆盖系统 shutdown/reboot);升级 = 写 mtd5=`ota:kernel2`(引导 kernel2 自动刷,见 `docs/MEOWOS_SPEC_REF.md` §1.2)。**二期**:关键 IPC 只接受 `os.meow.*` 包名鉴权。`[devdocs/plan/SYSTEM_FRAMEWORK_SERVICES.md]` +- **系统动作(关机/重启/升级/回 HiBy)统一经专项服务触发**:App/组件不直连 `sys_do_reboot`、不写 NAND、不写 mtd5 —— 改走 `meow_svc_power`(IPC,root 免鉴权、单一命令、不覆盖系统 shutdown/reboot);升级 = 写 mtd5=`ota:kernel2`(引导 kernel2 自动刷,见 `docs/MEOWOS_SPEC_REF.md` §1.2)。**M2.73 升级写保护**:`upgrade` 写 mtd5 前先校验卡根 `r3proii.upt`(存在+可读+常规文件+size>0),失败不写 mtd5/不重启——**只完整性、不签名**(海贝官方固件无签名,签名会挡自刷;期望 md5/hash 校验二期)。**二期**:关键 IPC 只接受 `os.meow.*` 包名鉴权。`[devdocs/plan/SYSTEM_FRAMEWORK_SERVICES.md]` - hiby_player.sh 看门狗:`hiby_player 退出 → sleep 1 → reboot`。**SIGSTOP 不触发**(进程未退出);**严禁 killall hiby_player**,须先杀 hiby_player.sh 父 shell 再手动拉起 - **若 meow_launcherd 意外死亡(SIGKILL/崩溃)且播放器被冻结**:手动恢复 `kill -CONT $(pidof hiby_player)`(守护进程自身 SIGTERM 路径会自动 SIGCONT) diff --git a/MEOW_APP_SDK.md b/MEOW_APP_SDK.md index 771b74f..7aa94cd 100644 --- a/MEOW_APP_SDK.md +++ b/MEOW_APP_SDK.md @@ -82,6 +82,8 @@ void meow_ui_fill_rect_alpha(int x, int y, int w, int h, uint32_t color, int alp > 说明:`meow_ui_text_*` 底层即 `meow_font_drawtext` + `meow_font_width_text`;`meow_ui_fill_rect_alpha` 复用 `blend565`。**模糊/毛玻璃不在 B1 承诺**(硬件无 GPU、CPU 软渲;仅在静态小区域可考虑,见 §7)。 +> **M2.73 渲染残影/脏区修复(以 `meow_ui_widget.c` / `meow_ui_ime.c` / `hello_app/hello.c` 为准)**:① **局部刷新不再「清底 + 只重画触发控件」**,改为按 z 栈重画刷新区内的完整控件序列(`d_paint_region`,见 §5.8.6/§5.1)——避免「重叠区里上层浮层被下层动态控件(如进度条)实时重绘时清掉/盖住」;② **IME/面板类全屏叠加控件关闭时做背景快照/恢复**(`ime_capture`/`ime_restore`),根治关闭后屏底残留像素;③ `W_LIST` 视口裁剪(只画视口内行/分隔线/文本),根治滚动时标题栏/底部脏区。 + ### 3.1 全局状态栏(系统级组件,A+C 方案并入) **定位**:状态栏是**系统级全局组件**,由 SDK 统一绘制——所有界面(launcher 菜单 + MeowAPP 画面)默认都显示,**仅由 SDK 运行时 `meow_ui_set_fullscreen(1)` 控制隐藏**(`fullscreen` 字段**未在 app.json 解析**,已定未做,见 §3.1 注 [源:审计 2026-08-30])。数据由 SDK 内置状态读取器抓系统快照(与 launcher 同源单点一致),非各画各的。 @@ -209,6 +211,8 @@ const char *meow_ime_text(void); **[B1 后续 / 不阻塞]**:中文拼音 IME、词库、候选词联想、剪贴板、长按重复——作为独立里程碑,等首个中文输入场景(网易云搜索)出现再做。 +> **实现对齐(M2.73,`meow_ui_ime.c`,以源码为准)**:实现与上表**关键出入**——① 键盘占底部约 **300px**(`KB_TOP=420`,720-420=300),键位 **44×36**(非 40×40);② **回显行 = 实时输入回显**(把 `g_ime_buf` 拼下划线 `"%s_"` 画在面板顶部条),**非候选/联想区**,候选区留中文输入法(B1 后续)再做;③ 关闭时**键盘区背景快照/恢复**(`ime_capture`/`ime_restore`,根治关闭后键盘像素残留);④ **配色走主题**(`meow_theme` 语义色,深/浅自动切),不硬编码黑底白键;⑤ **shift 切换大小写**;⑥ 阻塞 `meow_ui_text_input` 打字循环喂 `meow_ui_activity_ping`(重置息屏计时,进度条不卡死);⑦ **OK(回车)= 提交并关闭**(拷贝到 app `ctx->buf`)、**ESC(X)/ 点键盘外背景 = 取消并关闭**;非阻塞 `meow_ui_text_input_async` 用 `meow_ime_active()`/`meow_ime_text()` 轮询(同 close 语义)。上表「布局 40×40 / 物理键辅助 / 候选区」为设计稿表述,已按实际覆盖。 + --- ### 5.2 横向分页(横向滑动切换页面)设计模板 [源:2026-08-30] @@ -689,6 +693,10 @@ meow_widget *meow_layout_spacer(int w, int h); > **说明**:多数 Material 组件是**既有设计模板(§5.2-§5.7)的「MD3 观感化」**——如 Card=圆角容器、BottomSheet 复用 §5.7 面板、Dialog 复用 §5.6 弹窗、TabBar 联动 §5.2 分页、列表容器复用 §5.5 listview。故 Material 子集**不重复造结构**,只把这些模板的绘制观感对齐 MD3 语义色 + 统一基座。**第二批已实现(M2.71/0.7.66,见 §5.8.8)**。 +> **M2.73 修复(以 `meow_ui_widget.c` / `hello_app/hello.c` 为准)**: +> - **列表容器(W_LIST / LazyColumn / LazyRow)视口裁剪**:`meow_widget_draw` case `W_LIST` 现在计算视口绝对边界 `vx0/vx1/vy0/vy1`,**只绘制落在视口内的行、分隔线、文本**(整项可见才画文本/越界不画),滚动时不再把内容画到视口外再标脏上屏 → 根治「标题栏/底部残留脏区」。**SDK 全局生效**(非 App 侧)。 +> - **z 序重叠区修复**:App 侧 `hello_app/hello.c` 的 `d_paint_region`(局部刷新)改为**按 z 栈重画该区全部控件**(内容→标题→slider 值→chrome),取代旧「清底 + 只画单个控件」——防止「下层动态控件(如圆形进度条)实时重绘盖住/抹掉上层浮层(FAB)」。**⚠️ 暂注**:此方案当前在 **App(hello)侧**实现,属**示范/落地点**;**SDK 级全局 z 序(框架统一管理层间重绘顺序)仍待评估,未正式纳入 SDK 公共 API**——在落定前请勿把「全局 z 序」写成正式规范,App 自定义绘制如需 z 序要参照 `d_paint_region` 自行重画完整栈。 + #### 5.8.7 取舍 / 不做(移植思想而非照搬) > **关键(防照搬桌面 UI 框架踩坑)**:本层是**软渲 + 无 GPU + 无鼠标 + 14MB 内存/极简 rootfs** 的嵌入式环境(§11)。移植 Compose/Flutter 的**思想**(组合/状态驱动/语义色),**不照搬其运行时**: diff --git a/README.md b/README.md index b93ca28..836ccff 100644 --- a/README.md +++ b/README.md @@ -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 `(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 `(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/.conf`(Data 区,拔卡保留,权威优先)+ TF `MeowOS/services.d/.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 ` / `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 均无法运行),应答 `.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 `**(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 `**(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 -o [-b ]`):`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 -o [-b ]`):`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) | diff --git a/docs/MEOWOS_SPEC_REF.md b/docs/MEOWOS_SPEC_REF.md index 5c75d2c..518bc6c 100644 --- a/docs/MEOWOS_SPEC_REF.md +++ b/docs/MEOWOS_SPEC_REF.md @@ -15,6 +15,7 @@ - `/tmp`:tmpfs,开机清空;开机模式标记 `/tmp/meow_boot_mode`、电源菜单 `/tmp/meow_power_menu{,_active}`、app 沉浸 `/tmp/meowapp_state` `[BOOT_SELECTOR §1][KEY_CONTROL §9][APPS §3.5]` - 日志启动缓冲 `/tmp/meow_boot.log`(256KB 滚动,卡出现后自动迁卡)`[APPS §4.5]` - IPC socket:`/usr/data/meow_ipc.sock`(AF_UNIX SOCK_STREAM,0666,backlog 4)`[FRAMEWORK_DESIGN §1][WORK_STATE]` +- 专项服务 IPC socket:`/usr/data/meow_perf.sock`(meow_svc_perf,收 `MSG_PERF_QUERY→RESULT`)与 `/usr/data/meow_power.sock`(meow_svc_power,收 `MSG_POWER_ACTION→STATUS`),均 0666、可 `--sock`/`MEOW_IPC_{PERF,POWER}_SOCK` 覆盖;power 服务端以 `SO_PEERCRED uid==0` 基础鉴权 `[meow_svc_perf.c][meow_svc_power.c][meow_ipc.h]` - seccomp/分区(勿写):mtd0=uboot mtd1=kernel mtd2=rootfs mtd3=kernel2 mtd4=rootfs2 mtd5=ota(8M 标记) mtd6=userdata `[WORK_STATE]` ### 1.2 TF 卡(挂载点 `/usr/data/mnt/sd_0`,exFAT) @@ -56,7 +57,7 @@ ### 2.2 meow_ipc 消息协议(AF_UNIX,全小端 LE) - 帧头 16B:`magic=0x4D4F5701`('MEOW'|1)/`version=1`/`type`/`req_id`/`len`;`len` 上限 **MEOW_IPC_MAX=4096**;列表编码 `[u16 count]`+NUL 串 `[FRAMEWORK_DESIGN §1]` -- 消息类型:`MSG_HELLO 0x0001↑ / ACK 0x0002↓ / ERR 0x0003↓ / REGISTER 0x0010↑ / SERVICE_OK 0x0011↓ / SERVICE_STOP 0x0012↑ / MSG_NOTIFY 0x0020↑ / NOTIFY_ACK 0x0021↓ / NOTIFY_DISMISS 0x0022↑ / NOTIFY_LIST 0x0023↓ / ACT_DECLARE 0x0030↑ / ACT_QUERY 0x0031↑ / ACT_RESULT 0x0032↓ / NAV 0x0040↑ / SHOW_ACTIVITY 0x0041↓ / SYS 0x00F0↓` `[FRAMEWORK_DESIGN §1]` +- 消息类型:`MSG_HELLO 0x0001↑ / ACK 0x0002↓ / ERR 0x0003↓ / REGISTER 0x0010↑ / SERVICE_OK 0x0011↓ / SERVICE_STOP 0x0012↑ / MSG_NOTIFY 0x0020↑ / NOTIFY_ACK 0x0021↓ / NOTIFY_DISMISS 0x0022↑ / NOTIFY_LIST 0x0023↓ / NOTIFY_PROGRESS 0x0024↑ / ACT_DECLARE 0x0030↑ / ACT_QUERY 0x0031↑ / ACT_RESULT 0x0032↓ / ACT_FOCUS 0x0033↑ / ACT_BACK 0x0034↑ / NAV 0x0040↑ / SHOW_ACTIVITY 0x0041↓ / PERF_QUERY 0x0050↑ / PERF_RESULT 0x0051↓ / POWER_ACTION 0x0060↑ / POWER_STATUS 0x0061↓ / SYS 0x00F0↓` `[FRAMEWORK_DESIGN §1][meow_ipc.h]` - 媒体:`MSG_META`(元数据)、`MSG_PLAYCTL`(cmd 1=播放2=暂停3=上一首4=下一首5=seek)、`MSG_PROGRESS` `[附录 B]` - IPC 线程**只读帧+解析+入队**;状态变更主循环单写者(eventfd 唤醒,10ms 热键轮询非阻塞排空)`[FRAMEWORK_DESIGN §0][§6]` @@ -119,6 +120,7 @@ > 定位:把 §5(最小控件集)与设计模板(§5.2-§5.7)收敛到**统一控件架构**;实现分两批(§5.8.8)。 - **第一批 = 通用基座(M2.70/0.7.65)**:`meow_widget` 基座统一标准控件/自定义画布;`meow_widget_opts`(Modifier 式 Options,`meow_widget_set_opts`/`meow_widget_opts_get`,0/-1 用默认);统一状态机 `MEOW_WS_ENABLED/SELECTED/FOCUSED/PRESSED`(`meow_widget_set_state`/`meow_widget_state`/`meow_widget_enabled`/`selected`);`meow_widget_custom_create`(自定义画布,App 给 render/hit 回调,`W_CUSTOM`);布局 `meow_row/column/box`+`meow_layout_add/arrange`+`spacer`;MD3 语义色板(§5.8.4)+ 主题接口 `meow_ui_set_style`(`MEOW_STYLE_MD3/MIUIX`)`/meow_theme_get`。 - **第二批 = Material 组件子集(M2.71/0.7.66)**:`meow_btn_create_variant`(五型)/`meow_textfield_create`(IME)/`meow_card_create`/`meow_divider_create`/`meow_badge_create`/`meow_checkbox_create`/`meow_radio_create`/`meow_progress_create`/`meow_progress_circular_create`/`meow_fab_create`/`meow_topappbar_create`/`meow_navigationbar_create`/`meow_tabbar_create`/`meow_lazycolumn_create`/`meow_lazyrow_create`/`meow_dialog_create`/`meow_sheet_create`。 +- **M2.73 控件库修复(`meow_ui.a` md5 `e8341975`,`[meow_ui_widget.c][meow_ui_ime.c]`)**:① `W_LIST`(含 LazyColumn/LazyRow,`meow_widget_draw` case W_LIST)**视口裁剪**——按 `vx0/vx1/vy0/vy1` 只绘制落在视口内的行/分隔线/文本,杜绝「行滚出视口仍画/标脏上屏」的标题栏/底部脏区(SDK 全局,非 App 侧);② **z 序**:App 侧 `hello_app/hello.c` 的 `d_paint_region` 局部刷新改按 z 栈重画(内容→标题→slider 值→chrome),根治「层动态控件实时重绘盖住/抹掉上层 FAB」;**SDK 级全局 z 序方案在评估,暂未落定**(未正式纳入 SDK 公共 API 前不要写成正式规范);③ 渲染残影/脏区:局部刷新不再「清底+只画单个控件」(改 z 栈重画),消除重叠区残留;④ **IME 行为**(`meow_ui_ime.c`):键盘区背景快照/恢复(`ime_capture`/`ime_restore`,无残影)、配色走主题(不再硬编码黑底白键)、shift 大小写、阻塞 `meow_ui_text_input` 在打字循环喂 `meow_ui_activity_ping`(重置息屏计时,进度条不卡死)、OK(回车)=提交并关闭 / ESC(X)/背景点=取消;回显条=**实时输入回显**(`"%s_"` 拼接,非候选/联想),**候选框留中文输入法再做**。 - **兼容**:既有 `meow_btn/slider/switch/list_create` 签名一字不改(Options/状态机走新增挂载器);`meow_ui_theme`/`meow_widget` 结构变化 = **`meow_ui.a` ABI 变化** → 需同步重编 hello(§5.8.8)。 - **主题增强(§8.1)**:主题 = **顶级风格族 `ui.style`(md3/miuix)× 明暗 `display.theme`(dark/light)** 共同决定「整套配色+控件形态+背景底」;`display.background` 为「style×mode」派生的**可选背景底选项集**(非独立维度);状态栏图标随 `ui.style` 换集。⚠️ **`miui`/`miuix` 命名待定案(保留,勿拍板)**:`MEOW_APP_SDK §8.1` 用 `miuix`;`SYSTEM_SETTINGS §1` 注明 `meow_settings.c g_defs` 现值 `"md3,miui"`(label "Material You,MIUI"),实现时把 `g_defs` 的 `miui` 对齐为 `miuix`(**MIUIx 未实现,当前仅 md3 生效**)。 @@ -126,7 +128,7 @@ ## 4. SDK 之外系统组件 - **系统进程 supervisor 树(源:2026-08-30 定案;M2.71 已落地 `meow_sysui`)**:`meow_sysui`(`patch_v2/meow_sysui/meow_sysui.c`,~113KB;`etc/init.d/S70meow_sysui` 开机拉起,早于 S89)监管系统进程,**一个崩→只拉起它,绝不级联**;`meow_launcherd`=系统 UI 渲染宿主(状态栏/通知中心/电源菜单/全局手势,与 APP 进程独立);`meow_svcd`=服务管理器(服务全子进程化,svcd 自身不死);APP 进程只渲染自己内容,崩不连累系统 UI。**系统组件渲染归系统进程(launcher),APP 进程不渲染系统 UI**(SDK 系统组件 API 仅系统进程可链,App 不可自建悬浮层);通知中心 UI 渲染主体=系统进程,数据经 IPC 从通知存储读。现网(bootmenu execv launcher + S89 svcd 自启)→ 定案(sysui 统一监管)为渐进迁移,属系统基建线。**sysui 当前默认只监护 `meow_svcd`**(`/usr/data/meow/sysui.d/.conf`,目录式复用 services.d 语义;launcher 由 S90meow_bootmenu 的 execv 拥有,登记但 `enabled=0` 防双重拉起;mdns 是 svcd 服务子进程,不双重管理)。`[FRAMEWORK_DESIGN §10][MEOW_APP_SDK §6.1][NOTIFICATION_SYSTEM §9][patch_v2/meow_sysui/meow_sysui.md]` -- **专项子服务(一期在跑,规划见 `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 `**(root 免鉴权、单一命令、不覆盖系统 shutdown/reboot):`shutdown`/`reboot`(强制回 MeowOS)/`upgrade`(写 mtd5=`ota:kernel2`)/`set-default-hiby`/`reboot --hiby` + `status`/`screen`/`dac`/`battery`/`reboot-reason`/`upgrade-status`。**二期**:关键 IPC 只接受 **`os.meow.*`** 鉴权 + `.mpk` 打包签名验签(解包验签/导出保留签名)。`[SYSTEM_FRAMEWORK_SERVICES][APPS 附录 §3]` +- **专项子服务(一期在跑 + M2.73 落地,规划见 `devdocs/plan/SYSTEM_FRAMEWORK_SERVICES.md`)**:两个 **svcd 托管、板载 `trigger=boot`** 的专项子服务——`meow_svc_perf`(性能/系统只读聚合)、`meow_svc_power`(关机/重启/升级/回 HiBy 系统动作)。launcher 电源菜单与 MeowPanel 均改经这些服务 IPC 触发(不再直连 `sys_do_reboot`/爬 `/proc`)。**IPC**:perf 走 `/usr/data/meow_perf.sock` `MSG_PERF_QUERY→RESULT`;power 走 `/usr/data/meow_power.sock` `MSG_POWER_ACTION→STATUS`(服务端 `SO_PEERCRED uid==0` 基础鉴权)。**M2.73**:perf 增 **network** 子集(SYSTEM 子集输出:真实 WiFi `wpa_cli`/`ip` + 蓝牙 `hci0`/sysfs + `hostname_local`,单点权威源);power **升级写保护**(`upgrade` 写 mtd5 前校验卡根 `r3proii.upt` 存在+可读+常规文件+size>0,失败不写 mtd5/不重启;**只完整性不签名**,海贝官方固件无签名,期望 md5/hash 二期)与 **`dac status` 读板载 `settings.conf` 的 `audio.volume` 真实值**(`settings_get_int_trim`,弃 amixer dummy;`dac on/off` 因 cs43198 `pwr_gpio=-1` 无控制点→`MEOW_ERR_NODEV`)。新 md5:perf `fa073bf9`、power `f3e653d5`。**电源 CLI `meow_svc_power `**(root 免鉴权、单一命令、不覆盖系统 shutdown/reboot):`shutdown`/`reboot[--hiby]`(强制回 MeowOS)/`upgrade`(写 mtd5=`ota:kernel2`,含写保护)/`set-default-meow`/`set-default-hiby` + `status`/`battery`/`reboot-reason`/`upgrade-status`/`screen on|off|timeout<秒>`/`dac on|off|status`。**二期**:关键 IPC 只接受 **`os.meow.*`** 鉴权 + `.mpk` 打包签名验签(解包验签/导出保留签名)。`[SYSTEM_FRAMEWORK_SERVICES][APPS 附录 §3][meow_svc_perf.c][meow_svc_power.c]` - 通知(SDK `meow_notify_*`,M2.53 最小版 `[meow_ui.h §9.1]`): - 常量:`MEOW_NOTIFY_MAX_TYPES=4`/`MEOW_NOTIFY_MAX_PER_TYPE=4`/`MEOW_NOTIFY_MAX_MEDIA=1`/`MEOW_NOTIFY_TIMEOUT_ONGOING=-1`/`MEOW_NOTIFY_TIMEOUT_NEVER=0` - 分类:`CAT_GENERAL/MESSAGE/EMAIL/EVENT/PROGRESS/MEDIA(=5)/COUNT`;紧急度 `URG_LOW/NORMAL/HIGH/CRITICAL` @@ -143,7 +145,9 @@ - **服务目录规则**:**固件工具**→板载 `/usr/data/meow/services.d/.conf`(Data 区,拔卡保留);**TF 工具/第三方**→TF `MeowOS/services.d/.conf`(随卡存在/消失);**双源板载优先**(TF 同名被板载屏蔽 + WARN「 板载与 TF 都存在,采用板载」)。 - 崩溃隔离:服务=svcd **独立子进程**(`fork+execv`),svcd 只 `waitpid`/`SIGCHLD` 感知;服务死不影响 svcd/supervisor;重启受 `backoff_ms` 退避防热循环。 - 状态机:`DISABLED/STOPPED/RUNNING/STOPPING/FAILED`;稳定运行 30s 清零 restart_count。CLI(systemctl 式,SSH 直呼):`status/reload/start|stop|restart /pid`,示例 `meow_svcd status`/`meow_svcd restart mdnsd`/`meow_svcd stop all`/`meow_svcd reload`;控制走 AF_UNIX 单行文本 `/tmp/meow_svcd.sock`;守护默认后台,`-f/--foreground` 前台供 supervisor 托管。 -- **卡上外部工具 = `MeowOS/opt/`**(`{bin,nyai,sources.list}, lib/, tools/`):MeowOS 启动时从卡加载,拔卡降级不崩。**`MeowOpt` 已废弃并入此处**;mDNS 已改为自研 `meow_mdns`(固件 `/usr/bin`),不再放卡。`[DEV_NOTES][meow_svcd.md]`。 + - **M2.73 悬垂指针修复(md5 `da6ebc66`)**:`scan_and_reconcile` 用 `*s=tmp` 整体拷贝后,`s->argv[]` 仍指向已销毁的 `tmp` 栈帧 → `execv`/`/proc/pid/cmdline` 错乱。修法:新增 `svc_rebuild_argv(s)`,赋值/`memmove` 左移后把 `s->argv[]` 重定位到 `s->exec`/`s->argbuf` 自身成员(删除一个服务后同 tick 内被拉起不再用错位 argv)。`[meow_svcd.c]` +- **卡上外部工具 = `MeowOS/opt/`**(`{bin,nyai,sources.list}, lib/, tools/`):MeowOS 启动时从卡加载,拔卡降级不崩。**`MeowOpt` 已废弃并入此处**;mDNS 已改为自研 `meow_mdns`(固件 `/usr/bin`),不再放卡。`[DEV_NOTES][meow_svcd.md]`。**MeowPanel 本体 = `MeowOS/opt/MeowPanel/`**(后端+前端,svcd 托管 `MeowOS/services.d/meowpanel.conf`,无卡跳过、系统核心不依赖,不进固件;md5 `11ed76ec`,详见 `patch_v2/meowpanel/README.md`)。 +- **MeowPanel(外置 TF 卡 Web 面板,M2.73 已落地)**:单进程 HTTP/JSON 后端(8080)+ 静态托管(`/`→index.html、`/assets/*`)+ `meow_svc_perf`/`meow_svc_power` IPC 客户端(读侧透传 perf 聚合、动作侧经 power)+ `settings.conf` 设置镜像(`key = value` 带空格 + 精确匹配)+ 文件白名单(`MeowOS/Music/MeowData/MeowAPPs/book`,`..` 逃逸→403)+ 应用(`nyai install/export/remove`,包名=`app.json.package`)+ 按键注入(evdev,只音量/电源/播放/上下曲,**禁返回158/主页172/确认28/退出96**)+ 日志(`MeowOS/logs`)。M2.73:系统页「以太网」→「**蓝牙**」栏(无网口有蓝牙);**OTA 检查升级 bug 已修**(改读 `GET /api/system` 的 `ota`,不再误触 `POST /api/system/ota` 升级)。**⚠️ 无鉴权**(内网信任模型;`reboot/shutdown/ota/apps/删除/上传` 危险端点勿暴露公网,power 侧有 `SO_PEERCRED uid==0` 基础校验)。`[patch_v2/meowpanel/][devdocs/plan/MEOWPANEL_PROTOCOL.md]` - **mDNS 应答器 = `meow_mdns`(自研,已拍板替代完整 mdnsd)**:`mips-repo/bins/meow_mdns/`,**IPv4-only**(内核无 IPv6,完整 mDNSResponder/SAResponder 均 `socket(AF_INET6)` 失败),mipsel 静态 ~79KB(md5 b23de7ce)。**进固件 `/usr/bin/meow_mdns`**(不入卡),由 meow_svcd 托管(板载 `/usr/data/meow/services.d/mdnsd.conf`,`trigger=boot`、root 即可绑 5353/组播,`cap=` 空)。功能:join `224.0.0.251:5353`,应答 `.local` A(wlan0 IPv4)/`_ssh._tcp` PTR/SRV/TXT/`_services._dns-sd` PTR;支持 `MEOW_MDNS_HOST`/`_ADDR`/`_PORT`/`_TTL`/`_CF`/`_QD`/`_MCAST`/`_MIF`/`_DBG`。⚠️ **手机热点隔离**:设备→主机组播被热点丢弃,avahi 只收组播应答 → 该热点下 `avahi-resolve .local` 超时(网络层限制,非应答器缺陷),主机需 DNS 兜底 `[mips-repo/bins/meow_mdns/manifest.md][meow_svcd.md]`。 - `meow_settings_*`(设置后端,已定)/`meowcli`/`meow_sys_devattr`/`meow_devattr_set` `[MEOWOS_API]` - 后台权限:`MSG_HELLO/MSG_REGISTER.flags` 扩展 `MF_BACKGROUND`/`MF_PLAYBACK`;`PERF_BACKGROUND`/`PERF_AUDIO_BACKGROUND`(规划)`[FRAMEWORK_DESIGN 附录 A]` @@ -199,7 +203,7 @@ - **⑨ 面板「跟手下拉、半程可回」(launcher 侧,M2.65)**:面板打开/关闭由触发式 180ms 过渡升级为**手指拖动实时跟手**——顶部热区下拉 `progress = 手指位移映射`(复用 `mnp_anim_off`,∈[0,1024],1:1 跟手);松手 `progress≥40%×1024≈410` → 时间轴补到 1024(展开);`<阈值 或 反向拖回` → 回弹到 0 收回(半程取消);关闭同理可跟手。与行左滑(⑦ 横向主导)/列表滚动(竖向溢出)/`meow_edge_back`(左缘)互斥分流。`[NOTIFICATION_SYSTEM §9]` ### 5.4 配置版本单点 / 刷新率 / 息屏 -- **现行:M2.71(`/etc/meowos_version` = `0.7.66`;M2.70/0.7.65、M2.69/0.7.64、M2.68/0.7.63 …)**;版本单点 = `/etc/meowos_version`(见 §1.1,`build_fw_apps.sh -v` 写入)`[DEV_NOTES #4][fw_content.conf]` +- **现行:M2.73(`/etc/meowos_version` = `0.7.68`,已推卡真机验收;M2.74 / 0.7.69 待打)(M2.72/0.7.67、M2.71/0.7.66、M2.70/0.7.65、M2.69/0.7.64 …)**;版本单点 = `/etc/meowos_version`(见 §1.1,`build_fw_apps.sh -v` 写入)`[DEV_NOTES #4][fw_content.conf]` - 刷新率:`display.refresh_rate` enum 60/30/15(默认 60);`display.refresh_always_max` bool false(关=允许 60→30→15 降档)。governor:连续 12 帧超预算降一档,连续 4 批≈48 帧远低预算升一档 `[SYSTEM_SETTINGS §1][PERF_SCHEDULER][MIGRATION_AC §12.1]` - 息屏:`display.screen_off_timeout` int 秒 默认 **30**(0=常亮);`display.screen_off_mode` enum `panel`(面板下电+背光0+FBIOPBLANK)/`black`(背光0全黑+双击亮屏) `[SYSTEM_SETTINGS §1]` - 亮度 clamp:`display.brightness` 0-255 默认 101(clamp ≥ `display.brightness_min`);`display.brightness_min` 默认 **1**(M2.39 由 25 改 1)——**与旧文档 25 冲突见 §A** `[SYSTEM_SETTINGS §1]` diff --git a/patch_v2/meowpanel/README.md b/patch_v2/meowpanel/README.md index a32bc74..5228d89 100644 --- a/patch_v2/meowpanel/README.md +++ b/patch_v2/meowpanel/README.md @@ -8,9 +8,10 @@ C 静态二进制,内嵌 HTTP/JSON 服务器 + 前端静态托管 + 框架专 (launcher/sdk/设置/通知)绝不依赖它。 - **协议**:`devdocs/plan/MEOWPANEL_PROTOCOL.md`(HTTP/JSON 端点;本实现以「实现为准,协议/README 记录出入」)。 - **数据路径**(`SYSTEM_FRAMEWORK_SERVICES.md §2/§4`):读侧(`/api/{status,perf,system}`)经 `meow_svc_perf` - IPC(`MSG_PERF_QUERY→RESULT`)聚合,**绝不各自爬 /proc**;动作侧(`/api/system/{reboot,shutdown,ota}`)经 + IPC(`MSG_PERF_QUERY→RESULT`)聚合,**绝不各自爬 /proc**(M2.73 起 perf 聚合含 `network` 段);动作侧(`/api/system/{reboot,shutdown,ota}`)经 `meow_svc_power` IPC(`MSG_POWER_ACTION→STATUS`),不再直连 `poweroff`/写 mtd5。两专项服务为**板载 svcd 托管** (`trigger=boot`),拔卡保留,与无卡依赖最小化自洽。 +- **⚠️ OTA 检查升级 ≠ 升级**:前端「检查升级」只读 `GET /api/system` 的 `ota{current,available,latest}`,**勿 `POST /api/system/ota`**(那是触发升级进升级模式)。 --- @@ -27,7 +28,7 @@ cd /home/Aska/Project/R3ProII/patch_v2/meowpanel - 两分支均以 `-Os -Wall -Wextra` 复核,**0 warning**。 - 产出(本次构建实测): - `meowpanel`:mipsel 静态,`ELF 32-bit LSB executable, MIPS, MIPS32 rel2, statically linked, stripped`, - 体积约 **166 KB**(固件阈值内)。md5:`ea1d6a58cbc0d312498d3925e2fd2127`。 + 体积约 **166 KB**(固件阈值内)。md5:`11ed76ecb2e1c5773a01f0fb056a2df5`。 - `meowpanel_host`:aarch64 动态链接(宿主编译,仅供调试),体积约 **77 KB**。 - 依赖:仅 libc + Linux 内核头(`linux/input.h`),零第三方库(设备无 python3/lua)。 - 头文件引用:`-I patch_v2/meow_launcherd`(`meow_ipc.h` 帧格式 / `m_perf_*`/`m_power_*`/`POWER_*`, @@ -76,7 +77,7 @@ http://.local:8080/ | GET | `/`、`/meowpanel.css`、`/meowpanel.js`、`/assets/` | 静态托管 | ✅ | | GET | `/api/status` | 性能+系统(`meow_svc_perf` IPC subset=all 透传) | ✅ | | GET | `/api/perf` | 仅性能(subset=perf 透传) | ✅ | -| GET | `/api/system` | perf IPC + boot/network/ota 局部补全(见注) | ✅ | +| GET | `/api/system` | perf IPC + boot/network/ota 局部补全(network 含蓝牙,无网口;`ota` 只读检查,勿误触升级) | ✅ | | POST | `/api/system/reboot`、`/shutdown`、`/ota` | `meow_svc_power` IPC | ✅ | | GET | `/api/settings` | 全量+元数据(items/count/groups) | ✅ | | GET | `/api/settings/:key` | 单项 | ✅ | @@ -203,9 +204,7 @@ http://.local:8080/ **改为直接镜像同一份 `settings.conf`**(同款 parse/save 契约)。改哪边都会落同一文件,实体/网页/CLI 仍同步(listener/落盘)。 3. **`display.brightness` 元数据**:`g_defs` 为 `min=0 max=255 def=101`;但语义 clamp 到 `[brightness_min(1),100]` (防 101 闪屏)。后端给前端 `min=1 max=100`(协议 §3.2 期望),读值经 clamp 后返回(默认→100)。若回改协议可注明「原始表 0-255,面板展示语义 1-100」。 -4. **`/api/system` 的 `network`/`ota`**:由性能服务聚合(`SYSTEM_FRAMEWORK_SERVICES §4.1`)后,后端只补 - `boot.default`(读 `/data/meow_boot_default`)、`network.hostname_local`(hostname+.local)与 `ota{current=version,available:false,url:null}`; - **wifi/ethernet/ota.available 不编造**(服务未聚合,前端对缺失字段显示占位)。若回改协议可注明「network/ota 待并入 perf 服务」。 +4. **`/api/system` 的 `network`/`ota`**:**M2.73** 起 perf 服务已聚合 `network` 段(真实 WiFi `wpa_cli`/`ip` + 蓝牙 `hci0`/sysfs + `hostname_local`,SYSTEM 子集),后端直接透传;只补 `boot.default`(读 `/data/meow_boot_default`)与 `ota{current=version,available:false,url:null}`。**网络栏以「蓝牙」为准**(设备无网口,无 `以太网` 一行,`bluetooth.available=false` 显示「无蓝牙」)。若回改协议可注明「network 已并入 perf 服务,ota 为面板占位」。 5. **`/api/files` 上传/删除/重命名等 path**:前端对这些操作传**绝对路径**(`d.path/子项`),列表传**相对 root**; 后端 `normalize_path` 对两者均容错(相对则拼 root,绝对则直用),符合协议「白名单根 + 规范化」。 6. **`GET /api/files` 返回值**:`files_list` 返回 `500` 语义时以 500 封装(协议未定义 `root` 之外错误枚举,用通用错误信封)。 @@ -234,7 +233,7 @@ http://.local:8080/ patch_v2/meowpanel/ ├── meowpanel.c # 后端源码(单文件,约 2700 行) ├── build_meowpanel.sh # 交叉编译 + host 分支(-Wall -Wextra 0 warning) -├── meowpanel # 交叉产物(mipsel 静态,165 KB,md5 a8224ef9…) +├── meowpanel # 交叉产物(mipsel 静态,约 166 KB,md5 11ed76ec…) ├── meowpanel_host # 宿主编译(本机 ld,调试用) ├── services.d/ │ └── meowpanel.conf # 部署到 TF 卡 MeowOS/services.d/meowpanel.conf diff --git a/scripts/build/README.md b/scripts/build/README.md index d6bf0bd..4d43551 100644 --- a/scripts/build/README.md +++ b/scripts/build/README.md @@ -111,7 +111,7 @@ md5sum patch_v2/meow_launcherd/meow_launcherd - **改源码忘更新 md5**:清单里 md5 是强校验,源变了但 md5 没改 → 打包直接失败。**凡是动了清单里列的源文件,先 `md5sum` 更新对应行。** - **SDK 库(`meow_ui.a`)不入固件**:它由 APP(如 hello)链接,走 TF 卡 `MeowAPPs/` 热更新,**不要**加进清单。 - **`fw_apps/` 被 gitignore**:固件产物与组装树都是构建产物,勿提交。 -- **`scripts/build/` 被 gitignore**:整个目录不入库(含本 README)。但 `build_fw_apps.sh`/`fw_content.conf` 已用 `git add -f` 入库(它们是唯一应入库的脚本/配置)。本 README 是本地备忘,提交需 `git add -f`。 +- **`scripts/build/` 根目录 gitignore**:构建产物与组装树勿提交。但本目录的 **`README.md`/`build_fw_apps.sh`/`fw_content.conf` 已 `git add -f` 入库**(这三个是仓库侧应保留的脚本/配置/说明);其余(`fw_apps/` 产物等)不入库。 --- diff --git a/scripts/build/fw_content.conf b/scripts/build/fw_content.conf index 388c300..31a633e 100644 --- a/scripts/build/fw_content.conf +++ b/scripts/build/fw_content.conf @@ -30,12 +30,12 @@ patch_v2/bootmenu/meow_bootmenu|/usr/bin/meow_bootmenu|536434c9faa89a697d7e3da1c3657605|开机引导选单 M2.56(右下角版本读 /etc/meowos_version = 单点) patch_v2/meow_launcherd/meow_launcherd|/usr/bin/meow_launcherd|9ca4c5e8a919f59cb2cdd6326da23065|主屏 launcher M2.73(agent-162 点击重置息屏 消费 /tmp/meow_app_activity) patch_v2/meow_watchdog/meow_watchdog|/usr/bin/meow_watchdog|ed711cc192b9f770ed84b380b429afc6|应用看门狗 M2.24(全面按键接管) -patch_v2/meow_svcd/meow_svcd|/usr/bin/meow_svcd|fb2d608b37b20fd000fddcac91e1c4a1|服务管理器(status 配色美化 agent-117) +patch_v2/meow_svcd/meow_svcd|/usr/bin/meow_svcd|da6ebc66efdb666e3386138202ed534b|服务管理器 M2.74(悬垂指针双修复 agent-167) mips-repo/bins/meow_mdns/bin/meow_mdns|/usr/bin/meow_mdns|b23de7ce54873e926e7601a3b21b66a9|自研 IPv4-only mDNS 应答器 patch_v2/meow_sysui/meow_sysui|/usr/bin/meow_sysui|173013cc8f0899b3001d0b894ac0d9e6|系统 UI(sysui) patch_v2/meowpkg/nyai|/usr/bin/nyai|e55149299a9a2763b974b53b0c093160|nyai patch_v2/meow_svc_power/meow_svc_power|/usr/bin/meow_svc_power|f3e653d58dd045b35ce67de8cf62b9c2|电源专项服务 M2.73(agent-163 升级写保护+dac 真实音量) -patch_v2/meow_svc_perf/meow_svc_perf|/usr/bin/meow_svc_perf|7b0f3b64c7a415fe2588dc4c1ddada08|性能专项服务(agent-155 一期) +patch_v2/meow_svc_perf/meow_svc_perf|/usr/bin/meow_svc_perf|fa073bf9471b4ef1f047eb9c507cb642|性能专项服务 M2.74(network 采集并入 agent-165) # ---- 开机 init 脚本(etc/init.d,数字决定启动顺序,按文件名自然序)---- patch_v2/meow_sysui/S70meow_sysui|/etc/init.d/S70meow_sysui|8d243ee827de0e6b9588c785a3365ce8|sysui 自启(S70)