Du bist nicht angemeldet.

  • Anmelden
  • Registrieren

basslord

Ubuntufreund

  • »basslord« ist der Autor dieses Themas

Beiträge: 2 623

Wohnort: /nrw/neuss/dormagen

Beruf: System Engineer

  • Private Nachricht senden

1

Montag, 1. Januar 2007, 13:07

Vanilla Kernel mit Realtime Preemption (RT patch)

Dieses HowTo kann in Form eines PDFs in unserer Datenbank herunter geladen werden: download

Hallo zusammen,

hier mal ein kleines HowTo zum Kompilieren eines Vanilla-Kernels samt rt-Patch.
Dies ist für all diejenigen gedacht, die mit Anwendungen arbeiten, die niedrige Latenzzeiten benötigen. Ich denke da vor allem an Audio/Media-Anwendungen.

Neugierige können das HowTo natürlich auch einfach mal testen. Es kann selbstverständlich keinerlei Garantie für ein späteres Funktionieren gegeben werden.
Ebensowenig wird eine Haftung für eventuelle Schäden am System übernommen.

Auch wird in diesem HowTo nicht auf Einstellungen eingegangen, die nicht für realtime-preemption relevant sind. Man sollte also etwas KnowHow für das Konfigurieren mitbringen.
Dennoch sollte ein start- und funktionsfähiger Kernel herauskommen. Dafür werde ich einige zusätzliche Bemerkungen hinzufügen.

Weiter ist es mehr als ratsam, dass auch bei funktionierendem rt-Kernel der Ubuntu-Kernel sicherheitshalber auf dem System installiert bleiben sollte.
"Ohne Musik wäre das Leben ein Irrtum." - Friedrich Nietzsche

basslord

Ubuntufreund

  • »basslord« ist der Autor dieses Themas

Beiträge: 2 623

Wohnort: /nrw/neuss/dormagen

Beruf: System Engineer

  • Private Nachricht senden

2

Mittwoch, 28. März 2007, 01:50

1. Einleitung

Wozu das Ganze dienen soll, wurde ja bereits kurz erwähnt. Es geht darum, dem Kernel realtime-preemption beizubringen. Das verringert die Latenzzeiten auf ein absolutes Minimum, entsprechende Hardware natürlich vorausgesetzt.

Der Standard-Kernel unterscheidet dabei drei Modi:
No Forced Preemption (Server)
Voluntary Kernel Preemption (Desktop)
Preemptible Kernel (Low-Latency Desktop)


In Dapper war es nun so, dass der Kernel mit Variante 3 kompiliert war, was ihn schon ganz brauchbar für Audio-Anwendungen gemacht hat.

In Edgy, entgegen aller Voraussagen und Versprechungen, war der Kernel nur mit Variante 2 kompiliert. Schlecht.

Feisty wiederum bringt die Option eines nachinstallierbaren lowlatency-Kernels mit. Doch auch dieser Kernel bietet nur ähnliche Optimierungen, wenn nicht gar dieselben, die in Dapper schon Standard waren.

Was wir nun wollen ist Variante 4, und die gibt es nur mit dem realtime-patch von Red-Hat-Entwickler Ingo Molnar:
Complete Preemption (Real-Time)

basslord

Ubuntufreund

  • »basslord« ist der Autor dieses Themas

Beiträge: 2 623

Wohnort: /nrw/neuss/dormagen

Beruf: System Engineer

  • Private Nachricht senden

3

Mittwoch, 28. März 2007, 01:51

2. Vorbereitungen

Zunächst müssen ein paar Voraussetzungen für das Kompilieren erfüllt sein. Die benötigten Pakete lassen sich bequem per apt (oder synaptic) installieren.
Man installiert also erstmal die Pakete:

Quellcode

1
sudo apt-get install build-essential kernel-package libncurses5-dev bin86

Dann besorgt man sich hier den aktuellen Kernel: kernel.org
Zum aktuellen Zeitpunkt ist dies der Kernel in Version 2.6.26.3 Hier geht es direkt zum Verzeichnis der 2.6er Kernel:
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/

Achtung!
Der Patch muss auf die vorhandene Kernel-Version passen. In diesem HowTo verwende ich Kernel 2.6.26.3
Dementsprechend auch den passenden Patch: patch-2.6.26.3-rt3

Der gepackte Quellcode wird nach dem Herunterladen nach /usr/src kopiert:

Quellcode

1
sudo cp /pfad/zum/download/linux-2.6.26.3.tar.bz2 /usr/src/

Für die weiteren Schritte per cd /usr/src ins Verzeichnis wechseln und dort den tarball entpacken:

Quellcode

1
sudo tar -xvjf linux-2.6.26.3.tar.bz2

Nun fehlt noch der rt-patch. Den aktuellsten Patch kann man sich von hier besorgen: Ingo Molnar realtime-preempt
In diesem Beispiel steht man bereits in /usr/src und kann sich den patch gleich mit wget in den Ordner ziehen:

Quellcode

1
sudo wget http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.26.3-rt3.bz2

und entpacken:

Quellcode

1
bunzip2 patch-2.6.26.3-rt3.bz2


Jetzt benennt man den Ordner des Kernels um (reine Kosmetik, um ihn von anderen unterscheiden zu können), und zwar in diesem Beispiel so

Quellcode

1
sudo mv linux-2.6.26.3 linux-2.6.26.3-rt3

Abschließend noch einen symbolischen Link auf den neuen Ordner erstellen:

Quellcode

1
sudo ln -s linux-2.6.26.3-rt3 linux

Soweit die Vorbereitungen.

basslord

Ubuntufreund

  • »basslord« ist der Autor dieses Themas

Beiträge: 2 623

Wohnort: /nrw/neuss/dormagen

Beruf: System Engineer

  • Private Nachricht senden

4

Mittwoch, 28. März 2007, 01:52

3. Kernel-Patch anwenden

Dazu wechselt man per cd linux in das Arbeitsverzeichnis und patcht den Kernel mit dem rt-Patch:

Quellcode

1
sudo patch -p1 <../patch-2.6.26.3-rt3
Dieses sollte ohne Fehlermeldungen durchlaufen.

basslord

Ubuntufreund

  • »basslord« ist der Autor dieses Themas

Beiträge: 2 623

Wohnort: /nrw/neuss/dormagen

Beruf: System Engineer

  • Private Nachricht senden

5

Mittwoch, 28. März 2007, 01:53

4. Kernel konfigurieren

Dazu kopiert man am Besten zunächst die alte Konfigurationsdatei des laufenden Kernels in das Arbeitsverzeichnis:

Quellcode

1
sudo cp /boot/config-$(uname -r) .config

Falls bereits ein Kernel kompiliert wurde, oder auch nur zur Sicherheit, wird das Verzeichnis zunächst aufgeräumt:

Quellcode

1
sudo make-kpkg clean

Dann kann man die Konfiguration des zu kompilierenden Kernels starten:

Quellcode

1
sudo make menuconfig

Hier wird nun nicht auf jede einzelne Konfigurationsmöglichkeit eingegangen. Das wird noch an gesonderter Stelle behandelt werden. Ich beschränke mich daher überwiegend auf die für den gepatchten Kernel relevanten Details. Eure Hardware müsst ihr schon selbst kennen ;)

Achtung!
Anders als bei den anderen folgenden Einstellungen, wo jeweils die Änderungen hervorgehoben und beschrieben sind, gilt für den Punkt Device Drivers --->, Graphics support--->, dass nur die Punkte so einkompiliert werden, wie sie hier stehen. Und alle anderen Module unterhalb dieses Punktes nicht einkompiliert werden, weder fest, noch als Modul.
Es sei denn, ihr könnt unter Umständen auf eure Terminals auf F1-F6 verzichten ;)

So werden nun als Wichtigstes folgende Einstellungen gewählt:
Unterhalb von Processor type and features --->

Quellcode

1
2
3
4
[*] High Resolution Timer Support 
[*]Tickless System (Dynamic Ticks) 
Preemption Mode ---> Complete Preemption (Real-Time)
Timer frequency ---> 1000HZ

Weiterhin noch einige andere, nicht rt-patch-spezifische Einstellungen:
Unterhalb von General Setup --->

Quellcode

1
[*] Prompt for development and/or incomplete code/drivers

Unterhalb von Device Drivers --->, Graphics support--->

Quellcode

1
2
3
4
5
6
[ ] Backlight & LCD device support //nur bei einigen LCDs und PDAs interessant
[*] Enable firmware EDID
<*> Support for frame buffer devices
[*]   Enable Video Mode Handling Helpers
[ ]   Enable Tile Blitting Support
[*]   VESA VGA graphics support

Ihr mögt auch Pinguine? Dann unterhalb von Device Drivers --->, Graphics support --->, Logo configuration --->

Quellcode

1
2
[*] Bootup logo 
[*]   Standard 224-color Linux logo

Unterhalb von Kernel hacking --->

Quellcode

1
[ ] Kernel debugging

Nun kann man menuconfig verlassen, wobei man die Frage, ob die Konfiguration gespeichert werden soll, selbstverständlich mit "ja" beantwortet.

Vor dem Start noch einmal cleanen:

Quellcode

1
sudo make-kpkg clean

Und schließlich den Compiler anwerfen und die CPU glühen lassen:

Quellcode

1
sudo make-kpkg -initrd --revision=2.6.26.3 --append-to-version=-rev01 kernel_image kernel_headers

Die Header gleich mit zu kompilieren ist eine gute Idee, da diese anschließend installierbar sind und nicht nach einem Aufräumen im Arbeitsverzeichnis verloren gehen.
Will oder muss man nämlich später beispielsweise noch die Grafikkartentreiber oder vmware rekompilieren, steht man dumm da ;)

So, nun leiht euch je nach Konfiguration und Rechenpower einen oder zwei Filme aus der Videothek und wartet ab.

Ist der Vorgang erfolgreich durchgeführt worden, so findet ihr in /usr/src die beiden Pakete linux-headers*.deb und linux-image*.deb.
Diese werden nun wie gewohnt installiert:

Quellcode

1
2
sudo dpkg -i linux-image*.deb
sudo dpkg -i linux-headers*.deb
Um Weiteres muss man sich nicht mehr kümmern, einfach den Rechner neu starten und im Grub-Menü den neuen Kernel auswählen.


Viel Spaß
Rodge
"Ohne Musik wäre das Leben ein Irrtum." - Friedrich Nietzsche