A1: meow_audiod 独占音频服务(agent-244 骨架 + agent-246 真机收尾)

- meow_audiod:启动门控(/tmp/meow_boot_mode 非 meow exit 0)、IO/播放/路由三线程、
  ring ~200ms、ALSA UAPI 独占直开、切率 mute-重配-恢复、抢占(后开赢+PREEMPTED)、
  socket EOF 回收、xrun PREPARE 恢复;meow_route 轮询逻辑并入路由线程
- meow_audio CLI:status/tone/route/vol;services.d/audiod.conf(trigger=manual,on-fail)
- SDK meow_ui_audio.c 编进 meow_ui.a:懒连接/读线程分发 PREEMPTED 回调/EPIPE 标死/
  无 audiod 返回 MEOW_ERR_NOENT 不隐式直开(MEOW_AUDIO_DIRECT=1 仅调试)
- launcher:确认 MeowOS 模式后 meow_svcd start audiod(double-fork best-effort 不阻塞)
- meow_route 退役:S89 预置换 audiod.conf + 清理旧 meow_route.conf(防拉起已删二进制
  重启循环);fw_content.conf 删 meow_route、加 meow_audiod+meow_audio(md5 打包时填)
- 真机定位并修复 ALSA UAPI 两大坑(即 ncm 播放无声根因):
  ① hw_params 须全放行初始化(mask 全 1/interval [0,UINT_MAX]),memset 0 interval
     等价只能取 0 → refine 必空 → HW_PARAMS 恒 EINVAL
  ② access/format mask 先清零再单点(pmask 只 OR),全 1 被 choose 成 MMAP_INTERLEAVED
     → write() 恒 EINVAL
- 附带修复:dev_write fd<0 防日志风暴丢 PCM 限频日志;SDK state 解析 app_id 截空白;
  meow_ui.h 文档负错误码表述修正
- 验证:宿主 FILE sink 全 IPC 链+抢占+tone WAV 20/20,SDK 客户端 13/13;
  qemu-mipsel 同过;真机 tone 44.1k/96k 切率 written=played、underrun=0、日志完整
- meow_ui.a 53a3edd2 → ncm 重链 d2031829(已热更到卡);launcher a2f932a1
This commit is contained in:
MeowOS committed 2026-08-31 22:40:08 +08:00
1 parent 94874107b6
commit ade0a57353
24 files changed
+2795 -11

No files matched your search

+16 -7
View File
@@ -110,21 +110,30 @@ EOF
chmod 644 /usr/data/meow/services.d/meow_crash.conf
echo -n "provisioned crash.conf "
fi
if [ -f /usr/data/meow/services.d/meow_route.conf ]; then
echo -n "route.conf exists "
if [ -f /usr/data/meow/services.d/audiod.conf ]; then
echo -n "audiod.conf exists "
else
cat > /usr/data/meow/services.d/meow_route.conf <<'EOF2'
exec=/usr/bin/meow_route
cat > /usr/data/meow/services.d/audiod.conf <<'EOF2'
exec=/usr/bin/meow_audiod
args=
enabled=1
restart=on-fail
backoff_ms=2000
max_restart=5
trigger=boot
trigger=manual
cap=
EOF2
chmod 644 /usr/data/meow/services.d/meow_route.conf
echo -n "provisioned route.conf "
chmod 644 /usr/data/meow/services.d/audiod.conf
echo -n "provisioned audiod.conf "
fi
# meow_route 退役(并入 meow_audiod,AUDIOD_DESIGN.md §5):清理旧固件遗留的
# meow_route.conf(trigger=boot 会拉起已被固件移除的 /usr/bin/meow_route → 重启循环)。
if [ -f /usr/data/meow/services.d/meow_route.conf ]; then
if [ -x /usr/bin/meow_svcd ]; then
/usr/bin/meow_svcd stop meow_route 2>/dev/null
fi
rm -f /usr/data/meow/services.d/meow_route.conf
echo -n "removed stale meow_route.conf "
fi
if [ -f /usr/data/meow/services.d/meow_amsd.conf ]; then
echo -n "amsd.conf exists "