MeowOS 6824defdf9 M2.60→M2.61 骨架: SDK Activity 栈 + 控件归属(agent-122) + 按钮去圈/即时重绘(agent-119) + SDK 模板文档(agent-121)
- SDK §6.1 三层控件模型: Activity栈(push/pop/active) + 页面控件归属 owner + meow_ui_global_* 骨架(②) + 系统级仅内部接口(③)
- meow_widget 加 owner; live_btn_hit/meow_widget_hit 仅 active activity 命中; touch_refresh stale 保护
- 根治"全屏页触摸主页按钮闪现"(跨页面控件残留); 控件对象复用弹栈不重建
- hello 迁移双 Activity(home/full): 全屏左滑=弹栈回主页, 根左滑=退出
- agent-119 按钮去圈(纯色accent+黑12/24%)+即时局部重绘保留; agent-121 SDK模板§5.3-5.7
2026-08-30 15:27:10 +08:00

MeowOS for HiBy R3 Pro II

把 R3 Pro II(君正 X1600E,HiBy OS / Linux 4.4)打造成可扩展的"第二系统":MeowOS 作为主控层,双系统互斥(引导选单),HibyOS 播放器由 MeowOS 托管,MeowAPPs / MeowPanel / Activity 框架持续扩展。

核心文档(先读这些)

总索引(单一来源):docs/MEOWOS_SPEC_REF.md —— 各路径/接口/功能/约定的权威速查,含「已知矛盾/待确认」清单。

文档 内容
docs/MEOWOS_SPEC_REF.md 权威速查总索引(首选入口;常量/路径照抄原文 + 出处 + 矛盾清单)
devdocs/ANALYSIS.md 主技术档案(本地开发档,gitignore 不入库):固件逆向、启动链、fb 双缓冲、HGL、一切踩坑与纪律(§ 章节持续累积)
DEVELOPMENT_PLAN.md 路线图与分阶段计划(自身已过时,以实际进度为准;阶段 0 双系统 / A 稳定化 / B 状态栏通知中心 / B2 系统设置 / C MeowPanel / D Activity 框架 / E 网易云)
FRAMEWORK_DESIGN.md Activity / 通知 IPC 框架协议(IPC、路由表、导航栈、后台权限、媒体会话)
SYSTEM_SETTINGS.md 系统设置子系统设计(统一存储 + C API + 实体 UI + web 复用 + 导入导出)
MEOWOS_API.md 统一 API 蓝本(命名规范、返回码、设置 API、HTTP 映射、扩展指南)
APPS.md MeowAPPs 应用规范(目录、app.json、生命周期、边界、日志、返回键)
GESTURE_BACK_DESIGN.md / KEY_CONTROL_DESIGN.md / PERF_SCHEDULER.md 左缘返回 / 按键契约与信号 / 帧率调度

一次性/阶段性设计文档(已过时或未实施)移至 devdocs/plan/ 归档(移动不删、保留历史;devdocs/ 为本地开发档,不入库):BOOT_SELECTOR_DESIGN、CHARGING_SCREEN、MAIN_MD3_PLAN、MD3_UI_SPEC、MEOW_TOUCH_DESIGN、MIGRATION_AC、BLUETOOTH_MANAGER_PLAN、APP_LOG_MANAGER。

文档收敛规则:不再为每个功能新增设计 md;新功能在对应权威文档(MEOW_APP_SDK.md/APPS.md/SYSTEM_SETTINGS.md 等)补小节;新增决策/检查点写 devdocs/DEV_NOTES.md;过时一次性设计进 devdocs/plan/。

当前架构与组件(2026-08-30 快照)

  • SDK 统一日志 + 通知(M2.52/53 已落地 + 模型补全):meow_log() 按 app 分目录、每次启动新文件 MeowOS/logs/apps/<app_id>/logs/<ts>_<pid>.log,单文件 2MB 轮转、每 App 总量 50MB 删最旧;通知 API meow_notify_*(4 类型×每类型 4、媒体单例);#5 SDK↔IPC 桥(meow_notify_ipc.c/.h:app→launcher 中央存储,send/cancel 接入、回填 launcher nid,无 socket 降级不崩)。通知模型补全(agent-107):SDK 补 icon+meow_notify_update_progress,IPC m_notify_t 补 urgency(复用 pad)+MSG_NOTIFY_PROGRESS,存储补 urgency + icon 回退 + progress(内存实时/里程碑落盘),dump CSV 加 3 列;#6 TF 转储已落地(MeowOS/notifications/ appended CSV + 10MB 滚动 + 开机清板载/内存表)。通知中心 UI / D-Bus 桥为后续任务。
  • TF 卡多字体库 + 字重结构(M2.5x/M2.58):MeowOS/fonts/<family>/<weight>/(font.png+font.idx+font.json 三件套),默认 MeowOS/fonts/default/regular;font.file 设置键选默认套(family 点开→字重子菜单,两级扫描 fam/wt/name 数组);gen_font.py --weight 写 font.json.weight + --charset 档位(common/gbk/full);SDK load_font 优先读 env MEOW_FONT_PNG/IDX(launcher 每次 launch_app 注入),app 未自带字库时跟随系统 font.file;多字体 6 类(按字符类别路由) + font.load_full 大字库开关 + 档位按需加载;≤16 套卡内(防爆);§5.7 字体管理 + 应用字库(多句柄,**草案未实现/**字体索引 agent-113 进行中)。已迁移卡上 8 套到 <family>/regular/(default / google_sans / meslo / misans / source_han_sans / source_han_serif / ubuntu_mono / ztest,位深 4)。
  • 全屏机制(M2.5x):app.json fullscreen(app 级)+route.<id>.fullscreen(activity 级)+env MEOW_FULLSCREEN 注入,launcher 启动 app/切 activity 前预设 SDK 全屏;进入/退出全屏=状态栏上收出屏顶只剩提示线(4px)+自然过渡;全屏下保留左缘返回手势+顶部伸缩滑条+顶部下滑开通知中心(热区缩小)。⚠️ 全屏滑条仍有已知问题在跟进(agent-112)。
  • 包名/目录安卓化:app.json package(反域名权威 app_id,==目录名,缺省回退目录名)→ 示例 os.meow.hello;目录 MeowAPPs/os.meow.hello;数据 MeowData/<pkg>/{data,cache}。
  • meow_svcd 服务管理器(patch_v2/meow_svcd/,mipsel 静态 ~99KB,进固件不入卡):类 systemd/systemctl;已接入固件开机链(etc/init.d/S89meow_svcd 开机自启,-f 前台 + 重挂循环,置于 S84ssh 后、S90 前;bootmenu/launcher fork/exec+waitpid 托管仍为备选);双源 services.d(板载 /usr/data/meow/services.d/ + TF MeowOS/services.d/<name>.conf,同名板载优先+WARN;目录式 key=value,未知键忽略/前向兼容);服务=svcd 独立子进程(崩溃隔离:服务挂不影响 svcd/supervisor);事件触发 boot/card-mount/wifi-up(1s 轮询);-f 前台便于 supervisor waitpid;状态机 DISABLED/STOPPED/RUNNING/STOPPING/FAILED + CLI。
  • mDNS(自研 meow_mdns,IPv4-only)+ meow_svcd 双源服务:完整 mDNSResponder/SAResponder 均因内核无 IPv6(socket(AF_INET6) 失败)被否,改自研 meow_mdns(mipsel 静态 ~79KB)→ 进固件 /usr/bin/meow_mdns(不入卡),由 meow_svcd 托管。meow_svcd 双源 services.d(板载 /usr/data/meow/services.d/ + TF MeowOS/services.d/,同名板载优先+WARN),etc/init.d/S89meow_svcd 开机自启并预置 mdnsd.conf(trigger=boot);hostname=meowos(system.hostname,S89 应用)。⚠️ 手机热点组播隔离:设备→主机组播被热点丢弃 → 该热点下 avahi-resolve <host>.local 超时(网络层限制,非缺陷),主机需 DNS 兜底。MeowOpt 已废弃并入 MeowOS/opt。
  • boot 默认→板载:/data/meow_boot_default(O_TRUNC 单值、不递增、权威);bootmenu 读它定默认;meow.conf 不再承担 boot_default(其 O_APPEND 累积 bug 已修,设备已清)。
  • 状态栏 40→28px:SDK MUI_SBAR_H=28(字号 20)+ launcher SB_BAR_H=28/SB_FONT=20;状态栏两条实现(SDK meow_ui_sys_statusbar_render / launcher draw_statusbar)待 MD3 收敛为单一 SDK 全局状态栏(launcher 退役 draw_statusbar 复用 SDK)。
  • 系统修复(agent-104/106,M2.56):亮度开机被播放器覆盖→launcher 接管压回用户值;SDK 状态栏音量读取修复(空格匹配 + clamp volume_max);设置开关 meow_settings_get_switch/set_switch 修复(SET_INT{0,1});「关于本机」(设置最底,只读弹窗:hostname=meowos/版本/内存/存储/WiFi);bootmenu 版本显示读 /etc/meowos_version(替换硬编码 0.7.9);boot 默认板载 /data/meow_boot_default;SDK 拆分触发线(>1200 行才拆,现状 meow_ui_gfx.c=839 行保持扁平)。
  • 键码/阈值修正:MEOW_KEY_PREVIOUS=165(19 是另一码,[A-6] 定案);左缘返回阈值 65px([A-4] 90vs65 定案 65);亮度下限 1([A-3]);热键窗口下限 60ms([A-1]);日志路径统一 MeowOS/logs([A-7])。
  • TF 卡资产:包管理 CLI nyai(部署 MeowOS/opt/bin/nyai,同 launcher 包语义);应用日志 MeowOS/logs/apps/<id>/logs/<ts>_<pid>.log;服务定义 MeowOS/services.d/<name>.conf。
  • mips-repo/(宿主侧 mipsel 软件仓库):bins/(二进制工具:交叉编译产物 + build.sh + manifest.md)+ mpk/(.mpk 软件包),供后续固件/TF 复用(见「目录速览」)。
  • 仓库公开净化:净化后基线单提交 245bee2 + 本开发批次 8 提交(领先 origin/main 8),HEAD 敏感 0 命中;devdocs/(本地开发文档 + WORK_STATE/DEV_NOTES)、scripts/build/(固件打包脚本)gitignore 不入库;mips-repo/(mipsel 软件仓库)入库。

目录速览

  • patch_v2/ — meow_launcherd(MeowOS 核心)、bootmenu(引导选单)、watchdog、meow_svcd(服务管理器)、sdk(meow_ui SDK)、meowpkg(包管理);源码与构建脚本
  • mips-repo/ — mipsel 交叉编译软件仓库(bins/=二进制工具=meow_mdns、mdnsd 等;mpk/=.mpk 软件包),供后续固件/TF 复用
  • font/ — 预渲染字形系统(gen 生成器、meow_font 渲染库、atlas 产物)
  • fw_apps/ — 固件组装产物(.upt 不入库,由 scripts/build/build_fw_apps*.sh 重新打包)
  • bootlogos/ — 用户定制启动图/关机 logo
  • scripts/build/ — 固件打包脚本 build_fw_apps_m*.sh(本地 gitignore 不入库)
  • devdocs/ — 本地开发文档(ANALYSIS / WORK_STATE / DEV_NOTES / OPEN_QUESTIONS / FLASH_SSH / TEST_ON_DEVICE / device_test / plan 归档;gitignore 不入库)
  • ssh_keys/, .tools/ — SSH 密钥、交叉工具链(不入库,按需)

构建/刷机

  • 固件打包:scripts/build/build_fw_apps_m258.sh(现 M2.58 / 0.7.53;需交叉工具链 zig-mipsel-cc + musl.cc,见 devdocs/ANALYSIS.md 第 10 节)
  • 升级锁根:SD 卡根 r3proii.upt(固件由 build_fw_apps*.sh 打包成 .upt 再刷)
  • 刷机:failsafe(关机后按住 音量加+电源)从 SD 卡根 r3proii.upt 升级;勿用播放器 UI 卡死的升级按钮
  • 组件归属:launcher / bootmenu / watchdog 为固件组件(/usr/bin,只读 squashfs);/usr/data 下的同名文件仅 dev 手动 exec 快速下发,开机不用。真机验证字体/包名/通知须重打固件 + 刷机 + reboot。
  • 回退:官方固件 / backups/(NAND 全量备份)重刷

关键纪律(红线)

  • 严禁对 hiby_player 发未注册信号(SIGUSR1 导致整机重启);不 killall;禁经 hiby_player.sh
  • 勿远程 kill meow_launcherd(整机重启)
  • 播放器不能"杀+重拉"(HGL 连续内存);双系统互斥,MeowOS→HibyOS 只能重启
  • 日志/字库/媒体等大数据只写 TF 卡;板载只写 KB 级 meow/settings.conf
  • 绝对不对挂载点 rm -rf

详见 devdocs/ANALYSIS.md 纪律章节。

S
Description
No description provided
Readme Apache-2.0
105 MiB
0 Stars 1 Watchers 0 Forks
Languages
C 92.5%
Shell 2.5%
JavaScript 2.3%
Python 2.1%
CSS 0.4%
Other 0.2%