根因(级联死锁): 内核驱动 wedge(hbc3000/cs43198 时钟域族, write/PREPARE/amixer ioctl 卡死在内核) → 播放线程永不返回 → ring 填满 → IO 线程在 ring_write 无超时 cond_wait 永久睡眠 → accept 停摆(backlog 满后 CLI ECONNREFUSED) → ncm 堵 socket 写 → 全链冻结。 同效路径: popen_read_tmo 无界 waitpid 随挂死的 amixer 子进程拖死持锁线程。 修法: - ring 写有界等待(MEOW_AUDIO_RING_WAIT_MS 缺省 5s)超时丢弃+计数(dropped=), IO 永生; 等待期 sid 代际守卫(抢占中等待的旧流 PCM 不再注入新流 ring) - 全部 cond 等待 timedwait 化(播放 1s 周期自愈, g_cond 改 CLOCK_MONOTONIC); 信号处理器只置 g_stop(不再调非 async-signal-safe 的 cond_signal) - popen 收割有界: WNOHANG 300ms → SIGKILL 300ms → D 态放弃收割(泄漏换永生); 路由线程 amixer 调用不持 g_mu; QUERY 改报 g_route_cur 缓存(IO 热路径不再 popen) - ALSA 改 O_NONBLOCK + poll(POLLOUT,1s): 连续 3 次停摆判 wedge → PREPARE 自救无效即 关卡进丢弃模式(stall=), 下一路 OPEN 重开重试 - server→client 下行帧单发 write 写不全即整帧丢弃(txdrop=), 杜绝半帧错位/慢客户端堵 IO - 主线程 watchdog: IO/播放心跳 10s 静默告警; io 线程 poll 出错不退出(listener 不丢); backlog 4→8; RESUME/PAUSE 补 cond 唤醒 - SDK meow_ui_audio.c + CLI: connect 非阻塞+poll 2s, SO_SNDTIMEO/RCVTIMEO 2s (audiod 真死时 App 报错重开, 不再永久阻塞) 验证: 宿主 38/38 PASS(旧 19 回归 + 新增 T5 长流 3min 等效 31.7MB 持续灌 played==written underrun/dropped=0 喂流中 listener 探活 15/15; T6 wedge 故障注入生存 — 旧代码同款注入 挂死(90s timeout 强制 kill), 新代码 IO/accept/preempt/SIGTERM 全活; T7 慢客户端 tx 丢弃); qemu-mipsel 静态二进制 status/tone 全通(written=played=13230 underrun=0); -Wall -Wextra 0 warning(host+mipsel+SDK 双端编译)。 meow_audiod md5 86a8b6793d516c90bbd12c2997b30d8f / meow_audio c23b96490842f54324b855fd9c2467a5 (fw_content.conf 已更)。暂不部署真机(主会话统一); meow_ui.a/App 重链留主会话。
55 lines
5.4 KiB
Plaintext
55 lines
5.4 KiB
Plaintext
# ============================================================================
|
||
# fw_content.conf — MeowOS 固件内容清单(默认 / 基线 = M2.73 / 0.7.68)
|
||
#
|
||
# 格式(每行一条):
|
||
# <src>|<dst>|<md5>|<desc>
|
||
# <src> 仓库内相对路径(相对项目根 ROOT,如 patch_v2/bootmenu/meow_bootmenu)
|
||
# <dst> 目标绝对路径(安装进 squashfs-root,如 /usr/bin/xxx 或 /etc/init.d/Sxx)
|
||
# <md5> 可空 = 不校验;填了 = 对 <src> 做强校验,不一致即退出(防呆:源被改)
|
||
# <desc> 仅注释用途,可省略;若出现会保留整段(含 '|')作为说明
|
||
#
|
||
# 规则:
|
||
# - '#' 开头为注释;空行忽略。
|
||
# - 目标目录自动创建;usr/bin / etc/init.d / etc/profile.d 一律 chmod 755。
|
||
# - 凡 <md5> 非空,构建前对 <src> 做 md5 强校验(不匹配 → 构建中止)。
|
||
#
|
||
# 本清单为【基线】。要并存多套调试/场景配置,复制本文件并改内容,用
|
||
# build_fw_apps.sh -c <其它配置路径> ... 即可,互不干扰。
|
||
#
|
||
# 注意:本清单【不含】由通用步骤管理的条目——
|
||
# - etc/meowos_version → 由 -v/--version 写入
|
||
# - /etc/logo* + /etc/boot_animation/0.png + /etc/shutdown_logo.jpeg
|
||
# → 由通用步骤从 bootlogos/ 拷贝
|
||
# - /etc/init.d/S84ssh → 由通用步骤把基线 S99ssh 改名而来(清单不含 S84)
|
||
# - usr/bin 外围 CLI 瘦身 → 由通用步骤按白名单移除
|
||
# - /etc/shutdown_logo.jpeg → 由通用步骤从 bootlogos/ 拷贝(图片)
|
||
# 注:/etc/init.d/S95shutdown_logo 是【init 脚本】(清单第 44 行单独一条,负责关机时显示该图)
|
||
# ============================================================================
|
||
|
||
# ---- 用户态/服务守护二进制(usr/bin,全部 chmod 755 静态 MIPS)----
|
||
patch_v2/bootmenu/meow_bootmenu|/usr/bin/meow_bootmenu|4441822d87e76bfce2ce584604ac3830|引导选单 M2.85(sysui让位 agent-216)
|
||
patch_v2/meow_launcherd/meow_launcherd|/usr/bin/meow_launcherd|6de9762881245a57f547d53102e996be|主屏 launcher M2.92(NP页死循环/电源键/自动息屏修复+充电闪电图标+255插孔消抖并入)
|
||
patch_v2/meow_watchdog/meow_watchdog|/usr/bin/meow_watchdog|52f2dadd6e14a571bb60f48582a2ba66|应用看门狗 M2.93(+wd_vol_save 不再 O_TRUNC 毁设置文件, 改读改写单键去重)
|
||
patch_v2/meow_svcd/meow_svcd|/usr/bin/meow_svcd|605646c4cc93f2baf29071ea6bc870ea|服务管理器 M2.77(+崩溃上报 meow_crash agent-187)
|
||
mips-repo/bins/meow_mdns/bin/meow_mdns|/usr/bin/meow_mdns|d6b0151bda26768f19952dae1342610d|mDNS 应答器 M2.78(启动竞态+换IP重检 agent-194)
|
||
patch_v2/meow_sysui/meow_sysui|/usr/bin/meow_sysui|173013cc8f0899b3001d0b894ac0d9e6|系统 UI(sysui)
|
||
patch_v2/meowpkg/nyai|/usr/bin/nyai|2858c3bd8f57fb723df82cb97b488f31|nyai M2.89(导出 exec 绝对路径相对化修复 agent-240)
|
||
patch_v2/meow_svc_power/meow_svc_power|/usr/bin/meow_svc_power|39ae3aa255695a97f4281124c0621b52|电源专项服务(充电态权威源 mp2731-charger/status,修 battery/status 撒谎恒 Discharging)
|
||
patch_v2/meow_verify/meow_verify|/usr/bin/meow_verify|6c2e8ed24aebe5caf41e7aed391312d5|II期验签 2B(多公钥+v2签名块 agent-221)
|
||
patch_v2/meow_crash/meow_crash|/usr/bin/meow_crash|62781084445e82351bcadbdadbe4c7fc|系统级崩溃捕获 (agent-187)
|
||
patch_v2/meow_svc_perf/meow_svc_perf|/usr/bin/meow_svc_perf|7ea196de9d59ab8cbd1e26edb7762772|性能专项服务 M2.75(net_json 补 network 闭合括号,修 /api/system JSON 解析失败)
|
||
patch_v2/meow_audiod/meow_audiod|/usr/bin/meow_audiod|86a8b6793d516c90bbd12c2997b30d8f|独占音频守护 M2.91(+开机武装 hbc3000 FPGA 根治 PCM 启动死锁;+长流防卡死护栏 §12:ring有界写/ALSA poll自愈/popen有界收割/tx丢弃/watchdog)
|
||
patch_v2/meow_audiod/meow_audio|/usr/bin/meow_audio|c23b96490842f54324b855fd9c2467a5|audiod 用户侧 CLI(status/tone/route/vol;connect/write 全有界 2s 超时)
|
||
|
||
# ---- 开机 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|77da8236453f763d9f09a02e2736b798|svcd 自启(meow_route.conf → audiod.conf + 清理旧 route conf,预置独占音频服务 agent-244/246)
|
||
patch_v2/meow_amsd/meow_amsd|/usr/bin/meow_amsd|da9a5004c6fdb7827c45c27daa825919|活动管理器 M2.91(注册表自愈:卡未挂载扫空 3s 快重试+30s 合并重扫+am rescan;兼容旧 launcher 5 段 EV LAUNCH;agent-250)
|
||
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(注释同步)
|
||
patch_v2/bootmenu/S92_03_start_music_player|/etc/init.d/S92_03_start_music_player|c17257aa3d93f75da72903b57cbe1034|§4.3 兜底 patch(rcS 正常路径被 S90 阻塞不执行)
|
||
patch_v2/bootmenu/S95shutdown_logo|/etc/init.d/S95shutdown_logo|96db7b844d7c26f44835d4681824f578|rcK 关机时显示 /etc/shutdown_logo.jpeg
|
||
|
||
# ---- SSH 会话工具 PATH(etc/profile.d)----
|
||
patch_v2/meow_launcherd/meow_card_path.sh|/etc/profile.d/meow_card_path.sh|ac1963c75190611f14a2d46d217e640a|SSH 会话 PATH(M2.12 起):指向 TF 卡 MeowOS/opt/bin
|