Low-Latency Audioworkstation

mit Slackware Linux 9.0

So, was machen wir in diesem HOWTO?

Wir installieren:

Diese Anleitung hier basiert in wesentlichen teilen auf diesem HOWTO


Low Latency Kernel

Als erstes braucht man die Kernel-Sourcen. Sollten diese nicht bei der bevorzugten Distri dabei sein, wie z.B. bei Slackware, kann man sich auf http://www.slackware.com/getslack/ einen Mirror aussuchen, und dort das Kernel-source paket runterladen. (für Slackware im Verzeichnis: slackware-9.0/slackware/k/)
auf kernel.org gibts das notfalls auch noch.

Dann brauchts den Lowlatency Patch: http://www.zip.com.au/~akpm/linux/schedlat.html#downloads

Da nimmt man den, der zur verwendeten Kernelversion passt, in meinem Fall war das der 2.4.20er.

ist hinten ein .gz dran ist der patch komprimiert, und man installiert ihn mit:
indem man in das verzeichnis /usr/src/linux wechselt(das Kernel-source verzeichnis) und

	gzip -cd /verzeichnis/bla/bla/patchXX.patch.gz | patch -p1

eingibt.

oder

ohne .gz im Patch-Dateinamen heißt das:

  patch -p1 < /verzeichnis/bla/bla/patchXX.patch

nun kann man noch nachschauen, ob die Distri bereits vorgefertigte Kernel-Konfigurations-Dateien bietet, und diese gegebenenfalls nach /usr/src/linux/.config kopieren. Aber nehmen wir mal an, das stimmt alles schon.

dann macht man:

	make xconfig

um den Kernel zu konfigurieren, alles was man da aktivieren muss ist im "Processor Type and Features" menŸ "Low-latency-scheduling" und "Control low latency with sysctll" (damit kann man später in /proc/sys/kernel/lowlatency diese funktion ein und ausschalten)

Alles andere kann in der Regel so bleiben wie es ist. (zumindest bei mir unter Slackware war das alles schon richtig eingestellt.)

Wenn man nicht will das der neue Kernel die Module des alten überschreibt, kann man im Makefile in /usr/src/linux den Eintrag EXTRAVERSION= ändern, z.B.

	EXTRAVERSION = mein_LL_Kernel
dann mit dem üblichen
	make dep
	make clean
	make bzImage
	make modules
	make modules_install

den kernel samt module kompilieren und die module installieren.

dann kopiert man /usr/src/linux/arch/i386/boot/bzImage nach /boot wobei man seinen neuen Kernel auch gleich umbenennen kann.

wir befinden uns noch in: /usr/src/linux

von dort kopieren wir System.map auch nach /boot, am besten wieder umbenennen, und einen Symlink namens System.map im /boot Verzeichnis auf die neue System.map_fuer_LL_Kernel erstellen (mit ln -s System.map_fuer_LL_Kernel System.map im /boot verzeichnis)
BTW. slackware verwendet keine initrd - (eine Init-Ramdisk) deswegen gehe ich auch nicht auf diese Funktion hier ein.

Dann ändert man seine /etc/lilo.conf um den neuen Kernel zu verwenden, oder halt die Datei von seinem bevorzugten Bootmanager.

je nachdem muss man nun noch /sbin/lilo ausführen, bei grub ist das nicht nötig, der erkennt Änderungen von selbst.

hat das alles funktioniert, bootet man neu um den neuen Kernel zu verwenden.

Alsa

wie man Alsa installiert entnehmen wir dem audio4linux.de Alsa-Howto

So, was allerdings jetzt noch fehlt, sind die Einträge in der /etc/modules.conf, die sind nötig damit beim Starten des Computers auch die passenden Soundtreiber geladen werden.
Und so muss das aussehen: links ein Beispiel mit zwei Soundkarten, rechts das gleiche für eine einzelne karte.

# ALSA native device support
alias char-major-116 snd
options snd major=116 cards_limit=2
alias snd-card-0 snd-gusclassic
alias snd-card-1 snd-sb16
options snd-gusclassic index=0 id="Gus"
options snd-sb16 index=1 id="SB16"

# OSS/Free setup
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
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
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
# ALSA native device support
alias char-major-116 snd
options snd major=116 cards_limit=1
alias snd-card-0 snd-interwave
options snd-interwave index=0 id="GusPnP"

# OSS/Free setup
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
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
Diese Beispiele sind aus der Alsa Documentation, die Modulnamen (snd-gusclassic, snd-sb16, snd-interwave) sind entsprechend der eigenen Hardware anzupassen.

So, zwischendurch kann man mal xmms anstarten und testen ob es funktioniert.

JACK

Und jetzt holen wir uns JACK von http://jackit.sf.net.

Bevor wir jack installieren machen wir noch ein kleines Ram-Filesystem, für jacks temporäre dateien, und zwar so:

	mkdir /tmp/jack

und in die /etc/fstab tragen wir diese Zeile ein:

	none    /tmp/jack      tmpfs       defaults      0  0

dann das übliche ./configure, make, make install für jack (oder auch mit checkinstall)

Probieren obs funktioniert hat

jetzt brauchen wir noch ein testprogramm, da empfiehlt sich der alsaplayer, den wir jetzt kompilieren und installieren

dann liegt noch folgendes an:

	echo 1 > /proc/sys/kernel/lowlatency

(Das kann man mit dem Eintrag kernel.lowlatency = 1 in der Datei /etc/sysctl.conf schon beim booten aktivieren)

damit schalten wir die lowlatency funktion des Kernels ein.

Dann starten wir als user "root" jack mit:

	jackd -R -d alsa -d hw:0 -r 44100 -p 512

Dabei kann man mit dem Parameter -p etwas herumspielen, je nachdem was besser funktioniert.
(Die genaue Funktionsweise ist der jackd manpage zu entnehmen.)

jetzt noch alsaplayer so starten (auch als root!):

	alsaplayer -o jack

jetzt noch nicht vergessen mit einem Audio-mixer die Lautstärke etwas anzuheben

und wenns klappt ein mp3 file abzuspielen, hat alles geklappt.


Richard Spindler