- 新增 ANALYSIS_Audio.md:三平台对比、HDMI/SOF 分析、第八节「原来有声现在无声」、5.15 Live 说明 - 新增 OPERATION_Force_Intel_Signed_Firmware.md:community 固件路径与回退清单 - 新增 OPERATION_Windows_Audio.md:CoolStar/ALC5682 与 3.5mm 排查步骤 - README:链接上述文档 - 采集:audio_chromeos_scripts_on_linux_jack-Kaisa 样本 - 删除已弃用的 collect_shell_audio.sh Made-with: Cursor
13 KiB
Linux / ChromeOS / Windows 音频拓扑对比分析
基于 collected/ 目录下采集数据的对比,分析 Chromebox 10 代(Kaisa)在三平台上的音频差异。
说明:Linux 采集时 HDMI1 已插入显示器。dmesg 中 -5 错误出现在 pcm3(HDMI2)、pcm4(HDMI3),pcm2(HDMI1)是否有相同问题需结合实际接法确认。
〇、三平台问题概况
| 平台 | HDMI 声音 | 3.5mm 耳机声音 | 插入/拔出提示 |
|---|---|---|---|
| ChromeOS | ✅ 有 | ✅ 有 | ✅ 有 |
| Linux | HDMI1 已插,pcm2/3/4 对应关系待确认 | ✅ 有 | ✅ 有 |
| Windows | ✅ 有 | ❌ 无 | ❌ 无 |
观察:Windows 与 Linux 表现相反——Windows 有 HDMI 无 3.5mm,Linux 有 3.5mm、HDMI 待测。硬件/音频路径相同,差异在驱动,Windows 下 3.5mm(RT5682 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(采集时) | Linux:HDMI1 已插 | eld#2.3 有效 | AudioEndpoint 检测到显示器 | Linux/ChromeOS 一致;Windows 等效 |
| NHLT | 未找到 | 未找到 | Coreboot 下未提供 | 均缺失(Coreboot 下常见) |
结论:硬件、拓扑在三平台一致,差异在驱动。NHLT 缺失并非 Linux 特有,ChromeOS / Windows 也无 NHLT。
二、关键差异:三平台 HDMI / 3.5mm 表现
ChromeOS(HDMI、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=3(HDMI2):LastOpen OK,Plugged yes
- 音频走 CRAS → ALSA → SOF,HDMI 与 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()
- pcm3(HDMI2)、pcm4(HDMI3):
STREAM_PCM_PARAMSIPC 失败,错误码 -5 (EIO) - pcm2(HDMI1):采集时已插入显示器,amixer 显示
HDMI/DP,pcm=2 Jack为 on - 3.5mm:正常,有插入/拔出提示
- 说明:dmesg 中 -5 错误集中在 pcm3/pcm4,若显示器接在 HDMI1 则 pcm2 可能有不同表现,需结合实际接法复测
Windows(HDMI 正常,3.5mm 无声)
AudioEndpoint: ASUS MG279 (英特尔(R) 显示器音频) | Status: OK
Media devices: Realtek ALC5682 I2S Audio | Status: OK
英特尔(R) 显示器音频 | Status: OK
- HDMI:Intel 显示器音频驱动正常,ASUS MG279 可输出声音
- 3.5mm:Realtek 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 OK,Plugged yes | dmesg: STREAM_PCM_PARAMS -5 |
结论:在同一硬件、同一显示器、ELD 均有效的前提下,ChromeOS 上 pcm3 可正常打开,Linux 上则失败。差异集中在:
- 固件:Linux 6.17 加载 community 固件,ChromeOS 使用 intel-signed(Linux 的
/lib/firmware中虽有 intel-signed,但内核选择了 community 路径) - 内核:5.15 与 6.17 的 SOF 驱动在 HDMI 路径上可能不同
- 拓扑:ChromeOS 为未压缩 .tplg,Linux 为 .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
- 通用 Linux:PulseAudio/PipeWire → ALSA → SOF,无此类定制
六、建议排查与尝试
1. 内核版本(优先):用 Live CD 测试
Ubuntu 22.04 LTS 默认使用 5.15 内核,与 ChromeOS 一致。可借助 Live CD 在不安装系统的情况下验证 5.15 上 HDMI 是否正常。
-
下载 Ubuntu 22.04 LTS 的 Live ISO
- 官网 https://releases.ubuntu.com/22.04/ 提供的是 22.04.5(较新,可能已带 HWE 6.x 内核)
- 若需 5.15 内核,请从 旧版镜像 下载 22.04.1 或 22.04.2:
- https://old-releases.ubuntu.com/releases/22.04/ 或 https://old-releases.ubuntu.com/releases/22.04.2/
- 如:
ubuntu-22.04.2-desktop-amd64.iso(22.04.2 时仍多为 5.15)
-
制作 Live USB:用 Ventoy、Rufus 或
dd写入 U 盘,从 U 盘启动。 -
启动后选择「尝试 Ubuntu」,不安装。
-
在 Live 环境中验证 HDMI 音频:
uname -r # 一般显示 5.15.0-xx-generic speaker-test -D plughw:0,3 -c 2 -l 1 # 测试 HDMI -
说明:22.04.3、22.04.4、22.04.5 等较新 ISO 可能已带 HWE(6.x)内核,为稳妥起见,优先用 old-releases 的 22.04.1 或 22.04.2 镜像;若本地只有 22.04.5,可在启动菜单中尝试选择带
generic的内核,或在安装后禁用 HWE 再切回 5.15。
2. 向 SOF 社区反馈
- 提供 dmesg 中的
STREAM_PCM_PARAMS ipc failed (-5)日志 - 说明:Chromebox Kaisa、Coreboot、community 固件、ChromeOS 固件可工作的对比情况
- 参考:thesofproject/sof、alsa-devel
3. NHLT 的优先级
- 当前:ChromeOS 和 Linux 均无 NHLT,ChromeOS 正常,说明 NHLT 缺失不是 HDMI 失败的根本原因
- 若在 Coreboot 中补齐 NHLT 后仍有问题,应继续从固件/内核/拓扑方向排查
七、结论概要
| 结论 | Linux | ChromeOS | Windows |
|---|---|---|---|
| 硬件一致 | sof-rt5682, 同左 | sof-rt5682, 同左 | Realtek ALC5682 + Intel 显示器音频,同硬件 |
| 采集条件 | HDMI1 已插入 | HDMI1 已插入 | HDMI 已连接 |
| 问题表现 | HDMI:pcm3/4 -5 错误;3.5mm 正常 | 均正常 | HDMI 正常;3.5mm 无声、无插入提示 |
| 下一步 | 确认 pcm 与物理端口对应,复测 HDMI;若「原来有声现在无声」见第八节 | — | OPERATION_Windows_Audio.md;README W1–W4 |
八、Linux「原来有声音、现在没有」原因分析
排查前先分清是哪种输出没声:HDMI / 显示器、3.5mm 耳机,或两者皆无。不同情况对应不同原因。
1. 分辩:哪种声音没了
| 情况 | 与本项目采集结论的关系 | 最可能原因 |
|---|---|---|
| HDMI / 显示器 | 已记录 Linux 上 pcm3/pcm4 出现 STREAM_PCM_PARAMS ipc failed (-5),ChromeOS 正常 |
多为 6.x 内核下 SOF + HDMI 路径长期问题,不是典型「硬件突然损坏」;若曾以为 HDMI 有过声,可能是接在 pcm2(HDMI1)、或与其它系统/设备混淆 |
| 3.5mm / 模拟 | 采集时 Linux 上 3.5mm 正常,speaker-test 在 plughw:0,2 可播(设备号以本机 aplay -L 为准) |
若现在连 3.5mm 也无声:优先查 固件是否仍为实验替换版、默认输出是否指到打不开的 HDMI、PipeWire/Pulse 静音或服务异常 |
2. 若没声的是 HDMI
- 机制:错误在 DSP 与固件之间的 IPC(
hw_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 中的固件实验相关:
- 固件未恢复:intel-signed 覆盖 community 后曾出现插拔提示异常;须从
.bak恢复并 重启(见该文档「固件实验后回退检查清单」)。 - 默认输出选成 HDMI:HDMI 打不开时,桌面仍可能选其为默认,表现为「全无声音」;在系统设置中改默认输出为 模拟/耳机,或直接用 ALSA 测 plughw:0,2。
- 系统更新:升级
linux-firmware或内核后,对照「更新后首次无声」时间线;可尝试重启或回退内核包。
4. 通用快速自检
根据 aplay -L 调整卡号与设备号(以下为 Kaisa 上常见示例):
uname -r
aplay -l
aplay -L | head -80
speaker-test -D plughw:0,2 -c 2 -l 1 # 常见为 3.5mm / Port1
speaker-test -D plughw:0,3 -c 2 -l 1 # 常见为某路 HDMI(以 aplay -L 为准)
sudo dmesg | grep -iE 'sof|audio|error' | tail -40
- 0,2 有声、HDMI 无声:与本文 HDMI/SOF 分析一致。
- 0,2 也无声:查固件回退、
systemctl --user status pipewire(或 pulseaudio)、wpctl 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 -r 与 speaker-test 对比 HDMI 是否恢复。
6. 结论摘要
- HDMI:与「同机 ChromeOS 有 HDMI、Linux 无」的长期现象一致,主因倾向 内核 6.x 与 SOF 在 HDMI PCM 上的行为;拓扑与单次固件替换已不足以解释/修复。
- 3.5mm 从有到无:优先 回退 community 固件并重启,再查 默认设备与静音。