PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NFORCE/NFORCE2 Sound - oder das Treiberkarusell



mrsuicide
29.09.03, 17:19
NFORCE/NFORCE2 Sound - oder das Treiberkarusell v. 1.03
-----------------------------------------------------------------------------------

Neu in 1.02: Kernel 2.6.x
Neu in 1.02: Fix für unresolved symbols in snd_seq_oss
Neu in 1.01: Patch für Mixer-Problem beim ALSA-Treiber

Fakt ist, wer bei seinem NFORCE2-Mainboard den integriertem Sound nutzen will,
hat's schwer. Es wird von vielen Distributionen der i810_audio-Treiber mitgeliefert,
welcher einige Macken hat (einige Applikationen wie XMMS laufen perfekt, andere
wie Teamspeak streiken ganz) und nur OSS unterstützt.
Dann gibt es noch den offiziellen NFORCE2-Treiber von NVIDIA, welcher nach NVIDIA's
Aussagen ein optimierter i810_audio-Treiber ist, sicher einige Verbesserungen
und Features mitbringt (z.B. verbesserte S/PDIF-Unterstützung), aber in der Praxis
fast genau die selben Macken wie der i810_audio-Treiber hat.
Nun gibt es da noch einen dritten Treiber, der zwar etwas komplizierter zu installieren
ist und erst ab Version 0.9.7 wirklich für NFORCE2 brauchbar ist, aber er rockt richtig,
da er ALSA und OSS unterstützt, alle OSS (mit OSS-Emulation) und ALSA-Applikation nahezu problemlos laufen und es nur sehr wenig zu beanstanden gibt! Ich meine den Treiber
snd-intel8x0 von der Advanced Linux Sound Architecture - kurz ALSA.

1. i810_audio
2. nvaudio
3. snd-intel8x0

1.
Installation:
Dieser Treiber wird mit moderneren Kerneln mitgeliefert. Er nennt sich "INTEL IHC
(i8xx), SiS 7012, NVidia nforce Audio or AMD 768/811x". Sound (soundcore) generell
aktivieren, ich empfehle hier statisches compilieren, dann i810_audio Einfach als
Modul compilieren, oder statisch (allerdings können dann keine anderen Treiber benutzt
werden, deshalb ist davon unbedingt abzuraten). Wenn es ein Modul ist einfach die
/etc/modules.conf bei Kernel 2.4.x oder /etc/modprobe.conf bei Kernel 2.6.x folgendermaßen anpassen:

Kernel 2.4.x:


alias char-major-14 soundcore //Nur, wenn du soundcore als Modul compiliert hast!
alias sound-slot-0 i810_audio
post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :
pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :

Kernel 2.6.x:


alias char-major-14 soundcore //Nur, wenn du soundcore als Modul compiliert hast!
alias sound-slot-0 i810_audio
install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :
remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :


Betrieb:
Wie schon erwähnt, haben einige Applikation Probleme (z.B. Teamspeak, alle die auf
ALSA basieren...), andere nicht. Dieser Treiber sollte trotz der leichten Installation
nicht verwendet werden.

2.
Installation:
Hier lädt man einfach den Treiber als .tar.gz oder source-rpm (empfohlen!!) herunter, und
baut ihn sich ganz einfach. Nebenbei erhält man auch noch Unterstützung für die
Onboard-Netzwerkkarte. Bei der .tar.gz wird als Kernel, für den die Module gebaut
werden, einfach der Laufende genommen, bei der RPM muss man es definieren, für welchen
Module gebaut werden.
Wie baue ich nun die rpm (als root):

Hier wird für athlon optimiert, da auf deinem nforce-Board sicher ein Athlon läuft. :)

rpmbuild --rebuild --clean --target="athlon" --define="kernel [Kernelversion]" [Paketname]

Beispiel:

rpmbuild --rebuild --clean --target="athlon" --define="kernel 2.4.22" NVIDIA_nforce-1.0-0261.src.rpm

PS: In den letzten Zeilen von rpmbuild siehst du, wo das Binary-Paket verstaut wird.

Nun kann die RPM ganz lässig installiert werden, und die modules.conf/modprobe.conf wird auch automatisch
angepasst:

rpm -U -i --percent

Betrieb:
Nicht sehr viel besser als der i810_audio-Treiber...aber wenigstens wird jetzt deine Onboard-
Netzwerkkarte unterstützt. Wenn dir die Installation des ALSA-Treibers zu kompliziert ist,
solltest du unbedingt den verwenden.

3.
Installation:
Sauge dir erst mal die ALSA-Sources (0.9.7 gab es zum Zeitpunkt dieser FAQ Noch nicht als RPM).
Am besten hier: ftp://ftp.alsa-project.org/pub
Du benötigst driver, lib und utils. Nun geht's los. Entpacke die drei Archive und gehe erst mal
in alsa-driver-0.9.7. Werde root und los geht's. Extrem wichtig ist es erst mal

./snddevices

auszuführen. Danach geht es weiter mit:

!!BUG-BUG-BUG!!
Wenn ihr unresolved symbols in snd-seq und snd-seq-oss bekommt dann muss das so aussehen
./configure [B]--disable-verbose-printk --with-cards=intel8x0,cmipci --with-sequencer=yes;make;make install
!!BUG-BUG-BUG!!

./configure --with-cards=intel8x0,cmipci --with-sequencer=yes;make;make install

Super. Nun ist schon der driver installiert. Nun brauchen die Devices die korrekten Rechte:

chmod a+rw /dev/dsp /dev/mixer /dev/sequencer /dev/midi

Ab geht's nun ein Verzeichnis zurück und hinein in alsa-lib-0.9.7:

./configure;make;make install

Schwupp! Schon ist alsa-lib drauf. Und nun zu alsa-utils-0.9.7:

./configure;make;make install

Nun muss nachgesehen werden, ob die Module korrekt installiert sind:

/sbin/modprobe snd-intel8x0
/sbin/modprobe snd-pcm-oss
/sbin/modprobe snd-mixer-oss
/sbin/modprobe snd-seq-oss

Alle Module sollten korrekt geladen werden. /etc/modules.conf bei Kernel 2.4.x oder /etc/modprobe.conf bei Kernel 2.6.x edieren:

Kernel 2.4.x:


# ALSA portion
alias char-major-116 snd
alias char-major-14 soundcore //Nur, wenn du soundcore als Modul compiliert hast!
alias snd-card-0 snd-intel8x0
options snd-intel8x0 mpu_port=0x330 //Meist 0x330

# OSS/Free portion
alias sound-slot-0 snd-card-0
post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :
pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :

alias snd-card-1 snd-cmipci //Für MIDI
options snd-cmipci id="first" enable_midi="1"
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss

# OSS/Free portion - card #2 (cmipci)
alias sound-slot-1 snd-card-1
alias sound-service-1-0 snd-mixer-oss
alias sound-service-1-3 snd-pcm-oss
alias sound-service-1-12 snd-pcm-oss

Kernel 2.6.x:


# ALSA portion
alias char-major-116 snd
alias char-major-14 soundcore //Nur, wenn du soundcore als Modul compiliert hast!
alias snd-card-0 snd-intel8x0
options snd-intel8x0 mpu_port=0x330 //Meist 0x330

# OSS/Free portion
alias sound-slot-0 snd-card-0
install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :
remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :

alias snd-card-1 snd-cmipci //Für MIDI
options snd-cmipci id="first" enable_midi="1"
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss

# OSS/Free portion - card #2 (cmipci)
alias sound-slot-1 snd-card-1
alias sound-service-1-0 snd-mixer-oss
alias sound-service-1-3 snd-pcm-oss
alias sound-service-1-12 snd-pcm-oss

Ein Reboot wäre jetzt praktisch. (Biite vergebt mir, ihr anti-Reboot-Aktivisten!!)

Sehr wichtig ist jetzt mit gnome-alsamixer die Channels unzumuten, also den Sound auf drehen:

gnome-alsamixer
/usr/sbin/alsactl store

Da (bei mir) das alsasound-Script aus irgend einem Grund nicht funktioniert und beim nächsten
Start die Channels wieder stumm sind habe ich eutch einfach einen Patch für euch geschrieben:

alsasound.diff:


113,122c113,114
< if [ -d /proc/asound ]; then
< if [ ! -r $asoundcfg ]; then
< echo "No mixer config in $asoundcfg, you have to unmute your card!"
< else
< if [ -x $alsactl ]; then
< $alsactl -F -f $asoundcfg restore
< else
< echo -e "${rc_warning}ERROR: alsactl not found${rc_reset}"
< fi
< fi
---
> if [ -d /proc/asound ]; then
> $alsactl -F -f $asoundcfg restore
167,171c159
< if [ -x $alsactl ]; then
< $alsactl -f $asoundcfg store
< else
< echo -n -e "${rc_warning}!!!alsactl not found!!!${rc_reset} "
< fi
---
> $alsactl -f $asoundcfg store

Wendet ihn so an:

patch [Pfad zum ALSA-Startscript] alsasound.diff

z.B. bei Redhat 9:

patch /etc/rc.d/init.d/alsasound alsasound.diff

!!BUG-BUG-BUG!!
Alsa wolle bei Update dieses Tuts nicht so richtig mit Kernel 2.6.x und Spielen der Quake 3-Engine! (Enemy-Territroy, Quake 3...)

Hier ein temporärer Fix...hoffen wir mal, dass es bald im Treiber gefixt wird!

Tragt dies in eine neue Startdatei z.B. /etc/init.d/postalsa ein:


#!/bin/bash
if [ -r /etc/rc.config ]; then
. /etc/rc.config
rc_warning="\033[33m\033[1m"
else
rc_done="done"
rc_warning=""
rc_reset=""
fi

# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}

# Force execution if not called by a runlevel directory.
test $link = $base && START_ALSA=yes
test "$START_ALSA" = yes || exit 0

start() {
if [ ! -d /proc/asound ]
then
echo -n "ALSA driver isn't running, yet."
return 1
fi

echo -n "Konfiguriere ALSA für den Gebrauch mit Quake."

# Stelle sicher, dass das Device auch wirklich vom devfsd eingerichtet wurde.
# (sollte eigentlich nur nötig sein, wenn devfsd verwendet wird!)
echo "" > /dev/dsp

echo "quake3.x86 0 0 direct" >> /proc/asound/card0/pcm0p/oss
echo "wolf.x86 0 0 direct" >> /proc/asound/card0/pcm0p/oss
echo "et.x86 0 0 direct" >> /proc/asound/card0/pcm0p/oss

echo "quake3.x86 0 0 disable" >> /proc/asound/card0/pcm0c/oss
echo "wolf.x86 0 0 disable" >> /proc/asound/card0/pcm0c/oss
echo "et.x86 0 0 disable" >> /proc/asound/card0/pcm0c/oss

return 0
}

stop() {

if [ ! -d /proc/asound ]
then
eerror "ALSA driver is already unloaded."
return 0
fi

echo -n "Lösche die Einstellungen für Quake."

echo "" > /proc/asound/card0/pcm0p/oss
echo "" > /proc/asound/card0/pcm0c/oss

return 0
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
echo -e "$rc_done"
;;
restart|reload)
$0 stop
$0 start
;;


*)
echo "Usage: alsasound {start|stop|restart}"
exit 1
esac
exit 0

Diese Startdatei ist für Redhat und Fedora-Distris.
Ahnliche Startdateien für andere Distris sollten leicht zu erstellen sein...

Weiterhin spinnt es mit Kernel 2.6.x bei Mplayer...mit den ALSA-Plugin hört sich der Sound ca. doppelt so schnell an...hmmm... :ugly:

!!BUG-BUG-BUG!!

Betrieb:
Bei mir durchweg Problemlos. ALSA und OSS Applikationen funktionieren bei mir problemlos.
Auch Sounddaemons (bei mir esd) laufen ohne andere Applikationen zu stören. Einfach suppidup!! :D

Viel Spass und gute Besserung eurer Soundprobleme!:)