之前的解决方案:
目前解决方案
经过3个月左右测试,机械革命15X的音频问题,目前采用的是:
- 延迟加载驱动
- HDA驱动参数
- 禁用SOF驱动
- WirePlumber配置
方案变化
问题定位
15X的音频问题主要源于:
- 冷启动初始化不稳定:Conexant SN6140 codec探测超时
- 引脚配置:BIOS没适配引脚
- 电源管理冲突:DMA位置报告错误,输出垃圾数据导致扬声器爆鸣
解决思路
通过延迟驱动加载绕过 BIOS 初始化的不稳定期
完整配置
1. HDA 驱动参数
文件路径:/etc/modprobe.d/alsa-hda.conf
CONF
options snd_hda_intel single_cmd=1 power_save=0 power_save_controller=N model=,laptop-amic probe_mask=1 position_fix=1
说明:
single_cmd=1:使用单命令模式power_save=0:禁用 codec 空闲省电,保持始终工作状态power_save_controller=N:禁止 HDA 控制器进入节能状态model=,laptop-amic:第一个逗号跳过 HDMI codec,第二个参数为 SN6140 指定笔记本模拟麦克风配置probe_mask=1:只探测第一个 codec,避免 HDMI 与内置声卡竞争position_fix=1:使用 LPIB 寄存器读取 DMA 位置,缓解爆音问题
2. 禁用SOF驱动
文件路径:/etc/modprobe.d/blacklist-sof.conf
CONF
blacklist snd_sof_pci
blacklist snd_sof_amd_acp
blacklist snd_sof_amd_renoir
blacklist snd_sof_amd_rembrandt
blacklist snd_sof_amd_vangogh
blacklist snd_sof_amd_acp63
blacklist snd_sof_amd_acp70
说明:SOF (Sound Open Firmware) 驱动对 Conexant SN6140 支持不完善,强制使用传统 HDA 驱动。
3. 延迟加载 HDA 驱动
这是解决冷启动 "no codecs found" 问题的。
步骤 1:黑名单早期加载
文件路径:/etc/modprobe.d/blacklist-hda-early.conf
CONF
blacklist snd_hda_intel
作用:阻止 initramfs 阶段自动加载 sndhdaintel,为延迟加载腾出空间。
步骤 2:创建 systemd 延迟加载服务
文件路径:/etc/systemd/system/audio-delayed-load.service
INI
[Unit]
Description=Delayed HDA audio driver loading
After=multi-user.target
Before=sound.target
[Service]
Type=oneshot
ExecStartPre=/bin/sleep 5
ExecStart=/usr/bin/modprobe snd_hda_intel
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
原理:
系统启动 → BIOS 初始化(不稳定) → 等待 5 秒 → 硬件状态稳定 → 加载音频驱动
步骤 3:启用服务并重建 initramfs
BASH
# 启用服务
sudo systemctl enable audio-delayed-load.service
# 重建
sudo mkinitcpio -P
# 重启系统
sudo reboot
4. WirePlumber 配置(可选,防止暂停导致爆音)
文件路径:~/.config/wireplumber/wireplumber.conf.d/disable-suspension.conf
CONF
monitor.alsa.rules = [
{
matches = [
{
# Matches all sources
node.name = "~alsa_input.*"
},
{
# Matches all sinks
node.name = "~alsa_output.*"
}
]
actions = {
update-props = {
session.suspend-timeout-seconds = 0
}
}
}
]
应用配置:
BASH
systemctl --user restart wireplumber pipewire pipewire-pulse
验证:使用 pw-top 观察,停止播放后节点应保持 Idle (I) 状态,而非 Suspended (S)。
验证配置
BASH
# 1. 检查延迟加载
systemctl status audio-delayed-load.service
# 2. 验证 model 参数
cat /sys/module/snd_hda_intel/parameters/model
# 应输出:laptop-amic,(null),(null),...
# 3. 检查音频设备
aplay -l
# 应能看到 SN6140 Analog
# 4. 查看 codec 信息
cat /proc/asound/card*/codec* | grep "Codec:"
# 应输出:
# Codec: ATI R6xx HDMI
# Codec: Conexant SN6140
# 5. 查看内核日志(不应有 "no codecs found" 错误)
sudo dmesg | grep -i "hda\|codec" | grep -i "error\|fail"
最近内核更新的情况
Linux 6.19.6-zen1(2026年3月),内核包含了以下针对Conexant SN6140的修复:
- 耳机自动检测修复(OMTP/CTIA 识别)
- 轮询模式检测改进
但没有针对WUJIE15XA冷启动初始化修复 所以目前就这样先用着,近几个月没有出过问题,目前看延迟加载还是有用的,如果有其他的问题继续更新~
最后更新:2026-03-14 环境:Arch Linux, Kernel 6.19.6-zen1-1, MECHREVO WUJIE15XA