更新源码

This commit is contained in:
2026-04-04 18:13:40 +08:00
parent 2e20b8e2c5
commit beed35ec13
31 changed files with 1632 additions and 209 deletions

View File

@@ -0,0 +1,57 @@
# ChromeOS 5.15 与 Ubuntu HWE 6.17HDMI / iDisp 链路对照Kaisa
本仓库在 `chromiumos_kernel/v5.15/` 下可对照 **ChromeOS 内核**`release-R144-16503.B-chromeos-5.15`),与 **`kernel-src/linux-hwe-6.17-6.17.0/`**Noble 源码包)中同一文件:
`sound/soc/intel/boards/sof_board_helpers.c``set_idisp_hdmi_link()`
---
## 一、共同点(两端逻辑一致的部分)
- 链接名 `iDisp%d`、CPU `iDisp%d Pin`、codec `ehdaudio0D2` + `intel-hdmi-hifi%d`(当 `idisp_codec` 为真时)与 `sof_board_helpers` 里其它平台字段一致。
- `link->no_pcm = 1;`HDMI 为 **BE 链路**
---
## 二、关键差异API 演进,不是简单“抄一行”)
### ChromeOS 5.15(旧 `struct snd_soc_dai_link`
- 使用 **`link->dpcm_playback = 1;`**(当时 DPCM 字段名)。
### Ubuntu HWE 6.17(上游已改名)
- 使用 **`link->playback_only = 1;`**(对应 `include/sound/soc.h` 中的 DPCM 语义)。
- **勿**在 6.17 上把 `playback_only` 改回 `dpcm_playback`(字段已移除,无法编译)。历史说明见 [`DIFF_SUMMARY.txt`](../../patches/ubuntu-hwe-6.17/DIFF_SUMMARY.txt)。
---
## 三、后续补丁方向(原 0001/0002 已移除)
曾尝试在 `set_idisp_hdmi_link` 中增加 **`SND_SOC_DPCM_TRIGGER_POST`**(旧称 0002**Kaisa 真机 HDMI 仍无声**;该补丁已从仓库删除。
新补丁应在细读 **ChromeOS 5.15 与 6.17****`sound/soc/sof/ipc3.c``pcm.c``sound/soc/sof/intel/hda-dai.c`** 等上的差异后再设计,流程见 [`../kernel-build/OPERATION_ChromeOS_Kernel_Deep_Diff.md`](../kernel-build/OPERATION_ChromeOS_Kernel_Deep_Diff.md)、[`../meta/CHROMEOS_vs_UBUNTU617_SOUND_AUTODIFF.md`](../meta/CHROMEOS_vs_UBUNTU617_SOUND_AUTODIFF.md)、[`patches/ubuntu-hwe-6.17/README.md`](../../patches/ubuntu-hwe-6.17/README.md)。
---
## 四、建议的本地 diff 命令(只读对照)
在仓库根目录:
```bash
diff -u \
chromiumos_kernel/v5.15/sound/soc/intel/boards/sof_board_helpers.c \
kernel-src/linux-hwe-6.17-6.17.0/sound/soc/intel/boards/sof_board_helpers.c \
| less
```
若只关心 iDisp 段,可先在两文件中分别定位 `set_idisp_hdmi_link` 再手动对比。
---
## 五、与项目其它文档的关系
- 三平台现象与 dmesg 要点:`audio_topology/ANALYSIS_Audio.md`
- Ubuntu 打包与磁盘、勿混用 `make`/`debian/rules``../meta/WORK_PROGRESS.md`
- HWE 6.17 构建脚本:`scripts/ubuntu-hwe-617-build.sh`(应用补丁需 **`PATCH=...`**
- ChromeOS 深度 diff 与导出三文件 diff`../kernel-build/OPERATION_ChromeOS_Kernel_Deep_Diff.md`

View File

@@ -0,0 +1,105 @@
# Linux HDMI 无声:路线图与未来步骤
本文是 **Google KaisaChromebox 10 代)+ Coreboot** 下 Linux **HDMI 无声音**问题的 **主路线图**。技术细节与论证见各专项文档;本文只固定 **顺序、产出物与维护方式**
**全文档索引**[INDEX.md](../INDEX.md)
**项目总览与问题表**[../../README.md](../../README.md)
---
## 一、问题与范围
- **硬件**Google KaisaCorebootHDMI 走 **SOF + iDisp / DisplayPort 音频** 链路。
- **典型现象**Linux 下 **HDMI 无输出或无法稳定打开 PCM****3.5mm 通常正常**。同机 **ChromeOS / Windows HDMI 正常** 时,问题集中在 **Linux 内核 / SOF / 用户态路由**,而非线缆或显示器本身。
- **dmesg 常见线索**`STREAM_PCM_PARAMS` IPC 失败、约 **-5EIO**,常与 **pcm2/3/4HDMI1/2/3** 某条相关(物理口与编号需实测对照)。
- **非本仓库机型**:其它机器 HDMI 无声原因可能完全不同(独显、默认 sink、PipeWire 等),**勿直接套用**本仓库内核补丁;可借用 [阶段 1](#阶段-1用户态基线) 的排查套路,根因结论见各文档。
---
## 二、已排除或低期望方向
下列方向在仓库内**已有结论或真机反馈**;重复投入前请先读链接,避免走弯路。
| 方向 | 结论摘要 | 详见 |
| ---- | -------- | ---- |
| 仅替换拓扑tplg | 与 ChromeOS 等效,**单独换 tplg 不能恢复 HDMI** | [ANALYSIS_Audio.md](../../audio_topology/ANALYSIS_Audio.md) |
| 仅换 intel-signed / community SOF 固件 | **不能单独恢复 HDMI**;可能影响插拔检测 | [OPERATION_Force_Intel_Signed_Firmware.md](../../audio_topology/OPERATION_Force_Intel_Signed_Firmware.md)、[WORK_PROGRESS.md](../meta/WORK_PROGRESS.md) |
| 旧 **0002**iDisp `TRIGGER_POST` | 真机无效;已从仓库删除 | [REANALYSIS_Linux_HDMI_Audio_Kaisa.md](REANALYSIS_Linux_HDMI_Audio_Kaisa.md)、[DIFF_SUMMARY.txt](../../patches/ubuntu-hwe-6.17/DIFF_SUMMARY.txt) |
| Ubuntu **Mainline 5.15** deb如 kernel.ubuntu.com | 真机 **HDMI 仍无声****3.5mm / WiFi 异常****不等于** ChromeOS 5.15 | [REANALYSIS_Linux_HDMI_Audio_Kaisa.md](REANALYSIS_Linux_HDMI_Audio_Kaisa.md) |
| NHLT 缺失 | **不是**根因ChromeOS 也无 NHLT 仍正常) | [ANALYSIS_Audio.md](../../audio_topology/ANALYSIS_Audio.md) 第六节 |
---
## 三、分阶段路线图
```mermaid
flowchart LR
phase1[phase1_baseline_user]
phase2[phase2_kernel_0001]
phase3[phase3_deep_diff_bisect]
phase4[phase4_upstream_issue]
phase1 --> phase2 --> phase3 --> phase4
```
### 阶段 1用户态基线
**目的**:确认设备枚举、默认输出、以及 dmesg 是否已出现 IPC 错误(避免「选错 sink」假阳性
1. `aplay -L` / `aplay -l`,对 **每个 HDMI 类** `plughw:卡号,设备号` 执行 `speaker-test`(见 [REPAIR_Plan_Audio.md](../../audio_topology/REPAIR_Plan_Audio.md) 1.2 节)。
2. 运行 [collect_linux_audio_topology.sh](../../audio_topology/collect_linux_audio_topology.sh)(建议 `sudo`),输出到 `audio_topology/collected/`;其中含 **SOF / HDMI / IPC 基线** dmesg 过滤。
3. 图形环境下确认默认播放设备未锁死在打不开的 HDMI 上。
**产出**:带时间戳的采集文件,便于前后对比。
### 阶段 2HWE 6.17 与 0001 补丁
**目的**:在发行版栈上验证仓库内 **0001**`ipc3-pcm.c`FREE / trigger 使用 `sof_ipc_tx_message` + 回复),并正确安装自编内核与模块包。
1. 源码与版本:见 [kernel-src/README.md](../../kernel-src/README.md);在 **Ubuntu Noble** 上与运行内核一致的 `apt source linux-hwe-6.17=...`
2. 补丁校验: [scripts/verify-ubuntu-hwe617-0001-patch.sh](../../scripts/verify-ubuntu-hwe617-0001-patch.sh)`patch --dry-run`;若树中已含补丁内容会提示跳过)。
3. 构建与安装:`PATCH=...` [scripts/ubuntu-hwe-617-build.sh](../../scripts/ubuntu-hwe-617-build.sh) `apply``deps``build`;安装见 [OPERATION_Install_CustomKernel_Ubuntu_HWE617.md](../kernel-build/OPERATION_Install_CustomKernel_Ubuntu_HWE617.md)**linux-image-unsigned**、`linux-modules` + **modules-extra**、必要时 **iwlwifi** 等)。
4. **0001 与 `STREAM_PCM_PARAMS`**0001 对齐 ChromeOS 的 FREE/trigger 路径;**不改变** `hw_params` / `STREAM_PCM_PARAMS` 发送逻辑。若 HDMI 仍失败且 dmesg 仍报 **PARAMS**,见 [STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md](../../patches/ubuntu-hwe-6.17/STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md)、[DIFF_SUMMARY.txt](../../patches/ubuntu-hwe-6.17/DIFF_SUMMARY.txt)。
**产出**:可启动的自编内核;复测后新的 `collected/` 与 dmesg 片段。
### 阶段 3深度对照与可选 trace
**目的**:在 6.x 上定位 **iDisp / SOF IPC** 与 ChromeOS 5.15 的差异,为**新补丁**或 **bisect** 提供依据。
1. 克隆 ChromiumOS 5.15 内核树: [WORK_PROGRESS.md](../meta/WORK_PROGRESS.md) 第二节。
2. 流程与导出:`git` unshallow、按文件 diff [OPERATION_ChromeOS_Kernel_Deep_Diff.md](../kernel-build/OPERATION_ChromeOS_Kernel_Deep_Diff.md);脚本 [diff-chromeos-ubuntu-sound.sh](../../scripts/diff-chromeos-ubuntu-sound.sh)、[export-chromeos-ubuntu-sound-file-diffs.sh](../../scripts/export-chromeos-ubuntu-sound-file-diffs.sh)。
3. 仍无声时一键列文档与条件运行对照: [linux-hdmi-followup-workflow.sh](../../scripts/linux-hdmi-followup-workflow.sh)。
4. **可选**:按 [OPERATION_Kaisa_SOF_HDMI_Trace.md](OPERATION_Kaisa_SOF_HDMI_Trace.md)、[README_TRACE_KAISA.md](../../audio_topology/collected/README_TRACE_KAISA.md) 抓取带 IPC 载荷的日志。
**产出**`reference/` 下 unified diff若已配置双树、或明确的「缺哪棵树」记录。
### 阶段 4上游协同
**目的**:将 **最小复现包** 交给 SOF / ALSA 社区,避免闭门造车。
- 清单与邮件模板: [UPSTREAM_SOF_Kaisa_HDMI_REPRO.md](UPSTREAM_SOF_Kaisa_HDMI_REPRO.md)。
---
## 四、成功标准(建议)
- **客观**:对目标 HDMI 口播放时,**dmesg 中无**与本次播放相关的 **`STREAM_PCM_PARAMS` / `ipc tx error`**(或已确认为无害/已修复)。
- **主观**:显示器扬声器或耳机有稳定输出。
- **回归**3.5mm、WiFi 等与本次改动无关的子系统无意外损坏(自编内核时注意装全模块包)。
---
## 五、维护与「当前阶段」
- **路线图正文**为本文件;**换机与源码 URL、实验结论**以 [WORK_PROGRESS.md](../meta/WORK_PROGRESS.md) 为准两者应同步WORK_PROGRESS 内「Linux HDMI 当前阶段」见该文件顶部)。
- **任务编号 L1L4** 与阶段对应关系见根 [README.md](../../README.md) 任务列表。
---
## 六、相关文档速链
| 用途 | 链接 |
| ---- | ---- |
| Linux 分步操作与索引 | [REPAIR_Plan_Audio.md](../../audio_topology/REPAIR_Plan_Audio.md) |
| 长文分析Mainline 误区、自定义内核注意) | [REANALYSIS_Linux_HDMI_Audio_Kaisa.md](REANALYSIS_Linux_HDMI_Audio_Kaisa.md) |
| API 对照(`playback_only` 等) | [CHROMEOS_VS_UBUNTU_HDMI_NOTES.md](CHROMEOS_VS_UBUNTU_HDMI_NOTES.md) |

View File

@@ -0,0 +1,92 @@
# KaisaSOF HDMI `STREAM_PCM_PARAMS` 观测dynamic_debug + IPC 载荷)
**jack-Kaisa 真机**(非本仓库 PVE/容器)上执行。目的:在 `STREAM_PCM_PARAMS` 失败前后看到 **发往 DSP 的 IPC 载荷**`comp_id``buffer``stream_tag`、格式等),与拓扑/固件预期对照。
## 1. 前置条件
- 内核已加载 SOF`lsmod | grep snd_sof`)。
- `sof_debug`**模块参数**`sound/soc/sof/core.c`),权限 **0444****不能在运行时通过 sysfs 改写**,须在 **`/etc/modprobe.d`** 中设置并在 **下次加载模块前** 生效(推荐 **重启**,或完整卸载 `snd_sof*` 相关模块后按依赖顺序再加载——易踩坑,**优先重启**)。
- **IPC 载荷十六进制** 依赖 `SOF_DBG_DUMP_IPC_MESSAGE_PAYLOAD``sof-priv.h`**BIT(11)**,即 **0x800** 或十进制 **2048**)。载荷通过 `dev_dbg` / `print_hex_dump_debug` 输出,需同时打开 **dynamic_debug**(见下)。
## 2. 固定 `sof_debug`(载荷 dump
创建或编辑(需 root
`/etc/modprobe.d/sof-ipc-payload.conf`
```
# BIT(11): SOF_DBG_DUMP_IPC_MESSAGE_PAYLOAD — 在 IPC 头发送后 dump 载荷(见 sound/soc/sof/sof-priv.h
options snd_sof sof_debug=0x800
```
若需叠加其它标志,用按位或,例如同时打印 IPC 成功路径(可能较吵):
```
# options snd_sof sof_debug=0x800
```
保存后 **重启**,确认:
```bash
cat /sys/module/snd_sof/parameters/sof_debug
# 期望2048 或 0x800
```
## 3. dynamic_debug使 `dev_dbg` 进入 dmesg
挂载 debugfs通常已挂载
```bash
sudo mount -t debugfs none /sys/kernel/debug 2>/dev/null || true
```
对 6.17 源码树中常见路径开启打印(路径以 **当前内核构建** 为准,下列与 Ubuntu HWE 6.17 树一致):
```bash
sudo bash -c 'for f in \
sound/soc/sof/ipc3.c \
sound/soc/sof/ipc3-pcm.c \
sound/soc/sof/intel/hda-pcm.c \
sound/soc/sof/intel/hda-dai.c; do
echo "file $f +p" >> /sys/kernel/debug/dynamic_debug/control
done'
```
若某行报错「Unknown」用下面命令查看本内核实际注册的 `file` 名后替换:
```bash
grep -E "ipc3-pcm|hda-pcm|hda-dai" /sys/kernel/debug/dynamic_debug/control | head -20
```
## 4. 采集流程(失败前后各一段)
1. 清屏旧日志(可选):`sudo dmesg -C`
2. 记录物理口:`aplay -L | grep -iE 'hdmi|hdmi3|pcm'`
3. 对目标设备播放(示例,卡号/设备号按本机改):
`speaker-test -D plughw:0,4 -c 2 -l 1`
或使用 PipeWire/设置界面切到对应 HDMI sink以触发 `hw_params`
4. 立刻保存:
```bash
TS=$(date +%Y%m%d_%H%M%S)
KR=$(uname -r)
sudo dmesg -T > "/tmp/dmesg_sof_TRACE_STREAM_PCM_PARAMS_jack-Kaisa_${KR}_${TS}.txt"
```
5. 将文件复制到本仓库 **`audio_topology/collected/`**(可 scp并在 `../meta/WORK_PROGRESS.md``REANALYSIS_Linux_HDMI_Audio_Kaisa.md` 中加一行文件名索引。
## 5. 日志中应关注的内容
- `STREAM_PCM_PARAMS` / `ipc tx error` / `stream_tag`
- `Message payload:` / `print_hex_dump` 块中的 **`comp_id`**、buffer 物理地址与长度、**`stream_tag`**、rate/channels/format
-`audio_topology/ANALYSIS_Audio.md`**pcm2/3/4 ↔ HDMI1/2/3** 的对应关系是否一致
## 6. 相关脚本
- `scripts/collect-kaisa-sof-trace.sh`:在本机检查 root、挂载 debugfs、写入 dynamic_debug、提示 `modprobe.d` 与采集命令。
## 7. 参考(源码)
- `sound/soc/sof/sof-priv.h``SOF_DBG_DUMP_IPC_MESSAGE_PAYLOAD`BIT 11
- `sound/soc/sof/ipc3.c``sof_ipc_tx_message` 内对载荷的 `sof_ipc3_dump_payload`
- `sound/soc/sof/ipc3-pcm.c``sof_ipc3_pcm_hw_params` 填充 `struct sof_ipc_pcm_params`

View File

@@ -0,0 +1,270 @@
# KaisaChromebox 10 代Linux HDMI 音频:重新分析与修复路径
本文在已有采集与对照结论基础上,**合并真机后续结果**(含:自编 HWE 6.17、历史 HDMI 补丁实验、安装方式与 WiFi 回归等),重新整理「问题是什么、什么已基本排除、下一步该怎么试」。
**仍请以以下为权威细节**
- 三平台对比与 dmesg`audio_topology/ANALYSIS_Audio.md`
- 总修复顺序与文档索引:`audio_topology/REPAIR_Plan_Audio.md`
- ChromeOS 5.15 与 6.17 API 对照:`CHROMEOS_VS_UBUNTU_HDMI_NOTES.md`(本目录)
- ChromeOS 树深度 diff / 新补丁设计入口:`../kernel-build/OPERATION_ChromeOS_Kernel_Deep_Diff.md`
- 自编内核安装(含 signed 冲突、modules-extra / iwlwifi`../kernel-build/OPERATION_Install_CustomKernel_Ubuntu_HWE617.md`
---
## 一、现象Linux 侧)
- 机器:**Google Kaisa**Coreboot 环境;声卡为 **SOF + `sof-rt5682`** 一类拓扑HDMI 走 **iDisp / DisplayPort 音频** 链路。
- **3.5mm**Linux 上通常 **正常**
- **HDMI**Linux 上 **无输出或无法稳定打开 PCM**;历史 dmesg 典型为 **`STREAM_PCM_PARAMS` IPC 失败、约 -5EIO**,常与 **pcm2/3/4HDMI1/2/3** 中某几条相关(物理口与 pcm 编号需实测对照)。
- **对照**:同机 **ChromeOS5.15 内核HDMI 正常****Windows HDMI 正常**。说明硬件与显示器链路整体可用,**问题集中在 Linux 内核/SOF/用户态路由**,而非「线坏了」一类。
---
## 二、已基本排除或证明「单独不够」的方向
| 方向 | 结论 | 依据(仓库内) |
|------|------|----------------|
| **拓扑 tplg** | 与 ChromeOS **等效**(解压后规模一致、端点一致) | `ANALYSIS_Audio.md` 第四节、第五节 |
| **仅换 SOF 固件intel-signed ↔ community** | **不能单独恢复 HDMI**;还可能影响 3.5mm 插拔检测 | `../meta/WORK_PROGRESS.md``../../audio_topology/ANALYSIS_Audio.md` 第五节、`../../audio_topology/OPERATION_Force_Intel_Signed_Firmware.md` |
| **NHLT 缺失** | **不是根因**ChromeOS 也无 NHLT 仍正常) | `ANALYSIS_Audio.md` 第六节 |
| **旧 0002 补丁(`set_idisp_hdmi_link` 里 `SND_SOC_DPCM_TRIGGER_POST`** | **真机验证仍无 HDMI 声**;补丁**已从仓库删除**,不再维护 | 见 `CHROMEOS_VS_UBUNTU_HDMI_NOTES.md``patches/ubuntu-hwe-6.17/DIFF_SUMMARY.txt` |
| **Ubuntu Mainline 5.15(例:`v5.15.201` deb 装在 Noble 上)** | **HDMI 仍无声**;且相对 6.17 **3.5mm 也无声**、**WiFi 也无**(整体音频/无线栈退化) | 真机反馈jack-Kaisa见下文 **「Mainline 5.15 ≠ ChromeOS 5.15」** |
**重要区分****ChromeOS 上正常的「5.15」** 是 **Google 定制内核 + CRAS + 其配置/补丁****Ubuntu Mainline 的 5.15** 是 **Vanilla 主线 + 与 Noble 用户态/固件/模块集合的组合****二者不能等同**。因此在 Mainline 5.15 上「HDMI 仍坏 + 其它输出也坏」**并不能推翻**「发行版 6.x 相对某条 Ubuntu/Chrome 5.15 路径在 HDMI 上存在差异」这类判断,只能说明 **单靠换 Mainline 5.15 deb 不是可行修复手段**
**推论(修订)**HDMI 仍优先从 **6.x 下 SOF / Intel / DPCM / iDisp****Kaisa + Coreboot** 的交互继续查(含上游报 bug、bisect **Ubuntu 或上游 linux.git****不要**把「装了 Mainline 5.15」误认为「复现了 ChromeOS 5.15 行为」。
---
## 三、自定义内核相关:避免「假阴性」
在继续改内核前,建议先确认实验条件可靠(否则会出现「补丁无效」误判):
1. **确已启动自编镜像**`dpkg -l | grep linux-image | grep 6.17.0-19` 应为 **`linux-image-unsigned-...`**,而非仍占位的官方 **`linux-image-6.17.0-19-generic`**(二者互斥,易只装上 modules。见安装文档第 2.1 节。
2. **模块包装全**:至少 **`linux-modules` + `linux-modules-extra`**Intel 无线常见还需 **`linux-modules-iwlwifi-*`**;否则会出现 **WiFi 消失** 等与 HDMI 无关的干扰。见 `../kernel-build/OPERATION_Install_CustomKernel_Ubuntu_HWE617.md`
3. **用户态与物理口**`aplay -L` 列出所有 HDMI 类设备后,对 **每个候选 `plughw:卡,设备`**`speaker-test`;系统设置里默认输出勿锁死在错误 sink。
---
## 四、推荐修复路径(按性价比重排)
下列顺序在 **不推翻已有结论** 的前提下,把精力集中到最可能见效的方向。
### 1. 基线采集(每次改内核/固件前后各做一次)
- `uname -a``/proc/version`
- `aplay -L`(保留 HDMI 相关行)
- `sudo dmesg | grep -iE 'sof|STREAM_PCM|ipc failed|pcm[0-9]|ASoC|iDisp|hdmi'`(尾部 80120 行即可)
- 可选:`alsa-info` 导出一份文本
- 可选(`STREAM_PCM_PARAMS` 深度):按 **`OPERATION_Kaisa_SOF_HDMI_Trace.md`** 开启 **`sof_debug=0x800`** 与 **dynamic_debug**,将带 IPC 载荷的 dmesg 放入 `audio_topology/collected/`(见同目录 **`README_TRACE_KAISA.md`**)。
输出放入 `audio_topology/collected/`,文件名带日期与内核版本,便于 diff。
### 2. 用 **5.15 环境** 做对照时,必须分清「哪一种 5.15」
**已证阴性(真机)**:在 **Ubuntu 24.04** 上安装 **kernel.ubuntu.com Mainline****`v5.15.201` deb** 后,**HDMI 仍无声**,且 **3.5mm、WiFi 也异常**。结论:**不要把 Mainline 5.15 当作日常或「验证 ChromeOS 行为」的手段**;装完若无法使用,请 **GRUB 切回 6.17**(并确保 `linux-modules` + `extra` + `iwlwifi` 装全,见安装文档)。
若仍想做 **「与 6.x 对比的 5.15」**,只剩 **更接近 Ubuntu 完整栈** 的方式才有对照意义(**仍不保证** HDMI 会好,但不会出现「整台机音频+无线全挂」这种明显栈不完整的情况):
- **Ubuntu 22.04.1 / 22.04.2 Live ISO**`old-releases`),启动后 **`uname -r` 确认为 `5.15.0-…-generic`**,再测 HDMI / 3.5mm(见 `ANALYSIS_Audio.md` 第六节)。
- **与 ChromeOS 对齐**:只能以 **ChromiumOS 内核树 / 真机 ChromeOS** 为参照,而不是 Mainline tarball 内核。
**若 Ubuntu 5.15 Live 下 HDMI 仍失败**:说明问题**不一定**是「6.x 独有」,可能是 **Coreboot 下通用 Linux + 某类 SOF 拓扑****CRAS/Chrome 栈** 的差异,更适合走 **上游 issue + dmesg/alsa-info**,而不是继续换 Mainline 版本号。
### 3. 内核级深度对照(开发者路径)
在确认要攻 6.x 的前提下:
- **对照树**`chromiumos_kernel/v5.15/...``kernel-src/linux-hwe-6.17-6.17.0/...`
- **优先目录**`sound/soc/sof/``sound/soc/intel/boards/``sound/soc/intel/common/`、与 **HDMI HDA/iDisp** 相关的 machine 选择与 **DPCM** 配置。
- **方法**:从 `STREAM_PCM_PARAMS` / `hw_params` 调用栈出发,在 6.17 上加 `dynamic_debug` 或局部 `pr_debug`,对照 5.15 上同类路径;必要时 **git bisect** 主线内核。
### 4. 上游协同(与 3 并行)
**SOF / ALSA** 社区提交最小复现包:
- 机型:**Google Kaisa**、Coreboot、Ubuntu 版本、**内核精确版本**
- **完整 dmesg**、**alsa-info**
- 说明:**ChromeOS 5.15 同硬件 HDMI 正常**、Linux 6.x `STREAM_PCM_PARAMS -5`
- 入口:[thesofproject/sof](https://github.com/thesofproject/sof)、alsa-devel
### 5. 仍可调参但预期有限的项
- **SOF / 模块参数**`snd_sof`/`snd_sof_intel_hda` 等 debug、probe 顺序):多用于佐证,不一定能「一键修好」。
- **PipeWire / PulseAudio 配置**:在 IPC -5 已出现在 dmesg 时,**通常不是根因**,但应用层默认 sink 选错会造成「以为完全没声」。
---
## 五、结论摘要(给决策用)
```mermaid
flowchart LR
unshallow[git_unshallow]
log[git_log_sound]
diff3[diff_ipc3_pcm_hda_dai]
hypothesis[minimal_hypothesis]
newpatch[new_patch]
smoke[make_objects]
deb[binary_generic]
unshallow --> log --> diff3 --> hypothesis --> newpatch --> smoke --> deb
```
- **HDMI 问题性质**:更可能是 **Linux尤其 6.x 发行版栈)里 SOF/Intel/iDisp 路径与 Kaisa + Coreboot 的组合问题**;拓扑与「只换一份 SOF 固件」已反复证明**不够**。
- **旧 0001/0002**:已自仓库移除;**新补丁**按 [`../kernel-build/OPERATION_ChromeOS_Kernel_Deep_Diff.md`](../kernel-build/OPERATION_ChromeOS_Kernel_Deep_Diff.md) 流程重做。
- **Mainline 5.15 deb**:在 Kaisa 上 **阴性且引入 3.5mm/WiFi 回归****不推荐**继续折腾 Mainline 5.15。**若已安装**:用 GRUB **回到 6.17**,日常以 **完整 HWE 模块包** 为准。
- **仍值得做的对照**(可选、工作量更大):**Ubuntu 22.04 早期 Live 的 5.15.0-xx-generic**(非 Mainline或直接把材料交给 **SOF/ALSA 上游****bisect** 建议在 **linux.git 或 Ubuntu 同源** 上进行,而非混用 Noble + Mainline 老内核。
- **自编 6.17**:务必 **unsigned若用+ modules + extra+ iwlwifi** 装全,并保留可启动旧内核。
---
## 六、文档维护建议
若你完成 **5.15 Live****上游 issue** 链接,可把结果摘要回写到 `../../audio_topology/ANALYSIS_Audio.md`(新增一小节)与 `../meta/WORK_PROGRESS.md` 状态表,避免后人重复踩旧实验补丁/仅装两 deb/unsigned 冲突等坑。
---
<a id="appendix-ubuntu-515"></a>
## 附录:找不到「带 5.15 的 Ubuntu」时怎么办
很多人只在 **`https://releases.ubuntu.com/22.04/`** 下 ISO那里永远是**当前 point release**(例如 22.04.5**往往已是 HWE 6.x**Live 起来 `uname -r` 不是 5.15这是正常现象不是「Ubuntu 没有 5.15」。
### A. 旧版 Ubuntu 22.04 ISO推荐做 Live 验证)
**old-releases****22.04.1 / 22.04.2** 的 desktop amd64发布时主线内核多为 **5.15**;仍请以启动后 `uname -r` 为准):
- 22.04.1 目录:<https://old-releases.ubuntu.com/releases/22.04.1/>
- 22.04.2 目录:<https://old-releases.ubuntu.com/releases/22.04.2/>
- 上一级索引:<https://old-releases.ubuntu.com/releases/22.04/>
文件名通常为 **`ubuntu-22.04.1-desktop-amd64.iso`** 或 **`ubuntu-22.04.2-desktop-amd64.iso`**。下载后写入 U 盘,**Try Ubuntu**,进系统先执行:
```bash
uname -r
```
**只有**显示 `5.15.0-…-generic` 才说明本次 Live 符合「5.15 验证」前提;若是 `5.19` / `6.x`,换更旧的 point release ISO 或改用下文 B/C。
### B. 在已安装的 Ubuntu 上装 **Mainline 5.15**(不必找老 ISO
> **真机结论Kaisa / Noble**Mainline **`v5.15.201`** 已验证 **HDMI 仍无声**,且 **3.5mm、WiFi 也异常**(相对 6.17 HWE 全量模块栈明显退化)。**不建议**在主力机上长期停留于 Mainline 5.15;下列步骤仅作「如何安装」记录,**决策上请优先 GRUB 回退 6.17**。
Ubuntu 提供的 **Mainline** 构建Vanilla 主线内核 deb**不是**完整 Ubuntu 补丁集,**也不等于** ChromeOS 5.15;与 **Ubuntu 22.04 自带的 5.15.0-xx-generic** 也不是同一套配置/模块切分):
- 目录索引:<https://kernel.ubuntu.com/~kernel-ppa/mainline/>
- 在页面中进入 **`v5.15.x/`**(选**最新**的 5.15 末版即可,例如 **`v5.15.201/`**,以你打开页面时为准)。
- 浏览器里列出的 deb 一般在 **`…/v5.15.201/amd64/`**(若目录结构不同,以该版本页实际链接为准)。
**`v5.15.201` 目录内典型 4 个 deb与你看到的文件列表一致**
| 文件 | 作用 |
|------|------|
| `linux-headers-5.15.201-0515201_5.15.201-0515201.*_all.deb` | 头文件(**all** |
| `linux-headers-5.15.201-0515201-generic_5.15.201-0515201.*_amd64.deb` | 头文件generic |
| `linux-image-unsigned-5.15.201-0515201-generic_5.15.201-0515201.*_amd64.deb` | **内核镜像(未签名)** |
| `linux-modules-5.15.201-0515201-generic_5.15.201-0515201.*_amd64.deb` | **内核模块** |
**最少**`linux-image-unsigned-*-generic_*_amd64.deb` + `linux-modules-*-generic_*_amd64.deb`。**建议 4 个全下**,再一次性安装,避免头文件依赖提示、并方便 DKMS。
**保留当前可启动内核**GRUB 里能进 6.17 等)的前提下:
```bash
cd ~/下载/mainline-5.15.201 # deb 所在目录,自行改名
sudo dpkg -i \
linux-headers-5.15.201-0515201_*.deb \
linux-headers-5.15.201-0515201-generic_*.deb \
linux-image-unsigned-5.15.201-0515201-generic_*.deb \
linux-modules-5.15.201-0515201-generic_*.deb
sudo apt-get install -f
sudo update-grub
sudo reboot
```
重启 → **Advanced options for Ubuntu** → 选 **`5.15.201-0515201-generic`**(以 GRUB 显示为准),然后:
```bash
uname -r
# 期望含 5.15.201-0515201-generic
```
**说明**
- Mainline **通常没有** Ubuntu HWE 那种 `linux-modules-extra` / `linux-modules-iwlwifi` 分包;多数驱动在 **`linux-modules-…` 一体包**里。
- **`linux-image-unsigned`**:开启 **Secure Boot** 时可能无法启动,需关闭或参考 `../kernel-build/OPERATION_Install_CustomKernel_Ubuntu_HWE617.md`
- 务必留好旧内核,以便 GRUB 切回 6.x。
### C. 其它带 5.15 的 Live备选
例如 **Linux Mint 21.x**(基于 22.04,早期版本默认 **5.15** 内核)的 Cinnamon ISO启动后同样先 **`uname -r` 确认** 再测 HDMI。
### D. 验证成功的判据
- **目标**:在 **确认 5.15** 的前提下,`speaker-test` 或系统声音能在 **HDMI sink** 上出声,且 dmesg 中 **不再出现**(或明显减少)`STREAM_PCM_PARAMS` / `ipc failed` 一类错误。
-**`uname -a``aplay -L`、dmesg 片段** 存进 `audio_topology/collected/` 便于与 6.17 对比。
---
## 七、当前在 **6.17.0-20-generic** 上的建议 + 如何查 **ChromeOS 定制补丁**
### 7.1 对「jack-Kaisa @ 6.17.0-20」的优先级建议
- **这是合理的主力内核**:官方 **signed** HWE模块栈与 Noble 用户态匹配,比自编 unsigned / Mainline 5.15 **更适合日常与排障**
- **先固定一条基线**:在本内核上再采一份 `dmesg`SOF/HDMI 段)、`aplay -L``alsa-info`,命名带 `6.17.0-20`,放进 `audio_topology/collected/`,与旧版 6.17.0-14/19 对比是否 **IPC 行号/PCM 编号** 有变化。
- **并行两条线**(不必等 ChromeOS diff 做完才报上游):
1. **上游**:用 **6.17.0-20** + Kaisa + Coreboot +「ChromeOS 同机 HDMI 正常」打 **SOF/ALSA** issue 或邮件列表(材料见第四节)。
2. **内核 diff**:在本地对 **ChromiumOS 5.15 树****有范围的 git 历史 / 文件 diff**(见 7.2),找 **与 SOF / Intel / HDMI / CML / rt5682** 相关的提交,再判断能否 **移植到 6.17** 或交给上游。
### 7.2 查看 ChromeOS **内核**里与音频相关的定制(推荐流程)
ChromeOS 内核通常是 **v5.15 + 大量提交**;不要指望「一个补丁文件」解决问题,应 **缩小目录 + 看提交说明**
1. **拿到树**(见 `../meta/WORK_PROGRESS.md` 第二节),例如本仓库 `chromiumos_kernel/v5.15/`,分支如 `release-R144-16503.B-chromeos-5.15`
2. **操作清单与三文件 diff 导出**[`../kernel-build/OPERATION_ChromeOS_Kernel_Deep_Diff.md`](../kernel-build/OPERATION_ChromeOS_Kernel_Deep_Diff.md)`git fetch --unshallow``git log``diff` / `export-chromeos-ubuntu-sound-file-diffs.sh`)。
3. **自动对照摘要**(本机可跑):[`../meta/CHROMEOS_vs_UBUNTU617_SOUND_AUTODIFF.md`](../meta/CHROMEOS_vs_UBUNTU617_SOUND_AUTODIFF.md)。随时重跑:
```bash
./scripts/diff-chromeos-ubuntu-sound.sh
```
4. **只看音频相关路径上的提交**(需 **非浅克隆** 的 ChromeOS 树,见 OPERATION / AUTODIFF 文档):
```bash
cd chromiumos_kernel/v5.15
git log --oneline -50 -- sound/soc/sof sound/soc/intel include/sound
git log --oneline -30 -- drivers/soundwire
```
若提交太多,可加关键字过滤(效果因提交说明写法而异):
```bash
git log --oneline --grep=sof -- sound/soc/
git log --oneline --grep=hdmi -i -- sound/
```
5. **与 Ubuntu 6.17 做「同文件 diff」**(你们已对 `sof_board_helpers.c` 做过;应扩展到 **整段 SOF Intel 链路**)。示例(把路径换成你本机仓库根下的实际位置):
```bash
diff -u \
chromiumos_kernel/v5.15/sound/soc/sof/intel/some_file.c \
kernel-src/linux-hwe-6.17-6.17.0/sound/soc/sof/intel/some_file.c
```
常用对照目录(两棵树各扫一遍):
- `sound/soc/sof/`(含 `intel/`、`ipc/`
- `sound/soc/intel/boards/`machine、`sof_rt5682`、helpers
- `sound/soc/intel/common/`(如有)
- 与 **HDA/display** 绑定的 `sound/soc/intel/hda/` 或相关 HDMI 绑定代码
6. **若有上游 5.15 tag**:可尝试找 ChromeOS 分支与 **linux v5.15.x** 的基线,再列「仅 ChromeOS 多出来的提交」(不同团队合并策略不同,**不一定**有干净 merge-base若 `git merge-base` 不合理,就以 **按路径 `git log`** 为主)。
7. **别忽略用户态**ChromeOS 上播放经 **CRAS**,可能有 **重试 / 设备选择 / 延迟打开** 等与 PipeWire 不同;**内核 diff 找不到差异时**,仍可能出现「同内核逻辑在 CRAS 下正常、在 PW 下触发竞态」。这更支持 **上游 + 双栈对比日志**,而不是无限改 tplg。
### 7.3 预期与边界
- **看到 Chrome 的补丁 ≠ 能直接 cherry-pick 到 6.17**API如 `playback_only` / `trigger[]`)已变,需 **移植或重写**。
- **最有价值**:找到 **与 `STREAM_PCM_PARAMS` / `hw_params` / iDisp BE** 直接相关的提交或函数级差异,再在 6.17 上 **最小复现 + dynamic_debug** 验证。
若你在 `git log` 里筛出少量可疑 commit hash可贴出 **hash + 标题**,便于判断下一步是 **port** 还是 **交给上游**

View File

@@ -0,0 +1,30 @@
# KaisaSOF 固件与拓扑一致性核对(排除 comp_id / 拓扑不匹配)
目的:在出现 `STREAM_PCM_PARAMS` **-EIO (-5)** 时,确认 **本机加载的固件与 tplg** 与项目基线一致,避免「内核与拓扑/固件版本错配」类问题。
基线分析见 **`audio_topology/ANALYSIS_Audio.md`**(第四节、第五节)。
## 在 Kaisa 上采集
```bash
uname -r
ls -la /lib/firmware/intel/sof/sof-cml.ri* /lib/firmware/intel/sof/community/sof-cml.ri* 2>/dev/null
ls -la /lib/firmware/intel/sof-tplg/sof-cml-rt5682.tplg* 2>/dev/null
sudo dmesg | grep -iE 'sof|Firmware|tplg|topology' | tail -80
sha256sum /lib/firmware/intel/sof/community/sof-cml.ri.zst 2>/dev/null
sha256sum /lib/firmware/intel/sof-tplg/sof-cml-rt5682.tplg.zst 2>/dev/null
```
## 核对项
| 项 | 项目基线(摘要) | 说明 |
|----|------------------|------|
| 拓扑文件 | `sof-cml-rt5682.tplg`Chrome 解压约 35KBLinux 常为 `.tplg.zst` | 解压后规模与端点应与 ChromeOS 采集一致 |
| 固件 | CML 平台常见 `sof-cml.ri`Chrome 倾向 **intel-signed**Ubuntu 常选 **community** | 已实验证明 **仅换 signed/community 不能单独恢复 HDMI**;仍应记录本机实际路径 |
| dmesg | 无「topology load failed」或明显 ABI 不匹配 | 若有加载错误,优先修复路径/文件再谈 IPC -5 |
| 与 IPC 观测结合 | `OPERATION_Kaisa_SOF_HDMI_Trace.md` | 载荷中 **comp_id** 须与 tplg 中对应 PCM 节点一致;若一致仍 -5偏向 **固件策略或 DSP bug** |
## 结论引用(已有)
- 拓扑 **等效**、仅换固件 **非主因**:见 `../../audio_topology/ANALYSIS_Audio.md` 第四节、第五节及 `REANALYSIS_Linux_HDMI_Audio_Kaisa.md`
- 本清单用于 **回归与上游报障时的环境快照**,不替代内核/驱动根因分析。

View File

@@ -0,0 +1,54 @@
# 上游复现包Google Kaisa + Linux `STREAM_PCM_PARAMS -5`HDMI
**`patches/ubuntu-hwe-6.17/STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md`** 对照结论下,当前 **无单一、已证实的内核 hunk** 可安全作为 **0002** 提交;优先把下列材料交给 **thesofproject/sof****alsa-devel**
## 1. 硬件与引导
- 机型:**Google Kaisa**Chromebox 10 代Coreboot。
- 对照:**同机 ChromeOS HDMI 正常****Windows HDMI 正常**(见仓库 `audio_topology/``REANALYSIS_Linux_HDMI_Audio_Kaisa.md`)。
## 2. 软件版本(请填真机实测)
- 发行版Ubuntu 24.04(或实际版本)
- 内核:`uname -r`(例:`6.17.0-19-generic`
- 自编内核:若使用 `linux-image-unsigned-*`,附 `dpkg -l | grep linux-image` 片段
## 3. 必附日志
- **完整 `dmesg`**(自开机后或自 `dmesg -C` 后复现一次):至少包含
`STREAM_PCM_PARAMS` / `ipc tx error` / `pcm4 (HDMI3)` / `stream_tag` 等行。
仓库已有示例:
`audio_topology/collected/dmesg_sof_STREAM_PCM_PARAMS_HDMI3_jack-Kaisa_6.17.0-19-generic_20260404.txt`
- **`alsa-info` 导出**(或 `aplay -L``/proc/asound` 相关片段)。
- **可选(强烈建议)**:按 **`OPERATION_Kaisa_SOF_HDMI_Trace.md`** 采集带 **IPC 载荷十六进制** 的 dmesg放入 `audio_topology/collected/` 并附文件名。
## 4. 固件与拓扑快照
**`SOF_FIRMWARE_TOPO_Kaisa_CHECKLIST.md`** 附:`dmesg` 中固件/tplg 路径、`sha256sum` 结果。
## 5. 已尝试且不足以单独修复的方向(避免重复提问)
- 仅替换 intel-signed / community SOF 固件:**HDMI 仍失败**(见 `ANALYSIS_Audio.md`)。
- 与 Chrome 拓扑 **等效**(解压规模一致):见同一文档。
- **`ipc3-pcm.c` 0001 类补丁**FREE/trigger 回复路径):**不改变** `STREAM_PCM_PARAMS` 发送逻辑(见 `patches/ubuntu-hwe-6.17/DIFF_SUMMARY.txt``STREAM_PCM_PARAMS_CHROME_UBUNTU_NOTES.md`)。
## 6. 邮件/ Issue 正文模板(可复制)
```
Subject: [SOF/IPC3] Google Kaisa: STREAM_PCM_PARAMS returns -EIO on HDMI (pcm4/iDisp)
Hardware: Google Kaisa (Chromebox), Coreboot. Same machine: ChromeOS HDMI OK.
Kernel: <uname -r> (Ubuntu ...)
Problem: On HDMI playback, SOF IPC3 fails at STREAM_PCM_PARAMS:
sof_ipc3_pcm_hw_params: pcm4 (HDMI3), ... ipc tx error for 0x60010000
Attached: dmesg, alsa-info, firmware/tplg paths and sha256.
Already ruled out: topology equivalence vs ChromeOS; swapping intel-signed vs community FW alone;
ipc3 FREE/trigger reply-path patches do not affect PARAMS.
Request: guidance whether firmware-side rejection vs kernel platform_params (stream_tag/comp_id)
— IPC payload capture with sof_debug=0x800 available on request.
```