Da dank AudioProLinux, oc2pus und }-Tux-{ das Projekt jacklab.net ins Leben gerufen wurde, und unsere apt-spezis oc2pus & }-Tux-{ eine ganze Menge rpm's für professionelle Audiobearbeitung erstellt haben (zu finden in http://ftp.gwdg.de/pub/linux/misc/jacklab/ ) soll an dieser stelle ein kleines HowTo entstehen, wie man sein System zur AudioWorkstation "umfunktioniert".
Bei Audiobearbeitung ist der entscheidende Punkt die Latenz, sprich die Verzögerung vom Zeitpunkt der Entstehung eines Signales bis es beim System "ankommt" (beispielsweise Tastendruck auf MIDI-Keyboard bis er hörbar ist).
Der Standard-Kernel hat den Nachteil dass er im Vergleich zu Windows oder gar Mac wesentlich langsamer ist (~11ms). Je schneller das System, sprich je kürzer die Latenz, desto mehr kann man mit dem System zeitgleich machen (mehrere Synths etc).
Es gibt ein Projekt von Redhat Developer Ingo Molnar und Kollegen, dessen Bestreben es ist die Latenz von Linux auf ein Minimum zu reduzieren: Realtime Preemption
Gute Audiohardware vorausgesetzt, erreicht man damit Latenzzeiten < 1ms, damit schneller als ein durchschnittlicher Mac.
Für Interessierte und Bastelwütige nun also ein kleines step-for-step Howto wie man sich einen "vanilla" kernel von kernel.org mit Realtime Preemption patcht und diesen kompiliert
Anmerkung:
Im Vergleich zum derzeit aktuellen kernel von SuSE 9.2 verliert man dabei support für folgendes:
- das reiser4 filesystem (welches für audio eh denkbar ungeeignet ist)
- lirc (IR fernbedienung)
- submount (eh überflüssig, suse 9.2 kommt mit udev, daher: hal/dbus/ivman für automounting, man kann aber subfs auch nachträglich bauen, dazu muss der neue kernel bereits laufen, siehe "Kernelhowto" hier im board)
- ein paar ipv6 sachen und noch andere kleinigkeiten
Beispiel-Kernel ist der aktuell stabile 2.6.11.7.
1. Kernel Source und patches herunterladen
als user in einem beliebigen Verzeichnis:
2. Entpacken und Patchen des Kernels
Man beachte dass beim patchen von realtime-preemption am ende ein "FAILED" zu sehen sein wird. Davon lassen wir uns nicht weiter stören! Grund ist dass der patch im Makefile mit 2.6.11 rechnet, allerdings heißt er tatsächlich 2.6.11.7
Dann geben wir unserem Kernel einen eigenen Namen:
..hängen an die EXTRAVERSION=.7 etwas dran ala -realtime und speichern das.
3. Konfiguration des Kernels
zunächst "klonen" wir die config des laufenden Kernels, um sicherzustellen, dass danach auch alles weiter funktioniert:
und nehmen dann ein paar Einstellungen vor:
wer es lieber etwas graphischer haben möchte kann xconfig verwenden:
die für Realtime Preemption relevanten Einstellungen sind hier:
bei default SuSE kernel sollte man noch folgendes deaktivieren (sonst verweigert MuSE den Dienst)
Einem Tip von drumfix folgend nehmen wir noch folgende Einstellungen vor:
Im Falle einer x86 CPU
Der Rest bleibt oder wird deaktiviert.
Dann schalten wir noch das USB HID polling aus.
realtime-lsm aktivieren (WICHTIG: das MUSS als Modul <M> gebaut werden
):
Eine zusätzliche Optimierung bringt die Auswahl des passenden Prozessortyps in "Processor type and features", Athlon/Duron/K7 zB. Generic x86 kann man dann abschalten.
Mit "Exit" verlassen und speichern wir das.
4. Kompileren und Installieren des Kernels
Nun wird der Kernel kompiliert und die Module installiert:
Das kann bei der default SuSE config, welche wir geklont haben, ein Weilchen dauern.
Wenn fertig, kopieren wir den Kernel nach /boot (dabei vergeben wir den Namen, den wir in EXTRAVERSION weiter oben definiert haben). Der bestehende Kernel wird dabei nicht angerührt, also keine Sorge! Sollte der neue Kernel wider erwarten nicht booten, hat man den alten zur Sicherheit noch da
Eine initrd brauchen wir auch noch:
5. Anpassen des Bootloaders
Zuletzt passen unseren Bootloader an:
Hier kopieren wir den Eintrag des alten Kernels und editieren diesen , sodass er auf den neuen Kernel passt. (kernel und initrd)
6. Beten und Booten

Zu realtime-lsm:
zunächst muss das modul commoncap geladen werden:
dann realtime, mit der option "gid=<id der audio gruppe>"
zB:
(richtige gid nummer verwenden! id <username hilft)
Greets!
gimpel
Bei Audiobearbeitung ist der entscheidende Punkt die Latenz, sprich die Verzögerung vom Zeitpunkt der Entstehung eines Signales bis es beim System "ankommt" (beispielsweise Tastendruck auf MIDI-Keyboard bis er hörbar ist).
Der Standard-Kernel hat den Nachteil dass er im Vergleich zu Windows oder gar Mac wesentlich langsamer ist (~11ms). Je schneller das System, sprich je kürzer die Latenz, desto mehr kann man mit dem System zeitgleich machen (mehrere Synths etc).
Es gibt ein Projekt von Redhat Developer Ingo Molnar und Kollegen, dessen Bestreben es ist die Latenz von Linux auf ein Minimum zu reduzieren: Realtime Preemption
Gute Audiohardware vorausgesetzt, erreicht man damit Latenzzeiten < 1ms, damit schneller als ein durchschnittlicher Mac.
Für Interessierte und Bastelwütige nun also ein kleines step-for-step Howto wie man sich einen "vanilla" kernel von kernel.org mit Realtime Preemption patcht und diesen kompiliert
Anmerkung:
Im Vergleich zum derzeit aktuellen kernel von SuSE 9.2 verliert man dabei support für folgendes:
- das reiser4 filesystem (welches für audio eh denkbar ungeeignet ist)
- lirc (IR fernbedienung)
- submount (eh überflüssig, suse 9.2 kommt mit udev, daher: hal/dbus/ivman für automounting, man kann aber subfs auch nachträglich bauen, dazu muss der neue kernel bereits laufen, siehe "Kernelhowto" hier im board)
- ein paar ipv6 sachen und noch andere kleinigkeiten
Beispiel-Kernel ist der aktuell stabile 2.6.11.7.
1. Kernel Source und patches herunterladen
als user in einem beliebigen Verzeichnis:
Code:
# Herunterladen des aktuellen vanilla kernels
wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.11.7.tar.bz2
# den passenden Realtime Preemption patch dazu
wget http://people.redhat.com/mingo/realtime-preempt/older/realtime-preempt-2.6.11-final-V0.7.40-04
# und noch den realtime-lsm patch, um als user mit realtime prio arbeiten zu können (aus -mm broken-out)
wget http://kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.11/2.6.11-mm4/broken-out/rt-lsm.patch
# wer den bootsplash nicht missen möchte:
wget http://www.bootsplash.de/files/bootsplash-3.1.4-2.6.11.diff
2. Entpacken und Patchen des Kernels
Code:
cd /usr/src/linux
su
<passwort>
tar xvjf /pfad/zu/linux-2.6.11.7.tar.bz2
mv linux-2.6.11.7 linux-2.6.11.7-realtime
cd linux-2.6.11.7-realtime
patch -p1 < /pfad/zu/realtime-preempt-2.6.11-final-V0.7.40-04
patch -p1 < /pfad/zu/rt-lsm.patch
patch -p1 < /pfad/zu/bootsplash-3.1.4-2.6.11.diff
Dann geben wir unserem Kernel einen eigenen Namen:
Code:
vi Makefile
3. Konfiguration des Kernels
zunächst "klonen" wir die config des laufenden Kernels, um sicherzustellen, dass danach auch alles weiter funktioniert:
Code:
zcat /proc/config.gz > .config
Code:
make menuconfig
Code:
# als user
xhost +
su
<pw>
make xconfig
die für Realtime Preemption relevanten Einstellungen sind hier:
Code:
Processor type and features --->
Preemption Mode (Complete Preemption (Real-Time)) --->
( ) No Forced Preemption (Server)
( ) Voluntary Kernel Preemption (Desktop)
( ) Preemptible Kernel (Low-Latency Desktop)
(X) Complete Preemption (Real-Time)
Code:
Device Drivers --->
Character devices --->
[ ] HPET Control RTC IRQ
Einem Tip von drumfix folgend nehmen wir noch folgende Einstellungen vor:
Im Falle einer x86 CPU
Code:
Power management options (ACPI, APM) --->
[*] Power Management support
ACPI (Advanced Configuration and Power Interface) Support --->
[*] ACPI Support
Dann schalten wir noch das USB HID polling aus.
Code:
Device Drivers --->
USB support --->
< > USB Human Interface Device (full HID) support
USB HID Boot Protocol drivers --->
< > USB HIDBP Keyboard (simple Boot) support
< > USB HIDBP Mouse (simple Boot) support
realtime-lsm aktivieren (WICHTIG: das MUSS als Modul <M> gebaut werden
Code:
Security options --->
<M> Realtime Capabilities
Eine zusätzliche Optimierung bringt die Auswahl des passenden Prozessortyps in "Processor type and features", Athlon/Duron/K7 zB. Generic x86 kann man dann abschalten.
Mit "Exit" verlassen und speichern wir das.
4. Kompileren und Installieren des Kernels
Nun wird der Kernel kompiliert und die Module installiert:
Code:
make && make modules_install
Wenn fertig, kopieren wir den Kernel nach /boot (dabei vergeben wir den Namen, den wir in EXTRAVERSION weiter oben definiert haben). Der bestehende Kernel wird dabei nicht angerührt, also keine Sorge! Sollte der neue Kernel wider erwarten nicht booten, hat man den alten zur Sicherheit noch da
Code:
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.11.7-realtime
cp System.map /boot/System.map-2.6.11.7-realtime
Code:
cd /boot
mkinitrd -k vmlinuz-2.6.11.7-realtime -i initrd-2.6.11.7-realtime
5. Anpassen des Bootloaders
Zuletzt passen unseren Bootloader an:
Code:
vi /boot/grub/menu.lst
6. Beten und Booten
Zu realtime-lsm:
zunächst muss das modul commoncap geladen werden:
Code:
modprobe commoncap
zB:
Code:
modprobe realtime gid=18
Greets!
gimpel