Sound funktioniert nicht, wenn sowohl die Soundkarte als auch HDMI den Intel HDA-Treiber verwenden. Wie tausche ich ihre Ladereihenfolge aus?

10

Ich habe ein Acer Aspire One 522-Netbook mit einer Intel HDA-Soundkarte, die auf dem Conexant CX20584-Chipsatz basiert. Obwohl KDE beim Start Ton ausgibt, können Flash und wahrscheinlich viele andere Apps, die nach einem /dev/dspGerät suchen, keinen Ton über das Gerät ausgeben, was ein ziemlich nutzloses Multimedia-Erlebnis darstellt.

Als ich meine ALSA-Wiedergabegeräte mit überprüfte, konnte ich feststellen aplay -l, dass das Haupt-Audiogerät als Karte 1 anstelle von 0 erkannt wurde, die stattdessen an HDMI angeschlossen wurde:

**** 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

Auf diese Weise bekomme ich eine /dev/dsp1, aber es scheint, dass die meisten Apps nur fest codiert sind /dev/dsp, also habe ich nach einer Möglichkeit gesucht, die Kartenindizes auszutauschen. Nach einigen Recherchen in der ALSA-Dokumentation habe ich versucht, den von HDMI und Intel HDA verwendeten Treibermodulen mit dieser /etc/modprobe.d/asound.confDatei Indizes zuzuweisen :

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

Das hat zwar nicht funktioniert, und basierend auf einem vergessenen Link auf meiner endlosen Suche nach einer Antwort scheint es so zu sein, dass diese indexAnweisungen die Ladereihenfolge der Module koordinieren sollen, aber sowohl diese Conexant- als auch die HDMI-Codecs verwenden zufällig denselben Intel HDA Treibermodul, daher scheint es in diesem Fall nicht zuzutreffen.

Gibt es eine Möglichkeit, korrekte Kartenindizes zu definieren, wenn die Geräte dasselbe ALSA-Treibermodul verwenden (in diesem Fall Intel HDA)?

Claudio
quelle

Antworten:

10

Ich habe endlich eine Antwort auf dieses Problem gefunden, basierend auf diesem Beitrag aus einem anderen Forum (siehe "Versuch 1b" als Referenz). Demnach kann man die Modul-ID angeben, auch wenn der verwendete Treiber der gleiche ist:

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

So wird die richtige Kartenreihenfolge erreicht und der Sound funktioniert wie erwartet:

$ 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

Wenn Sie sich für ähnliche Fälle bewerben möchten, können Sie /proc/asoundnach Symlinks zu Ihren Karten suchen. Dies sind die gewünschten Modul-IDs:

$ 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
Claudio
quelle