FreeBSD 8.2 - nach Update kein Sound - Lösung

reakktor

Well-Known Member
Hi

hatte das Problem, das ich nach einem csup/buildworld/buildkernel/mergemaster von 8.1 auf 8.2 plötzlich keinen Sound mehr hatte.

Liegt wohl daran, dass sich am sound-Modul was getan hat, was wieder mal nirgendwo in UPDATING usw. finden lässt.

Kurz:

Code:
> dmesg
...
hdac0: HDA Driver Revision: 20100226_0142
hdac1: HDA Driver Revision: 20100226_0142
hdac0: HDA Codec #0: NVidia (Unknown)
hdac0: HDA Codec #1: NVidia (Unknown)
hdac0: HDA Codec #2: NVidia (Unknown)
hdac0: HDA Codec #3: NVidia (Unknown)
pcm0: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
pcm1: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
pcm2: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
pcm3: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
hdac1: HDA Codec #2: Realtek ALC889
pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1
...

Soundkarte ist da und wird auch erkannt. Leider scheint FreeBSD nicht in der Lage, das richtige Sound-Device von selbst zu finden.

Ein kurzer List auf die Sound-Devices ergibt nun mit 8.2:
Code:
> ls -la /dev/dsp*
crw-rw-rw-  1 root  wheel    0, 156 Mar  4 03:11 /dev/dsp0.1
crw-rw-rw-  1 root  wheel    0, 158 Mar  4 03:11 /dev/dsp1.1
crw-rw-rw-  1 root  wheel    0, 160 Mar  4 03:11 /dev/dsp2.1
crw-rw-rw-  1 root  wheel    0, 162 Mar  4 03:11 /dev/dsp3.1
crw-rw-rw-  1 root  wheel    0, 148 Mar  4 03:11 /dev/dsp4.0
crw-rw-rw-  1 root  wheel    0, 166 Mar  4 03:11 /dev/dsp5.1
crw-rw-rw-  1 root  wheel    0, 168 Mar  4 03:11 /dev/dsp6.1
crw-rw-rw-  1 root  wheel    0, 170 Mar  4 03:11 /dev/dsp7.1

Über
Code:
> cat /dev/random > /dev/dsp0
> cat /dev/random > /dev/dsp1
> ....

hats dann bei dsp4 gefunkt. Kurzer Schock, bin noch ne Woche halb taub, weil ich Boxen aufgedreht hatte, aber funktionierte ;)

Habe dann in der /boot/loader.conf
Code:
hw.snd.default_unit="4"

eingetragen, und nun funktioniert es wieder mit dem Sound.

Hoffe es hilft anderen mit ähnlichen Problemen weiter.

Mit ärgert es nur tierisch, dass ich wieder mal die halbe Nacht verbringen musste, um so undokumentierte kleine (aber unglaublich stressige) Änderungen selber rauszufinden. Gehört so was nicht in UPDATING oder RELEASE NOTES ?
Oder hab ich da was übersehen ?

greetz reakktor
 
nakal hat das bereits vor knapp 3 Jahren diese Lösung bei mehreren Audio-Geräten gepostet. :)

Eigentlich sollte dieser Tipp meiner Meinung nach im FreeBSD-Handbuch unter "7.2.2.1. Häufige Probleme" erwähnt werden. --> PR 155264

mousaka
 
Meiner Meinung nach ist das auch kein Problem, sondern eine Funktion. Woher soll denn FreeBSD wissen, ueber welchen Ausgang bzw. ueber welche Soundkarte du den Ton haben willst?
 
Offensichtlich weiß die Soundkarte schon wo etwas angeschlossen ist. Windows schaltet bei mir jedenfalls automatisch die Ausgänge. Das kann man also schon als Mangel der Treiber erachten.
 
Das ist doch kein Treiber Mangel...das is die Freiheit die FreeBSD einem gibt und Windows nicht...du hast die Wahl welchen Ausgang, Windows entscheidet für DICH !! So seh ich das jedenfalls ;)
 
Huh, auch wenns mir immer noch peinlich is, ne 3 Jahre alte Lösung ausgegraben zu haben - das ist dennoch ein echter Schwachpunkt. Hat sich bei mir halt erst mit Update auf 8.2 aufgetan.

Wie Kamikaze schrieb - Windows (hier Win7) hat mit der Erkennung keine Probleme. Linux (Ubuntu 9.x, 10,x) übrigens auch nicht.

Wenn ich rumstöpsel, dann wirds erkannt, Linux wie Windows. Also scheint die allgegenwärtige HDA Architektur so was wie eine Ein/Ausgang-Erkennung zu unterstützen, die bei FreeBSD nich drin ist.

Somit würd ich auch fast sagen, dass das ein Treiber/Architektur-Mangel is....
 
Ist es nicht... Der HDA-Standard schreibt vor, dass EINE HDA-Karte in verschiedene logische Soundkarten zerfällt. Normalerweise sind das vier Stück:
- Hinten analog
- Hinten digital
- Vorne analog
- Vorne digital
Diese nur für HDMI gedachten Chips auf den Grafikkarten sind logischerweise keine vollständigen HDA-Implementierungen. Sie beschränken sich meist auf eine oder auf eben zwei Teilaspekte:
- Hinten digital
- Hinten analog (dies nicht immer)
Wer also eine klassische HDA-Karte on Board und einen HDA-Chip auf der Grafikkarte hat, hat damit meist 5 oder 6 Soundkarten im System. Das sind dann pcm0 bis pcm4 oder pcm5. snd_hda ist sehr wohl in der Lage zu erkennen, wo was eingesteckt ist. Und er ist auch in der Lage alle anderen Ausgänge entsprechend abzuschalten. Aber er kann es eben nur innerhalb eines logischen Devices und nicht über mehrere Soundkarten hinweg. Wer das nutzen möchte, muss also seine HDA-Geräte entsprechend konfigurieren. Wie das geht ist in snd_hda(4) sehr umfassend beschrieben.
Für alle anderen gilt hier aber das "nerv mich nicht"-Prinzip. Ich habe zum Beispiel neben den beiden HDA-Dingern noch eine richtige Soundkarte auf Basis des Envy24-Chips im System. Wenn mir das System jedes mal die Standardsoundkarte verstellen würde, wenn ich etwas einstecke, wäre das sehr entnervend. Mal davon abgesehen, dass laufende Programme diese Umstellung eh nicht kapieren und neu gestartet werden müssen... Die meisten Endprogramme (musicpd, mplayer, etc.) bieten übrigens die Möglichkeit auf eine spezielle Karte abseits der globalen Voreinstellungen auszugeben.
Davon abgesehen ist es technisch gar nicht möglich. Ein Treiber unterhalb des OSS kann diesem gar nicht sagen, was nun bitte dessen globale Einstellungen zu sein haben. Wie sollte es auch gehen, hat der Treiber doch keine Ahnung, was da sonst für Soundkarten im System rumschwirren.
 
Ok, das mit HDA, HDMDI usw. seh ich ein, aber es gibt auch andere internationale Standards, die sagen (http://de.wikipedia.org/wiki/Soundkarte):

rosa Eingang für Mikrofon (mono).
blau Line-In / Eingang für AUX (Stereo).
grün Line-Out / Ausgang für Kopfhörer- oder (Front-)Lautsprecher (stereo)
schwarz Ausgang für Rücklautsprecher [engl. rear speakers] (stereo)
silber Ausgang für Seitenlautsprecher [engl. side speakers] (stereo)
orange Ausgang für Center- und Tiefbass-Lautsprecher [engl. center speaker, subwoofer]

Ich meine, Linux und Windows halten sich dran. Nur FreeBSD scheint da ein Problem mit dem schwarzen Standard-Stöpsel zu haben...

Edit: URL korrigiert.
 
Zuletzt bearbeitet:
Nee, laut Wikipedia ist das durch nen ISO-Standard geregelt... wobei hier die Quelle/Referenz fehlt.
 
Ja schon klar. Aber wenn sich der Hersteller für andere Farben entscheidet kann man da schlecht FreeBSD für verantwortlich machen - oder haben die Buchsen unter Windows dann plötzlich eine andere Farbe?
 
Heutzutage kann man eh alles mit Software ändern.. Zumindest kann man die Zuordnung der Buchsen unter Windows und Linux so definieren wie man lustig ist. Bei FreeBSD weiß ich es nicht.
 
FreeBSDs snd_hda ließt die Beschreibungstabelle des Codecs aus und benennt die Buchsen entsprechend. Wenn das schief geht, liegt's an der Inkompetenz der Hersteller... Man kann dann, wie oenone sagt, die Buchsen reprogrammieren. In snd_hda(4) ist das sehr umfassend geklärt. :)
 
Ja du kannst die Pinbelegung ueber die device.hints mit hint.hdac.<device>. usw... aendern. Mittlerweile sind die ja alle frei verschaltbar.

Hattest du nicht mal, kamikaze einen Thread eroeffnet mit der Frage wie die Soundkarte eigentlich erkennt, ob der Ausgang eine Last treibt, oder nicht?
Ich finde das aber immernoch quatsch, denn ich moechte selber bestimmen, wo ich was ausgebe und vorallem habe ich mehrere Systeme, einmal digital und einmal analog an meine Soundkarte angeschlossen. Von daher finde ich das wie es im Moment ist, mehr als in Ordnung.
 
Zurück
Oben