机械革命 15x 的 linux 音频爆音 codec检测不到修复——model参数
本文最后更新于 2025年9月14日 下午
笔记本机器型号是机械革命 15X(还得是鸡哥 = =),环境 Archlinux。15X的ALSA 枚举到两块编解码器(codec
):一块 HDMI(ATI R6xx HDMI
),一块内置声卡 Conexant SN6140。
fastfetch信息如下
症状
音频出现问题的症状是系统运行一段时间后出现爆音、破音 、噼啪声,严重时这种杂音会非常大,大到多看一眼就要爆炸的地步。 且偶发开机没有内置扬声器输出,只有三个hdmi输出的情况,此时直接reboot大概率还是“掉声卡”,只有冷重启,即长按电源数十秒后再开机可能内置扬声器输出又回来了。没有内置扬声器输总是伴随dmesg日志里有snd_hda_intel 0000:64:00.6: no codecs found!记录(64:00.6是我的设备名,即主要问题是找不到编解码器)。
- 这个问题困扰了我很久,包括但不限于的尝试如下:
- amd-ucode 微码更新
- linux内核的更新,包括zen和lts(6.13+开始)
- 安装/更新sof-firmware
- snd_hda_intel.single_cmd=1:强制控制器以单命令模式工作
- snd_hda_intel.enable_msi=0:禁用 MSI 中断
- bios更新至官网目前的最新2025-01
- bios电源切换为性能模式
- snd_hda_intel.dmic_detect=0 禁用数字麦克风驱动路径
一些基础信息
开机识别不到编解码器:
1 |
|
1 |
|
cat /proc/asound/card*/codec*
能明确看到:Codec: ATI R6xx HDMI
(外接 HDMI 音频)Codec: Conexant SN6140
(内置 HDA 音频)
sudo dmesg | grep -i "hda.*model\|snd.*model\|codec.*model"
无输出cat /sys/class/sound/card*/id
输出Generic / Generic_1
问题定位:爆音原因
机革15x目前音频还是由HDA(High Definition Audio)驱动,即便安装了sof-firmware,sof也不会接管声卡(猜测机子算比较新的amd?)
但HDA在初始化时,需要根据引脚默认值(pin default)、机型特性和硬件连线,完成通路路由(Mixer/Widget 连接)、功放与 EAPD、插拔/耳麦检测等设置。若实际机器与通用策略(generic path)存在偏差,常见后果包括:
- 某些引脚的方向/用途不匹配(例如麦克风/喇叭的路由与硬件设计不一致);
- 放大器、电源门控(power gating)或 EAPD 时序不对,导致“启/停电”瞬间产生噪声;
- 插孔或内置麦/喇叭的检测与自动切换不可靠。
在这台机器上,直观表现就是长时间开机运行系统,偶发扬声器突然的爆音、破音,以及电源状态切换后不稳定,偶发开机后检测不到内置扬声器输出,codec初始化失败。结合 codec
枚举结果,可以把怀疑点集中到 SN6140 的初始化策略 上。
关键改动:model=laptop-amic
将 snd-hda-intel
的 model
指定为 laptop-amic
后,问题即刻消失,目前几天时间内复测
各种播放视频、音乐均稳定。
配置:
1 |
|
参数说明
power_save
- 控制 codec 的省电空闲时间(单位秒)。默认值往往是 1 秒,也就是说空闲 1 秒就会把 codec 掉电。
- 设置为
0
表示禁用 codec 空闲省电,让它始终保持在工作状态。
power_save_controller
- 控制 HDA 控制器本身是否参与省电。
- 设置为
N
就是禁止 HDA 控制器进入节能状态。
model=laptop-amic
- 指定使用 笔记本模拟麦克风 (Analog Mic) 的引脚配置模板。
- 修正了 BIOS 提供的错误或不完整的 pin default,确保内置扬声器、耳机孔、内置麦克风正确路由。
- 启用必要的 EAPD(功放控制),避免因初始化不当导致的爆音、杂音和自动静音失效。
probe_mask=1
- 控制
snd_hda_intel
驱动在初始化时只探测第一个 codec。 - 屏蔽掉 GPU 的 HDMI codec,仅保留 Conexant SN6140 作为默认声卡。
- 避免 HDMI 与内置声卡竞争默认输出设备,保证系统始终加载并使用正确的那一块声卡。
- 控制
其他机型的修改参考
查阅archlinux论坛会发现很多与内置麦克风杂音/无声等问题也与codec有关,更通用的一个解决方案是:
- 运行下面的命令,检查你机器上的音频 codec:
1
cat /proc/asound/card*/codec* | grep Codec
- 你可能会看到类似这样的输出(既包含音频也包含视频 codec):
1
2Codec: ATI R6xx HDMI
Codec: Realtek ALC256 - 打开官方内核文档:
https://www.kernel.org/doc/html/latest/sound/hd-audio/models.html - 在文档中找到对应的 codec 版本,并获取它的完整名称。
例如,我找到了这一部分:1
ALC22x/23x/25x/269/27x/28x/29x (and vendor-specific ALC3xxx models)
- 在列表中,我选择了 laptop-amic。
另外,我没有改用更具体的 Realtek ALC256 配置名称,像华硕、联想的品牌机设置可能不适合鸡哥) - 创建或更新
/etc/modprobe.d/alsa-base.conf
文件,并加入以下这一行(把laptop-amic
替换成与你 codec 匹配的 model 名称):1
options snd-hda-intel model=laptop-amic
- 重启系统。
为什么 card*/id
还是 Generic
1 |
|
/sys/class/sound/card*/id
反映的是声卡控制器的用户可读名称,与 model=...
选择的codec 初始化策略不是同一层级的对象。前者保持 Generic / Generic_1
完全正常,不影响通过 model
生效特定的引脚/路由修复。
电源管理
我还在使用TLP,对于TLP的电源管理配置文件,把 SN6140 所在的 PCI 功能进行黑名单/禁用 Runtime PM,防止未插电开机出现codec检测失效问题
1 |
|
两点说明:
- 形如”0000:64:00.6”的地址用
lspci -v | grep -A 10 -B 2 "Audio device"
获取 - 如启用了
powertop --auto-tune
,可能在会话层面“改写”电源设置,因此用 TLP 的禁用项做兜底。
验证模块参数是否传递成功
内核模块加载时会把参数挂在 /sys/module/snd_hda_intel/parameters/
下:
1 |
|
这里应该会显示:(后面null正常)
1 |
|
一些知识,关于引脚配置
什么是 HDA Codec 的引脚(Pin)
在 Intel HDA(High Definition Audio)架构里,声卡芯片(Codec,比如 Realtek ALC256、Conexant SN6140)并不是直接“声卡 = 输出/输入端口”。
芯片内部有很多 功能节点(nodes),其中最关键的是 Pin Widget:
- 每个 Pin 对应一个物理接口(耳机孔、扬声器、麦克风接口、HDMI 输出等)。
- Pin 有自己的 ID(0x14, 0x15, 0x1a …)。
- Pin 还带有能力描述(wcaps),比如是否支持输入、输出、放大器、检测插拔等。
简单理解:Pin 就是 Codec 芯片内部映射出来的“插孔定义”。
2. 引脚配置(Pin Configuration)
每个 Pin 在出厂时会被 BIOS/ACPI 写入一份 默认配置(default pin config)。
配置内容包括:
这个 Pin 是耳机输出?还是内置扬声器?
是否能检测插拔?
是否要用作模拟麦克风还是数字麦克风?
电源控制方式(EAPD、GPIO)。
👉 作用:决定了 ALSA 驱动初始化时如何理解你的硬件布局。
3. 为什么会出问题
很多笔记本厂商(尤其是国内品牌 / 小厂)BIOS 提供的 Pin 配置写得不规范:
内置麦克风标成了 dmic(数字),但实际上是模拟 → 麦克风没声。
扬声器和耳机 pin 配错 → 插耳机时仍然从扬声器放音。
没有正确配置 EAPD → 扬声器音量极低或爆音。
ALSA 驱动在遇到这些情况时,只能 fallback 到 Generic,导致功能残缺。
4. ALSA 的 “model=” 参数怎么用的
在
snd-hda-intel
驱动里,每个model=xxx
都对应一份 预定义的 pin 配置表(quirk/fixup)。比如:
laptop-amic
→ 强制把某些 Pin 配置为“模拟麦克风输入”,修复 BIOS 配错 dmic 的情况。alc256-asus-mic
→ 对 ASUS 某些笔记本专门写死的引脚映射。headset-mic
→ 把一个 combo jack 同时作为耳机和麦克风使用。
👉 原理:绕过 BIOS 给的垃圾配置,直接套用一份驱动开发者验证过的“更靠谱”的表。
5. 引脚配置在音频中的实际作用
决定哪些物理接口可用:耳机孔、麦克风孔、内置扬声器。
决定自动切换逻辑:插耳机时是否自动静音扬声器(Auto-Mute)。
决定录音效果:是否能区分内置麦克风 vs 外置麦克风。
决定音质和稳定性:错误的 pin 配置可能导致爆音、底噪、放大器失效。