- 新增 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
250 lines
13 KiB
Markdown
250 lines
13 KiB
Markdown
# 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_PARAMS` IPC 失败,错误码 **-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 上则失败。差异集中在:
|
||
|
||
1. **固件**:Linux 6.17 加载 **community** 固件,ChromeOS 使用 **intel-signed**(Linux 的 `/lib/firmware` 中虽有 intel-signed,但内核选择了 community 路径)
|
||
2. **内核**:5.15 与 6.17 的 SOF 驱动在 HDMI 路径上可能不同
|
||
3. **拓扑**: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 是否正常。
|
||
|
||
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 可能已带 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](https://github.com/thesofproject/sof)、[alsa-devel](https://mailman.alsa-project.org/hyperkitty/list/alsa-devel@alsa-project.org/)
|
||
|
||
### 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](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` 中的固件实验相关:
|
||
|
||
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 固件并重启**,再查 **默认设备与静音**。 |