archlinux机械革命15x音频修复2

之前的解决方案:

目前解决方案

经过3个月左右测试,机械革命15X的音频问题,目前采用的是:

  1. 延迟加载驱动
  2. HDA驱动参数
  3. 禁用SOF驱动
  4. WirePlumber配置

方案变化

问题定位

15X的音频问题主要源于:

  • 冷启动初始化不稳定:Conexant SN6140 codec探测超时
  • 引脚配置:BIOS没适配引脚
  • 电源管理冲突:DMA位置报告错误,输出垃圾数据导致扬声器爆鸣

解决思路

通过延迟驱动加载绕过 BIOS 初始化的不稳定期


完整配置

1. HDA 驱动参数

文件路径/etc/modprobe.d/alsa-hda.conf

1
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

1
2
3
4
5
6
7
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

1
blacklist snd_hda_intel

作用:阻止 initramfs 阶段自动加载 snd_hda_intel,为延迟加载腾出空间。

步骤 2:创建 systemd 延迟加载服务

文件路径/etc/systemd/system/audio-delayed-load.service

1
2
3
4
5
6
7
8
9
10
11
12
13
[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

原理

1
系统启动 → BIOS 初始化(不稳定) → 等待 5 秒 → 硬件状态稳定 → 加载音频驱动
步骤 3:启用服务并重建 initramfs
1
2
3
4
5
6
7
8
# 启用服务
sudo systemctl enable audio-delayed-load.service

# 重建
sudo mkinitcpio -P

# 重启系统
sudo reboot

4. WirePlumber 配置(可选,防止暂停导致爆音)

文件路径~/.config/wireplumber/wireplumber.conf.d/disable-suspension.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
}
}
}
]

应用配置

1
systemctl --user restart wireplumber pipewire pipewire-pulse

验证:使用 pw-top 观察,停止播放后节点应保持 Idle (I) 状态,而非 Suspended (S)


验证配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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


archlinux机械革命15x音频修复2
https://inkcodes.com/2026/03/14/archlinux机械革命15x音频修复2/
作者
Specialhua
发布于
2026年3月14日
许可协议