本帖最后由 Redstone_NOOB 于 2026-9-13 10:48 编辑
[xmd]# ThinkPad T14 Gen2 + Debian 13 冷启动无声音问题排查
### 概述
**设备**:ThinkPad T14 Gen2 (Intel),机型类型 20W1S3GJ00
**系统**:Debian 13 (Trixie),内核 6.12.x+deb13-amd64
**问题**:冷启动后音频输出异常,热重启后恢复正常
### 问题描述
在将 Linux 内核更新至 6.12.100+deb13-amd64 后,发现无法播放声音。Gnome系统设置中显示 Dummy Output,test发现无任何声音。通过控制变量法测试,发现了以下规律:
| 操作 | 结果 |
| -------------- | -------------- |
| 冷启动(关机->按电源键开机) | Dummy output |
| 热启动(restart) | 声音恢复正常 |
| 回退到内核版本.96 | 同样失败 |
### 一、内核日志分析
冷启动失败后,dmesg出现了如下日志:
```
[ 12.298858] sof-audio-pci-intel-tgl 0000:00:1f.3: ipc tx error for 0x60010000 (msg/reply size: 108/20): -22
[ 12.298876] sof-audio-pci-intel-tgl 0000:00:1f.3: HW params ipc failed for stream 2
[ 12.298879] sof-audio-pci-intel-tgl 0000:00:1f.3: ASoC: error at snd_soc_pcm_component_hw_params on 0000:00:1f.3: -22
```
解读:
- 0x60010000 是 SOF IPC 命令 SOF_IPC_GLB_STREAM_MSG + SOF_IPC_STREAM_PCM_PARAMS,即内核向音频 DSP 发送"配置 PCM 流参数"的命令
- -22 = -EINVAL(无效参数),DSP 固件拒绝了内核发送的参数
- 这个问题在内核版本 .96 和 .100 上都出现,说明不完全是内核版本的回归
### 二、排除AppArmor和firejail
之前曾收紧了 AppArmor 权限(将部分软件由 Complain 改为 Enforce)并开启了 firejail。排查后排除这两个因素——它们是用户空间的安全策略工具,不影响内核驱动初始化 DSP 硬件。SOF 驱动初始化发生在内核启动早期(日志第 10-12 秒),此时 AppArmor/firejail 尚未介入音频相关流程。
### 三、尝试回退到hda驱动
通过内核参数 snd-intel-dspcfg.dsp_driver=1 可以强制使用 legacy HDA 驱动,绕过 SOF/DSP 路径。这个方案的代价是失去内置数字麦克风(DMIC)支持,因为 DMIC 只能通过 SOF 驱动访问。对于使用外接声卡进行音乐制作的场景,这不失为一个可行的临时方案。
### 四、内核升级到.101的变化
因为这个问题拖得太长时间了所以.101版本发布了,我更新完了之后试了一下有没有修复这个问题,发现冷启动表现发生了变化:
| | .100 冷启动 | .101 冷启动 |
| --- | --- |
| ALSA设备 | 不创建 | 全部创建(aplay/arecord都能看到) |
| Gnome设置 | Dummy Output | 能看到Speaker和Mic,能调音量 |
| 实际播放 | 没声音 | 没声音 |
| dmesg错误 | ipc tx error -22 | 无错误 |
.101 内核的 SOF 驱动在初始化阶段成功了(设备注册、codec 配置、拓扑加载都完成了),但运行时打开音频流时 DSP 实际不处理数据。speaker-test 显示 ALSA 层认为播放成功,但没有任何声音输出。
### 五、SOF 固件版本排查
日志中显示固件与内核 ABI 版本不匹配:
```
Firmware: ABI 3:22:1 Kernel ABI 3:23:1
unknown sof_ext_man header type 3 size 0x30
```
尝试从 SOF 项目 GitHub 下载最新固件(v2.14.3)并安装。安装后冷启动反而更严重了——连设备都不显示了。
排查发现:install.sh 脚本改变了 /lib/firmware/intel/sof/ 的目录结构和文件权限,且 update-initramfs 打包了混乱的固件结构。恢复原始 Debian 包 firmware-sof-signed 后设备恢复到之前的状态。
更关键的发现是:对于 Tiger Lake IPC3 平台,v2.14.3 中的 `sof-tgl.ri` 固件版本仍然是` 2 : 2 : 0-57864`(ABI 3:22:1)。SOF 项目的 v2.14.x 只更新了 IPC4 平台(Meteor Lake 及更新)的固件,IPC3 平台的固件已经不再更新。ABI 3 : 22 : 1 就是 Tiger Lake IPC3 的最终版本,内核 3 : 23 : 1 应该向后兼容它。因此排除了固件版本不匹配为根因。
### 六、ACPI BIOS 固件缺陷
在 `dmesg` 中发现了持续重复的 ACPI 错误:
```
ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PC00.RP09.PEGP.DDNT], AE_NOT_FOUND
ACPI Error: Aborting method \_SB.PC00.LPCB.EC.SEN4._TMP due to previous error (AE_NOT_FOUND)
```
解读这个 ACPI 路径:
- \_SB.PC00.RP09.PEGP = PCIe Root Port 9 下的独立显卡设备(PEGP)
- DDNT = ACPI 方法名,在 BIOS 的 ACPI 表中不存在
- \_SB.PC00.LPCB.EC.SEN4._TMP = 4 号温度传感器的当前温度读取方法
- _TMP 方法内部尝试调用 PEGP.DDNT,但该方法不存在,导致温度读取失败
这是一个 BIOS ACPI 表的编写缺陷:该机型没有独立显卡(只有 Intel 核显),但 BIOS 中关于 PEGP 设备的 ACPI 定义不完整——定义了引用关系但没有定义被引用的方法。
最终 thermal_zone5 因为持续无法读取温度而被禁用:
```
thermal thermal_zone5: Unable to get temperature, disabling!
thermal thermal_zone5: Disabled thermal zone with critical trip point
```
这个 ACPI 错误本身不直接导致音频故障,但它证实了 BIOS 固件质量存在系统性问题。音频控制器从 D3cold(完全断电)通过 ACPI 方法上电到 D0 的过程中,如果 ACPI 电源管理方法(_PS0、_PS3 等)类似地存在缺陷,就会导致 DSP 初始化异常。
### 七、尝试更新BIOS
通过 `fwupdmgr` 检查 BIOS 更新,结果显示 “no updates available”。Lenovo 官网也未提供更新的 BIOS 版本。这条修复路径被堵死。
关键证据链:
1. 冷启动必失败、热重启必成功 → 硬件电源状态差异是触发因素
2. ACPI 表存在明确的 BIOS 编写缺陷(PEGP.DDNT 缺失)→ 固件质量问题
3. SOF 固件已是最终版本,无法通过更新修复 → 问题不在固件一侧
4. .96、.100、.101 三个内核版本都出现(表现不同但都失败)→ 问题不完全在内核一侧
5. fwupdmgr 无 BIOS 更新 → 根因无法从固件侧修复
这是一个需要 BIOS 厂商(Lenovo)在固件层面修复的问题,用户侧只能通过 workaround 绕过。
### Workaround
#### 回退到传统 HDA 驱动(简单但损失 DMIC)
在 GRUB 内核参数中添加 `snd-intel-dspcfg.dsp_driver=1`,强制使用 legacy HDA 驱动:
```shell
# 编辑 GRUB 配置
sudo vim /etc/default/grub
# 在 GRUB_CMDLINE_LINUX_DEFAULT 中添加:
# snd-intel-dspcfg.dsp_driver=1
sudo update-grub
sudo reboot
```
效果:扬声器/耳机播放正常,3.5mm 麦克风可用,HDMI 音频可用。代价:失去内置数字麦克风(DMIC)。
### 环境信息:
```
设备: ThinkPad T14 Gen2 (Intel), 20W1S3GJ00
CPU: 11代 Intel Core (Tiger Lake)
Audio: Intel cAVS (sof-audio-pci-intel-tgl), Realtek ALC257
OS: Debian 13 Trixie
Kernel: 6.12.100+deb13-amd64 / 6.12.101+deb13-amd64
SOF Firmware: 2 : 2 : 0-57864 (ABI 3 : 22 : 1) — IPC3 终版
SOF Topology: sof-hda-generic-2ch.tplg (ABI 3 : 22 : 1)
```
### 参考资料
[SOF项目](https://github.com/thesofproject/sof)
[SOF二进制下载](https://github.com/thesofproject/sof-bin/releases)
[Linux内核HD-Audio文档](https://www.kernel.org/doc/html/latest/sound/hd-audio/notes.html)
>ps.本文完成于2026年8月21日,在9月13日经修改发布,本人高中生,第一次使用Linux系统,无太多经验,本文大部分策略和代码都是由GLM 5.2完成的,写写各位大佬看到这里BTW :)
更新:即使是回退到Legacy hda还是有时会在冷启动以及待机醒来之后出现故障,在Kernel版本更新到6.12.107+deb13-amd64后不用hda也有概率可以使用,就是还是不稳定,不清楚AI分析的对不对
来自圈子: 少年红客 |