Files
chromebox_10th_audio_driver/audio_topology/ANALYSIS_Audio.md
2026-04-05 04:34:42 +08:00

14 KiB
Raw Blame History

Linux / ChromeOS / Windows 音频拓扑对比分析

基于 collected/ 目录下采集数据的对比,分析 Chromebox 10 代Kaisa在三平台上的音频差异。

说明Linux 采集时 HDMI1 已插入显示器。dmesg 中 -5 错误出现在 pcm3HDMI2、pcm4HDMI3pcm2HDMI1是否有相同问题需结合实际接法确认。


〇、三平台问题概况

平台 HDMI 声音 3.5mm 耳机声音 插入/拔出提示
ChromeOS
Linux HDMI1 已插pcm2/3/4 对应关系待确认
Windows

观察Windows 与 Linux 表现相反——Windows 有 HDMI 无 3.5mmLinux 有 3.5mm、HDMI 待测。硬件/音频路径相同差异在驱动Windows 下 3.5mmRT5682 codec需单独排查。


一、硬件与拓扑一致性

项目 Linux (Ubuntu) ChromeOS Windows 结论
机型 Google-Kaisa-rev4 Google-Kaisa-rev4 Kaisa 三平台一致
声卡/驱动 sof-rt5682 (SOF) sof-rt5682 (SOF) Realtek ALC5682 + Intel 显示器音频 同硬件,驱动不同
Codec Intel Kabylake HDMI Intel Kabylake HDMI Intel HDMI (8086/280B) + Realtek ALC5682 同硬件
PCM/端点 HDMI1/2/3, Port1, DMIC HDMI1/2/3, Port1, DMIC ASUS MG279 (Intel 显示器音频) 等 拓扑等效
显示器 ASUS MG279 (DisplayPort) ASUS MG279 ASUS MG279 三平台一致
ELD采集时 LinuxHDMI1 已插 eld#2.3 有效 AudioEndpoint 检测到显示器 Linux/ChromeOS 一致Windows 等效
NHLT 未找到 未找到 Coreboot 下未提供 均缺失Coreboot 下常见)

结论硬件、拓扑在三平台一致差异在驱动。NHLT 缺失并非 Linux 特有ChromeOS / Windows 也无 NHLT。


二、关键差异:三平台 HDMI / 3.5mm 表现

ChromeOSHDMI、3.5mm 均正常)

cras_test_client --dump_server_info:
Output Devices:
  ID 10   LastOpen: OK   sof-rt5682: :0,3
Output Nodes:
  (0b85518e) 10:0  Plugged: yes  HDMI  2ch  ASUS MG279
  • pcm=3HDMI2LastOpen OKPlugged yes
  • 音频走 CRAS → ALSA → SOFHDMI 与 3.5mm 播放均正常

Linux采集时 HDMI1 已插入)

dmesg:
sof-audio-pci-intel-cnl: sof_ipc3_pcm_hw_params: pcm3 (HDMI2), dir 0: STREAM_PCM_PARAMS ipc failed for stream_tag 1
sof-audio-pci-intel-cnl: ASoC error (-5): at snd_soc_pcm_component_hw_params()
HDMI2: ASoC error (-5): at dpcm_fe_dai_hw_params()
  • pcm3HDMI2pcm4HDMI3STREAM_PCM_PARAMS IPC 失败,错误码 -5 (EIO)
  • pcm2HDMI1采集时已插入显示器amixer 显示 HDMI/DP,pcm=2 Jack 为 on
  • 3.5mm:正常,有插入/拔出提示
  • 说明dmesg 中 -5 错误集中在 pcm3/pcm4若显示器接在 HDMI1 则 pcm2 可能有不同表现,需结合实际接法复测

WindowsHDMI 正常3.5mm 无声)

AudioEndpoint: ASUS MG279 (英特尔(R) 显示器音频) | Status: OK
Media devices: Realtek ALC5682 I2S Audio | Status: OK
              英特尔(R) 显示器音频 | Status: OK
  • HDMIIntel 显示器音频驱动正常ASUS MG279 可输出声音
  • 3.5mmRealtek ALC5682 驱动已加载Status OK但实际无声音、无插入/拔出提示

三、差异对比表

项目 Linux (Ubuntu) ChromeOS Windows
内核/系统 6.17.0-14-generic 5.15.186-24551 (ChromeOS 定制) Windows 10 LTSC 19044
SOF 固件 intel/sof/community/sof-cml.ri intel/sof/intel-signed/sof-cml.ri CoolStar csaudiointcsof.sys报错/ Intel IntcDAud.sys
拓扑文件 sof-tplg/sof-cml-rt5682.tplg.zst sof-cml-rt5682.tplg (35711 字节) Windows 音频端点)
音频服务 PulseAudio / PipeWire CRAS (Chrome OS Audio Server) Windows Audio (WASAPI)
HDMI 行为 STREAM_PCM_PARAMS 失败 (-5) 正常播放 正常播放
3.5mm 行为 正常 正常 无声、无插入/拔出提示

四、同脚本采集对比ChromeOS vs Linux

基于 audio_chromeos_scripts_on_chromeos_localhost_*audio_chromeos_scripts_on_linux_jack-Kaisa_*(相同脚本、相同硬件 Kaisa、同一显示器 ASUS MG279的对比

项目 ChromeOS (localhost) Linux (jack-Kaisa)
内核 5.15.186-24551 6.17.0-14-generic
固件实际加载 sof-cml.ri → intel-signed intel/sof/community/sof-cml.ri
拓扑 sof-cml-rt5682.tplg (35711 字节) sof-cml-rt5682.tplg.zst
ELD eld#2.3 有效ASUS MG279 eld#2.3 有效ASUS MG279
HDMI pcm3 cras: LastOpen OKPlugged yes dmesg: STREAM_PCM_PARAMS -5

结论在同一硬件、同一显示器、ELD 均有效的前提下ChromeOS 上 pcm3 可正常打开Linux 上则失败。差异集中在:

  1. 固件Linux 6.17 加载 community 固件ChromeOS 使用 intel-signedLinux 的 /lib/firmware 中虽有 intel-signed但内核选择了 community 路径)
  2. 内核5.15 与 6.17 的 SOF 驱动在 HDMI 路径上可能不同
  3. 拓扑ChromeOS 为未压缩 .tplgLinux 为 .tplg.zst来源与版本可能不同

建议尝试:强制 Linux 使用 intel-signed 固件(见 OPERATION_Force_Intel_Signed_Firmware.md)。实测:替换 community/sof-cnl.ri.zst 并重启后 HDMI 仍失败,且可能影响 3.5mm 插拔检测;详见第五节、第八节。


五、若 HDMI 仍失败,可能原因(按优先级分析)

以下分析仅在「HDMI 已连接状态下 Linux 仍无声音」时适用。

1. 拓扑(拓扑是相同硬件,应等效)

项目 ChromeOS Linux 结论
拓扑文件 sof-cml-rt5682.tplg (35711 字节) sof-cml-rt5682.tplg.zst → 解压 ~35 KB 等效
存放路径 intel/sof/ intel/sof-tplg/ 仅路径不同
PCM/端点 HDMI1/2/3, Port1, DMIC 同左 一致

结论同一硬件Kaisa拓扑结构应相同。解压后大小接近~35 KB格式差异.tplg vs .tplg.zst不会导致 IPC 失败。拓扑本身可基本排除

2. 固件(已测试,非主因)

  • 已用 intel-signed 替换 community 固件并重启HDMI 仍失败
  • 说明固件版本不是主要差异,问题更可能在驱动或驱动与固件的交互

3. 内核 / 驱动(当前重点怀疑)

项目 ChromeOS Linux
内核 5.15.186-24551 6.17.0-14-generic
SOF 驱动 5.15 系列 6.17 系列

已知情况

  • 5.16+ 有 SOF IPC 回归报告suspend/resume 后音频恢复失败)
  • 6.16+ 有 Intel Alder Lake SOF 相关异常报告
  • 错误 -5 (EIO) 常见于 DAI 在 hw_params 前未正确初始化

结论6.17 相比 5.15 的 SOF 驱动改动较大HDMI 相关的 DAI 初始化或 IPC 逻辑变化更可能导致 STREAM_PCM_PARAMS ipc failed (-5)建议尝试 5.15 LTS 内核验证

4. 音频栈差异

  • CRAS 为 ChromeOS 定制,可能有针对 Chromebox 的 workaround
  • 通用 LinuxPulseAudio/PipeWire → ALSA → SOF无此类定制

六、建议排查与尝试

1. 内核版本(优先):用 Live CD 测试

Ubuntu 22.04 LTS 默认使用 5.15 内核,与 ChromeOS 一致。可借助 Live CD 在不安装系统的情况下验证 5.15 上 HDMI 是否正常。

  1. 下载 Ubuntu 22.04 LTS 的 Live ISO

  2. 制作 Live USB:用 Ventoy、Rufus 或 dd 写入 U 盘,从 U 盘启动。

  3. 启动后选择「尝试 Ubuntu」,不安装。

  4. 在 Live 环境中验证 HDMI 音频

    uname -r                              # 一般显示 5.15.0-xx-generic
    speaker-test -D plughw:0,3 -c 2 -l 1  # 测试 HDMI
    
  5. 说明22.04.3、22.04.4、22.04.5 等较新 ISO 可能已带 HWE6.x内核为稳妥起见优先用 old-releases 的 22.04.1 或 22.04.2 镜像;若本地只有 22.04.5,可在启动菜单中尝试选择带 generic 的内核,或在安装后禁用 HWE 再切回 5.15。

  6. 勿与 Mainline 5.15 deb 混淆:在已安装的 Ubuntu 24.04 上安装 kernel.ubuntu.com Mainline 的 5.15(如 v5.15.201不是「Ubuntu 22.04 自带的 5.15.0-xx 栈」,真机曾出现 HDMI 仍无声且 3.5mm/WiFi 也异常;对照 ChromeOS 或验证「是否 6.x 独有」时,不要用 Mainline 代替 22.04 早期 Live 或上游 issue详见 REANALYSIS 文档

2. 向 SOF 社区反馈

  • 提供 dmesg 中的 STREAM_PCM_PARAMS ipc failed (-5) 日志
  • 说明Chromebox Kaisa、Coreboot、community 固件、ChromeOS 固件可工作的对比情况
  • 参考:thesofproject/sofalsa-devel

3. NHLT 的优先级

  • 当前ChromeOS 和 Linux 均无 NHLTChromeOS 正常,说明 NHLT 缺失不是 HDMI 失败的根本原因
  • 若在 Coreboot 中补齐 NHLT 后仍有问题,应继续从固件/内核/拓扑方向排查

七、结论概要

结论 Linux ChromeOS Windows
硬件一致 sof-rt5682, 同左 sof-rt5682, 同左 Realtek ALC5682 + Intel 显示器音频,同硬件
采集条件 HDMI1 已插入 HDMI1 已插入 HDMI 已连接
问题表现 HDMIpcm3/4 -5 错误;3.5mm/模拟耳机在选对 plughw 时可播;设备号以 aplay -L 为准plughw:0,2≠3.5mm 物理口 均正常 HDMI 正常3.5mm 无声、无插入提示
下一步 确认 pcm 与物理端口对应,复测 HDMI若「原来有声现在无声」见第八节 OPERATION_Windows_Audio.mdREADME W1W4

八、Linux「原来有声音、现在没有」原因分析

排查前先分清是哪种输出没声HDMI / 显示器、3.5mm 耳机,或两者皆无。不同情况对应不同原因。

1. 分辩:哪种声音没了

情况 与本项目采集结论的关系 最可能原因
HDMI / 显示器 已记录 Linux 上 pcm3/pcm4 出现 STREAM_PCM_PARAMS ipc failed (-5)ChromeOS 正常 多为 6.x 内核下 SOF + HDMI 路径长期问题,不是典型「硬件突然损坏」;若曾以为 HDMI 有过声,可能是接在 pcm2HDMI1、或与其它系统/设备混淆
3.5mm / 模拟 选对设备后,系统可在模拟耳机上正常播放卡号/设备号必须以本机 aplay -L 为准。Kaisa 上 plughw:0,2 已验证:不是 3.5mm 对应那条(勿用 Front L/R 或索引号代替看 aplay -L 若仍无声:确认 Headphones / Analog 那条 plughw固件实验是否未回退默认 sinkPipeWire 静音

2. 若没声的是 HDMI

  • 机制:错误在 DSP 与固件之间的 IPChw_params),属 驱动/内核与 HDMI PCM 的兼容性
  • 固件:已用 intel-signed 覆盖 community/sof-cnl.ri.zst 并重启后 HDMI 仍失败,说明 单靠换该固件不能恢复 HDMI
  • 下一步:第六节 5.15 Live CD 对比验证,判断是否为 6.x SOF 回归

3. 若没声的是 3.5mm(以前正常)

常与 OPERATION_Force_Intel_Signed_Firmware.md 中的固件实验相关:

  1. 固件未恢复intel-signed 覆盖 community 后曾出现插拔提示异常;须从 .bak 恢复并 重启(见该文档「固件实验后回退检查清单」)。
  2. 默认输出选成 HDMIHDMI 打不开时,桌面仍可能选其为默认,表现为「全无声音」;在系统设置中改默认输出为 模拟/耳机,或直接用 ALSA 测 aplay -L 里标为耳机/模拟的那条 plughw(勿假定某固定 0,2)。
  3. 系统更新:升级 linux-firmware 或内核后,对照「更新后首次无声」时间线;可尝试重启或回退内核包。

4. 通用快速自检

根据 aplay -L 调整卡号与设备号(勿死记 0,2=耳机Kaisa 上 plughw:0,2 不是 3.5mm,但 耳机/模拟那条 plughw 在实机上可播

uname -r
aplay -l
aplay -L | head -120
# 对「耳机 / Analog / Headphones」与「HDMI / HDA」各找一条 plughw分别 speaker-test
speaker-test -D plughw:卡,设备 -c 2 -l 1   # 卡、设备以 aplay -L 为准
sudo dmesg | grep -iE 'sof|audio|error' | tail -40
  • 耳机对应 PCM 有声、仅 HDMI 类 PCM 无声:与本文 HDMI/SOF 分析一致。
  • 耳机对应 PCM 也无声:查固件回退、systemctl --user status pipewire(或 pulseaudiowpctl status / pactl info 中的默认 sink 与静音。

5. 若仅 HDMI 异常5.15 Live 验证

第六节 使用 Ubuntu 22.04 较早点版本 Live ISO优先 old-releases 的 22.04.1 / 22.04.2,避免 22.04.5 自带 HWE 6.x在 Live 环境中执行 uname -rspeaker-test 对比 HDMI 是否恢复。

6. 结论摘要

  • HDMI:与「同机 ChromeOS 有 HDMI、Linux 无」的长期现象一致,主因倾向 内核 6.x 与 SOF 在 HDMI PCM 上的行为;拓扑与单次固件替换已不足以解释/修复。
  • 3.5mm 从有到无:优先 回退 community 固件并重启,再查 默认设备与静音