Files
chromebox_10th_audio_driver/audio_topology/ANALYSIS_Audio.md
jack b5193a7f77 docs: Kaisa 音频分析与 Linux/Windows 操作说明
- 新增 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
2026-03-31 08:55:50 +08:00

250 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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=3HDMI2**LastOpen **OK**Plugged **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()
```
- **pcm3HDMI2**、**pcm4HDMI3**`STREAM_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
```
- **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 上则失败。差异集中在:
1. **固件**Linux 6.17 加载 **community** 固件ChromeOS 使用 **intel-signed**Linux 的 `/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**
- 官网 <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
2. **制作 Live USB**:用 Ventoy、Rufus 或 `dd` 写入 U 盘,从 U 盘启动。
3. **启动后选择「尝试 Ubuntu」**,不安装。
4. **在 Live 环境中验证 HDMI 音频**
```bash
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。
### 2. 向 SOF 社区反馈
- 提供 dmesg 中的 `STREAM_PCM_PARAMS ipc failed (-5)` 日志
- 说明Chromebox Kaisa、Coreboot、community 固件、ChromeOS 固件可工作的对比情况
- 参考:[thesofproject/sof](https://github.com/thesofproject/sof)、[alsa-devel](https://mailman.alsa-project.org/hyperkitty/list/alsa-devel@alsa-project.org/)
### 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 正常 | 均正常 | HDMI 正常3.5mm 无声、无插入提示 |
| 下一步 | 确认 pcm 与物理端口对应,复测 HDMI若「原来有声现在无声」见第八节 | — | [OPERATION_Windows_Audio.md](OPERATION_Windows_Audio.md)README 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 / 模拟** | 采集时 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` 中的固件实验相关:
1. **固件未恢复**intel-signed 覆盖 community 后曾出现插拔提示异常;须从 `.bak` 恢复并 **重启**(见该文档「固件实验后回退检查清单」)。
2. **默认输出选成 HDMI**HDMI 打不开时,桌面仍可能选其为默认,表现为「全无声音」;在系统设置中改默认输出为 **模拟/耳机**,或直接用 ALSA 测 **plughw:0,2**。
3. **系统更新**:升级 `linux-firmware` 或内核后,对照「更新后首次无声」时间线;可尝试重启或回退内核包。
### 4. 通用快速自检
根据 `aplay -L` 调整卡号与设备号(以下为 Kaisa 上常见示例):
```bash
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](https://old-releases.ubuntu.com/releases/22.04/) 的 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 固件并重启**,再查 **默认设备与静音**