![当声卡和 HDMI 都使用 Intel HDA 驱动程序时,声音不工作。如何交换他们的设备加载顺序?](https://linux22.com/image/44638/%E5%BD%93%E5%A3%B0%E5%8D%A1%E5%92%8C%20HDMI%20%E9%83%BD%E4%BD%BF%E7%94%A8%20Intel%20HDA%20%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E6%97%B6%EF%BC%8C%E5%A3%B0%E9%9F%B3%E4%B8%8D%E5%B7%A5%E4%BD%9C%E3%80%82%E5%A6%82%E4%BD%95%E4%BA%A4%E6%8D%A2%E4%BB%96%E4%BB%AC%E7%9A%84%E8%AE%BE%E5%A4%87%E5%8A%A0%E8%BD%BD%E9%A1%BA%E5%BA%8F%EF%BC%9F.png)
我有一台 Acer Aspire One 522 上网本,配备基于 Conexant CX20584 芯片组的 Intel HDA 声卡。尽管 KDE 在启动时确实会输出声音,但 Flash 和可能许多其他寻找设备的应用程序/dev/dsp
却无法通过它输出声音,从而呈现出几乎无用的多媒体体验。
当我使用 检查我的 ALSA 播放设备时aplay -l
,我可以看到主音频设备被识别为卡 1 而不是 0,而卡被连接到 HDMI:
**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: SB [HDA ATI SB], device 0: CONEXANT Analog [CONEXANT Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
这样我就得到了/dev/dsp1
,但似乎大多数应用程序都只是硬编码才能使用/dev/dsp
,所以我开始寻找某种交换卡片索引的方法。经过 ALSA 文档的一些研究后,我尝试使用以下文件为 HDMI 和 Intel HDA 使用的驱动程序模块分配索引/etc/modprobe.d/asound.conf
:
options snd cards_limit=2
options snd-hda-codec-conexant index=0
options snd-hda-codec-hdmi index=1
options snd slots=snd-hda-codec-conexant,snd-hda-codec-hdmi
但这不起作用,并且基于我无休止地寻求答案时忘记的一些链接,这似乎是因为这些index
指令应该协调模块加载顺序,但这些 Conexant 和 HDMI 编解码器恰好使用相同的 Intel HDA驱动模块,所以它似乎不适用于这种情况。
也就是说,当设备使用相同的 ALSA 驱动程序模块(本例中为英特尔 HDA)时,是否有任何方法可以定义正确的卡索引?
答案1
我终于找到了这个问题的答案此帖子来自另一个论坛(请参阅“尝试 1b”以供参考)。据此,即使使用的驱动程序相同,也可以指定模块 ID:
alias char-major-116 snd
alias snd-card-0 snd-hda-intel
alias snd-card-1 snd-hda-intel
options snd cards_limit=2
options snd-hda-intel id=SB index=0
options snd-hda-intel id=HDMI index=1
从而产生正确的卡片顺序并使声音按预期工作:
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: SB [HDA ATI SB], device 0: CONEXANT Analog [CONEXANT Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: HDMI [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
为了应用于其他类似的情况,您可以检查/proc/asound
卡的符号链接,它们将是您所需的模块 ID:
$ ls -l /proc/asound/
total 0
lrwxrwxrwx 1 root root 5 Jan 26 19:19 HDMI -> card1
lrwxrwxrwx 1 root root 5 Jan 26 19:19 SB -> card0
dr-xr-xr-x 4 root root 0 Jan 26 19:19 card0
dr-xr-xr-x 3 root root 0 Jan 26 19:19 card1
-r--r--r-- 1 root root 0 Jan 26 19:19 cards
-r--r--r-- 1 root root 0 Jan 26 19:19 devices
-r--r--r-- 1 root root 0 Jan 26 19:19 hwdep
-r--r--r-- 1 root root 0 Jan 26 19:19 modules
dr-xr-xr-x 2 root root 0 Jan 26 19:19 oss
-r--r--r-- 1 root root 0 Jan 26 19:19 pcm
dr-xr-xr-x 2 root root 0 Jan 26 19:19 seq
-r--r--r-- 1 root root 0 Jan 26 19:19 timers
-r--r--r-- 1 root root 0 Jan 26 19:19 version