From cd4e2c247f0f8fce4cfc8630c688b3aaf625ed2f Mon Sep 17 00:00:00 2001 From: MeowOS Date: Tue, 1 Sep 2026 22:08:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(S89):=20=E6=9C=8D=E5=8A=A1=E5=90=8D?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=20meow=5F*=EF=BC=88=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=AE=9A=E6=A1=88=EF=BC=89=E2=80=94=E2=80=94S89=20=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E6=97=A7=20audiod.conf/mdnsd.conf=20=E4=B8=BA=20meow?= =?UTF-8?q?=5Faudiod.conf/meow=5Fmdns.conf=EF=BC=88stop+rm+=E9=A2=84?= =?UTF-8?q?=E7=BD=AE=EF=BC=89=EF=BC=9BSPEC=5FREF/meow=5Fsvcd.md=20?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E3=80=82launcher=20main=5Fmenu.c=20=E7=9A=84?= =?UTF-8?q?=20svcd=20start=20audiod=20=E8=B0=83=E7=94=A8=E5=BE=85=20286=20?= =?UTF-8?q?=E4=BA=A4=E8=BF=98=E5=90=8E=E6=94=B9=EF=BC=88=E9=81=BF=E8=AE=A9?= =?UTF-8?q?=E5=90=8C=E7=9B=AE=E5=BD=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/MEOWOS_SPEC_REF.md | 5 ++-- patch_v2/meow_svcd/S89meow_svcd | 42 +++++++++++++++++++++++---------- patch_v2/meow_svcd/meow_svcd.md | 4 ++-- scripts/build/fw_content.conf | 2 +- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/docs/MEOWOS_SPEC_REF.md b/docs/MEOWOS_SPEC_REF.md index d55de09..6135d5f 100644 --- a/docs/MEOWOS_SPEC_REF.md +++ b/docs/MEOWOS_SPEC_REF.md @@ -8,7 +8,8 @@ ### 1.1 板载(NAND rootfs / /data) - 设置持久化:**板载** `/usr/data/meow/settings.conf`(UBIFS,小文件 <10KB,跨换卡保留)`[SYSTEM_SETTINGS §2][MEOWOS_API §3]` -- **板载服务目录**:`/usr/data/meow/services.d/.conf`(M2.54,Data 区,恒定存在、权威优先;首启由 `S89meow_svcd` 预置 `mdnsd.conf`)。与 TF `MeowOS/services.d/` 双源,同名板载优先 + WARN;板载 `trigger=boot` 服务不依赖卡(拔卡保留)`[meow_svcd.md][meow_svcd.c]` +- **组件持久化目录(2026-09-01 用户定案)**:`/data` = `/usr/data` 的符号链接(UBIFS rw,**不随固件**);组件的可变动持久化文件(模型系数/策略/状态缓存等)一律放 **`/data/meow/<组件名>/`**(即 `/usr/data/meow/<组件名>/`),不再平铺在 `/usr/data/meow/` 根。例:`/data/meow/powermgr/power_model.conf`、`/data/meow/netmgrd/net_policy.conf`。存量平铺件(settings.conf、services.d/、sysui.d/、meow_boot_default)保持原位不动。`[WORK_STATE 2026-09-01]` +- **板载服务目录**:`/usr/data/meow/services.d/.conf`(M2.54,Data 区,恒定存在、权威优先;首启由 `S89meow_svcd` 预置 `meow_mdns.conf`(M6.1 起,旧 mdnsd.conf 自动迁移))。与 TF `MeowOS/services.d/` 双源,同名板载优先 + WARN;板载 `trigger=boot` 服务不依赖卡(拔卡保留)`[meow_svcd.md][meow_svcd.c]` - **主机名**:设置键 `system.hostname`(SET_STR,默认 `meowos`;RFC1035 首标签),`S89meow_svcd` 开机读 settings `sethostname`;供自研 mDNS 应答器公布 `.local` `[SYSTEM_SETTINGS §1][mips-repo/bins/meow_mdns]` - `/etc/meowos_version`:版本唯一来源(launcher 运行时 `load_meowos_version` 读;`MEOWOS_VERSION` 宏仅作 dev 占位兜底)`[DEV_NOTES #4]` - **`/data/meow_boot_default`:开机默认权威标记(O_TRUNC 单值:`0`=MeowOS / `1`=HiByOS)**。由 launcher `meow_settings_save()` 在保存 `boot.default` 时同步写;bootmenu `set_boot_default_meow()`(写 0)/ launcher `set_boot_default_hiby()`(写 1)同文件同语义;bootmenu 开机读它定默认;init 读入不触发、不反向覆盖;`meow.conf` 不再承担 boot_default `[M2.61 同步修复][README][meow_settings.c][meow_bootmenu.c]` @@ -148,7 +149,7 @@ - **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 `8108852f`(nyai 路径修复)→ 阶段C 后 新 md5(见 `patch_v2/meowpanel/README.md`),详见 `patch_v2/meowpanel/README.md`)。 - **MeowPanel(外置 TF 卡 Web 面板,M2.73 已落地,阶段 C 实时画面+遥控已落地)**:单进程 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`,`nyai` 固件内置 `/usr/bin/nyai` 优先+卡上回退)+ 按键注入(evdev,只音量/电源/播放/上下曲,**禁返回158/主页172/确认28/退出96**)+ 日志(`MeowOS/logs`)。M2.73:系统页「以太网」→「**蓝牙**」栏(无网口有蓝牙);**OTA 检查升级 bug 已修**(改读 `GET /api/system` 的 `ota`,不再误触 `POST /api/system/ota` 升级)。**M2.78+ 新增**:可选密码鉴权(agent-196,默认关)、通知中心后端 `/api/notifications`(TF 归档环形 200 条)、文件域 4 bug 修复 + 上传 8MB 上限 + 双重白名单(agent-182)**。**M2.84-88 阶段 C**(agent-224):`/api/screen.jpeg`(fb0 活动帧→自研 JPEG 编码器)+ `/api/input/tap`(坐标注入,本机触摸优先 5s 仲裁)+ 屏幕增量帧 `?delta=1`(8x8 块比对,近静态 27KB→804B,agent-234)+ `/api/notifications` 实时化(优先 IPC 读 launcher 活跃集 source:ipc,agent-234)。**252 新增(2026-09-01)**:`/api/audio`(audiod MSG_AUDIO_QUERY→STATE 只读透传,不在时 available:false)+ 前端「音频」页(5s 轮询只读)与「字体」页(列表/上传进度/导出/409 冲突确认 force 重试)。**⚠️ 鉴权默认关**(内网信任模型;`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]`。 +- **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/meow_mdns.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]` - **独占音频守护 `meow_audiod`(M2.90 已落地,规范 `devdocs/plan/AUDIOD_DESIGN.md`)**:板载 `/usr/bin/meow_audiod`,svcd 托管(板载 `services.d/audiod.conf`,trigger=manual;launcher 确认 MeowOS 模式后拉起;**启动门控:mode≠meow → exit(0),HibyOS 下不存在**)。IPC `/usr/data/meow_audio.sock`(帧层复用 meow_ipc.h,号段 0x00C0-0x00CA:OPEN/OPEN_ACK/WRITE/PAUSE/RESUME/STOP/PREEMPTED/QUERY/STATE/ROUTE/VOLUME)。**独占+抢占**(后开赢,旧流收 PREEMPTED;socket EOF=回收;软混音已否决,留接口位)。**DAC 原生率跟随不做 SRC**;格式归一 S16 直通/S32 升位/mono 复制;切率 mute-重配-恢复。**meow_route 已并入为路由线程并退役独立服务**(⚠️ 退役服务要清板载+TF 双源 conf,否则旧 conf 会双写路由)。**CLI `meow_audio`**(root 免鉴权):`status`/`tone [freq] [ms] [rate]`(正弦测试音,排查无声不开 App)/`route <0|2|3>`/`vol [0-100]`。SDK 客户端 `meow_audio_open/write/pause/close/query/on_preempt`(`meow_ui_audio.c`,懒连接+EPIPE 标死;无 audiod → -ENOENT 不隐式直开,`MEOW_AUDIO_DIRECT=1` 仅调试)。**M2.91-97 加固批**:①**开机武装 hbc3000 FPGA**(M2.91:路由线程启动无条件写 Output Port Switch 4.4→3/3.5→2/无→4,同值先写 5 强制重烧——根治「未烧 FPGA 时 PCM 第二次 `hbc3000_start` 内核硬挂死」,调查底稿 `devdocs/plan/AUDIO_HANG_INVESTIGATION.md`)②**长流护栏**(M2.93:ring 有界等待/cond timedwait/popen 有界收割/O_NONBLOCK+poll 写/wedge 自救/心跳 watchdog)+**几何收窄 period=1024×4**(M2.94:驱动默认巨 buffer 致桥周期中断稀缺 wedge、播 ~12s 停摆;tonepcm2 矩阵 60s 零 stall 实证)③**音量反转**(M2.95:CS43198 音量寄存器=衰减量,四路统一 `dac=255-pct*255/100`)④**炸耳安全**(M2.96:`dac_vol_mute` 写 255 真静音,旧写 0=最大响度)⑤**电平监控**(261,待 M2.97 固件化:播放线程 ~100ms 窗口整数 RMS/peak dBFS(deci-dB,逐帧判边界,-990=-inf)、`MSG_AUDIO_STATE` 追加 `rms=/peak=/lvlseq=`(ABI 兼容)、流活跃时 1s 节拍写 TF `MeowOS/logs/audio_monitor_.log`、CLI `meow_audio monitor [秒]` 文本电平条)。`[patch_v2/meow_audiod/]` - **音频硬件事实(sndprobe/tonepcm2 真机实测,2026-08-31)**:播放 PCM = `/dev/snd/pcmC0D0p`(`cs43198-hifi-0`);`pcmC0D1p`=snd-soc-dummy(勿用)。能力:S16_LE/S24_LE、1-2ch、8k-768k、buffer 2048-1048576 帧、period 512-262144。⚠️ **ALSA UAPI 两坑**(ncm 无声根因,勿再踩):①hw_params 必须「全放行」初始化(mask 全 1、interval [0,UINT_MAX],params_any 语义)再收窄——memset 0 的 interval=「只能取 0」求交必空 → HW_PARAMS 恒 EINVAL;②access/format/subformat mask 必须**先清零再单点**——留全 1 会被内核 choose 成 MMAP_INTERLEAVED,ch>1 时 write 恒 EINVAL。**CS43198 音量寄存器=衰减量(官方数据手册 DS1039 实证,用户供)**:PCM_VOLUME_A/B(0x0B/0x0C),0=0dB 满幅最大声、255=-127.5dB≈静音(0.5dB/步;DSD 通道独立 DSD_VOLUME_A/B)。**混音器 L/R Playback Volume 读回恒 0 是死镜像**(官方播放器走 sa_hgl_dma 硬直通不经此控制,HibyOS 对照实测同读 0),勿据此判音量。**音量寄存器=衰减量(0=最响 255=静音,M2.95 真机实测方向)**:四路(launcher/audio.c+audiod+watchdog+SDK vol)统一 `dac=255-pct*255/100`;mute 必须写 255 真静音(M2.96 炸耳修复)。混音器清单:numid=1/2 L/R Vol、3 Mute Output、4 Digital Filter、5 Soft Mute、6 NOS_EN、7 DRE_EN、8 Balance Lineout En、9 Output Port Switch(0 空闲/1 lineout/2 3.5/3 4.4/4 SPDIF;0 危险勿写;**5 = audiod 内部「强制重烧 FPGA」约定值**(M2.91 开机武装同值改写路径),非常规路由值,App/面板勿写)、10 DOP_EN。`[patch_v2/tools/sndprobe.c][tonepcm2.c][APPS §3.7]` diff --git a/patch_v2/meow_svcd/S89meow_svcd b/patch_v2/meow_svcd/S89meow_svcd index 14fcf49..6399b91 100755 --- a/patch_v2/meow_svcd/S89meow_svcd +++ b/patch_v2/meow_svcd/S89meow_svcd @@ -7,10 +7,10 @@ # --fork` 会阻塞 rcS(选单后 exec meow_launcherd 或 fork 播放器监督),故任何 S90 # 之后的 init.d(如 S91/S92)**都不会执行**——svcd 必须排在 S90 之前。 # * 本脚本只装「稳定框架/KB级设置」:主机名 + 板载服务配置 -# (/usr/data/meow/services.d/,Data 区,首启预置 mdnsd.conf + meow_svc_perf.conf + +# (/usr/data/meow/services.d/,Data 区,首启预置 meow_mdns.conf + meow_svc_perf.conf + # meow_svc_power.conf —— 后者为框架专项服务,trigger=boot 恒存在即启动)。 # * **svcd 拉起权**:若 meow_sysui(系统进程总监)已运行 → svcd 由 sysui 监管拉起 -# (sysui.d/svcd.conf),本脚本仅在其已运行时 `meow_svcd reload` 让 svcd 补载 mdnsd.conf, +# (sysui.d/svcd.conf),本脚本仅在其已运行时 `meow_svcd reload` 让 svcd 补载 meow_mdns.conf, # 不重复拉起、不重挂(避免与 sysui 双重监护 svcd)。仅当 **sysui 未运行**时才回退到 # 现网的「重挂循环」自监护(旧固件/无 sysui 场景,向后兼容)。 # @@ -35,13 +35,21 @@ case "$1" in sethostname "$host" 2>/dev/null || hostname "$host" 2>/dev/null echo -n "host=$host " - # 2) 首启预置板载 mdnsd.conf(Data 区可写才建;已存在不覆盖) + # 2) 首启预置板载 meow_mdns.conf(Data 区可写才建;已存在不覆盖) if [ -d /usr/data/meow ] && [ -w /usr/data/meow ]; then mkdir -p /usr/data/meow/services.d + # 服务名统一 meow_*(M6.1 用户定案):旧 mdnsd.conf 迁移 → meow_mdns.conf if [ -f /usr/data/meow/services.d/mdnsd.conf ]; then - echo -n "mdnsd.conf exists " + if [ -x /usr/bin/meow_svcd ]; then + /usr/bin/meow_svcd stop mdnsd 2>/dev/null + fi + rm -f /usr/data/meow/services.d/mdnsd.conf + echo -n "renamed mdnsd.conf->meow_mdns.conf " + fi + if [ -f /usr/data/meow/services.d/meow_mdns.conf ]; then + echo -n "meow_mdns.conf exists " else - cat > /usr/data/meow/services.d/mdnsd.conf <<'EOF' + cat > /usr/data/meow/services.d/meow_mdns.conf <<'EOF' exec=/usr/bin/meow_mdns args= enabled=1 @@ -51,11 +59,11 @@ max_restart=5 trigger=boot cap= EOF - chmod 644 /usr/data/meow/services.d/mdnsd.conf - echo -n "provisioned mdnsd.conf " + chmod 644 /usr/data/meow/services.d/meow_mdns.conf + echo -n "provisioned meow_mdns.conf " fi else - echo -n "skip mdnsd.conf (/usr/data/meow not writable) " + echo -n "skip meow_mdns.conf (/usr/data/meow not writable) " fi # 2b) 首启预置板载**专项服务**配置(性能/电源;trigger=boot 恒存在即启动,拔卡保留)。 @@ -110,10 +118,18 @@ EOF chmod 644 /usr/data/meow/services.d/meow_crash.conf echo -n "provisioned crash.conf " fi + # 服务名统一 meow_*(M6.1 用户定案):旧 audiod.conf 迁移 → meow_audiod.conf if [ -f /usr/data/meow/services.d/audiod.conf ]; then - echo -n "audiod.conf exists " + if [ -x /usr/bin/meow_svcd ]; then + /usr/bin/meow_svcd stop audiod 2>/dev/null + fi + rm -f /usr/data/meow/services.d/audiod.conf + echo -n "renamed audiod.conf->meow_audiod.conf " + fi + if [ -f /usr/data/meow/services.d/meow_audiod.conf ]; then + echo -n "meow_audiod.conf exists " else - cat > /usr/data/meow/services.d/audiod.conf <<'EOF2' + cat > /usr/data/meow/services.d/meow_audiod.conf <<'EOF2' exec=/usr/bin/meow_audiod args= enabled=1 @@ -123,8 +139,8 @@ max_restart=5 trigger=manual cap= EOF2 - chmod 644 /usr/data/meow/services.d/audiod.conf - echo -n "provisioned audiod.conf " + chmod 644 /usr/data/meow/services.d/meow_audiod.conf + echo -n "provisioned meow_audiod.conf " fi # meow_route 退役(并入 meow_audiod,AUDIOD_DESIGN.md §5):清理旧固件遗留的 # meow_route.conf(trigger=boot 会拉起已被固件移除的 /usr/bin/meow_route → 重启循环)。 @@ -208,7 +224,7 @@ EOF sysui_alive=1 fi if [ "$sysui_alive" = "1" ]; then - # svcd 由 meow_sysui 监管拉起;此处仅补载刚预置的 mdnsd.conf(若 svcd 已在跑) + # svcd 由 meow_sysui 监管拉起;此处仅补载刚预置的 meow_mdns.conf(若 svcd 已在跑) if [ -x /usr/bin/meow_svcd ]; then if [ -f /tmp/meow_svcd.pid ] && kill -0 "$(cat /tmp/meow_svcd.pid 2>/dev/null)" 2>/dev/null; then /usr/bin/meow_svcd reload 2>/dev/null diff --git a/patch_v2/meow_svcd/meow_svcd.md b/patch_v2/meow_svcd/meow_svcd.md index 86dc771..804a36e 100644 --- a/patch_v2/meow_svcd/meow_svcd.md +++ b/patch_v2/meow_svcd/meow_svcd.md @@ -36,7 +36,7 @@ 服务配置**两处都读**,一个服务一个 `.conf`: - **板载** `/usr/data/meow/services.d/.conf`:Data 区,恒定存在、权威优先; - 首启由固件 `S89meow_svcd` 预置(如 `mdnsd.conf`)。拔卡不丢。 + 首启由固件 `S89meow_svcd` 预置(如 `meow_mdns.conf`)。拔卡不丢。 - **TF** `/MeowOS/services.d/.conf`:随卡存在/消失。 **同名遮蔽规则**:先扫板载(权威),再扫 TF;若 TF 出现与板载同名服务 → **跳过 + @@ -82,7 +82,7 @@ trigger = card-mount # cap = cap_net_bind_service,cap_net_raw ``` -**板载 mDNS 应答器示例**(固件预置 `/usr/data/meow/services.d/mdnsd.conf`,首启建): +**板载 mDNS 应答器示例**(固件预置 `/usr/data/meow/services.d/meow_mdns.conf`,首启建): ```ini # 自研 IPv4-only mDNS 应答器(固件 /usr/bin/meow_mdns;板载服务,拔卡不丢) diff --git a/scripts/build/fw_content.conf b/scripts/build/fw_content.conf index 39807c9..67ec06c 100644 --- a/scripts/build/fw_content.conf +++ b/scripts/build/fw_content.conf @@ -47,7 +47,7 @@ patch_v2/meow_netmgrd/meow_netmgrd|/usr/bin/meow_net|8f9303b5b97550d511ec390db85 # ---- 开机 init 脚本(etc/init.d,数字决定启动顺序,按文件名自然序)---- patch_v2/meow_sysui/S70meow_sysui|/etc/init.d/S70meow_sysui|e435affcb56499e5229728c6ae2524b9|sysui 自启 M2.85(launcher.conf enabled=1+迁移) -patch_v2/meow_svcd/S89meow_svcd|/etc/init.d/S89meow_svcd|f3bb197fa2a0f7f4adee9a75f4ab1186|svcd 自启 M6.0(route→audiod + 预置 powermgr/netmgrd conf + 热更 exec→/usr/bin 迁移,agent-244/246/267/276) +patch_v2/meow_svcd/S89meow_svcd|/etc/init.d/S89meow_svcd|74e4ab0e6348ce00c1dbc0e500e5d300|svcd 自启 M6.1(+服务名统一 meow_*:旧 audiod.conf/mdnsd.conf 迁移为 meow_audiod.conf/meow_mdns.conf,用户定案) patch_v2/meow_amsd/meow_amsd|/usr/bin/meow_amsd|7ddc677ce7938bc9b95c83c17bc78295|活动管理器 M2.91(注册表自愈:卡未挂载扫空 3s 快重试+30s 合并重扫+am rescan;兼容旧 launcher 5 段 EV LAUNCH;agent-250);M6.0 待打包:am start busy 识别修复(对照 launcher ACK 正幅度 busy=8,bool 误判二补 0xFFFFFFF8 导致 busy 落入 launcher offline) patch_v2/meow_amsd/am|/usr/bin/am|9e323faf1aeb0c6a6fb0425565cf525d|amsd 用户侧CLI(+resolve/picker/rescan) patch_v2/bootmenu/S90meow_bootmenu|/etc/init.d/S90meow_bootmenu|e0ace111ce5ee446a1e3c6605ac1e9c9|bootmenu 自启 M2.85(注释同步)