Mein erster selbst-kompilierter Kernel

Es gibt einige Gründe, den Kernel selbst zu kompilieren, beispielsweise:

  • es fehlen Module / Funktionen, die man benötigt
  • man möchte den Kernel weiter optimieren
  • man möchte sich den Prozess aus Interesse anschauen bzw ausprobieren

Bei mir war es ein bisschen von allem, denn ich brauche einerseits auf dem Raspberry Pi einen Kernel mit einem bestimmten Modul, andererseits habe ich bisher keine Erfahrung damit, einen Kernel selbst zu kompilieren und es interessierte mich.

Vorbereitungen

Die benötigten Pakete unter Ubuntu installiert man, sofern noch nicht geschehen, mit:

sudo apt-get install fakeroot build-essential kernel-package

Dann benötigt man noch den Quellcode des Kernels, den man entweder über die Paketverwaltung laden kann oder sich direkt auf Kernel.org herunterladen kann.

Für den Anfang nehme ich die von Ubuntu gepatchten Quellen via Git:

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-quantal.git

Dieser Vorgang dauert einen Moment, da mehrere hundert Megabyte geladen werden.

Ich hebe die Dateien auf, denn dann kann ich in Zukunft die Quellen via Git updaten. Mit dem Update-Befehl

git pull

werden nur wenige Megabyte geladen und die Quellen aktualisiert, sodass man sich direkt wieder einen Kernel basierend auf den neuesten (Ubuntu-)Quellen kompilieren kann.

Änderungen am Kernel durchführen

Nun kommt der spannende und vielleicht auch schwierigste Part, denn jetzt können Änderungen am Kernel bzw den Modulen vorgenommen werden. Ich beschränke mich erstmal darauf, gewisse Module abzuwählen, um den Kernel schlanker und hoffentlich schneller zu machen. Als Vorlage kann man die Konfiguration des bisherigen Kernels nutzen:

make oldconfig

Und nun kann man weitere Veränderungen vornehmen, indem man eine ncurs-basierte Oberfläche aufruft:

make nconfig

Hier lohnt es sich dann, sich intensiv mit seiner Hardware auseinander zu setzen, ich habe fürs erste alle 64-bit-Module und alles, was offensichtlich nichts mit meiner Hardware zu tun hatte (Mac, AMD, Dell, PAE) am Netbook abgewählt, die Anzahl der CPU-Kerne und die Größe des Arbeitsspeichers angepasst und so wahrscheinlich einen Funken Performance herausgeholt.

An dieser Stelle wird es dann auch für mich für den Raspberry Pi interessant, denn ich habe mich jetzt mit dem Thema Kernel kompilieren auseinandergesetzt, weil ich ein Modul in den Kernel des Raspberry Pi kompilieren muss / will – aber dazu in einem späteren Artikel mehr.

Kernel kompilieren

Nun kann man direkt mit dem Kompilieren beginnen:

make-kpkg clean
make clean
CONCURRENCY_LEVEL=2 fakeroot make-kpkg –initrd –append-to-version=BEZEICHNUNG kernel_image kernel_headers

Der zweite clean-Befehl ist notwendig, wenn man ein weiteres Mal kompiliert, um so vorher etwas aufzuräumen. CONCURRENCY_LEVEL=2 sollte insofern angepasst werden, dass man die Anzahl der im System verbauten Prozessorkerne einsetzt. Bei Hyper-Threading-fähigen Prozessoren kann man pro Kern nochmals 1 addieren. Und bei BEZEICHNUNG kann man eine Bezeichnung wählen, um den Kernel von einer eventuell parallel installierten, gleichen Version zu unterscheiden.

Kernel installieren

Wenn alles funktioniert hat, sollte es 2 .deb-Dateien im übergeordneten Ordner geben. Man installiert das entsprechende Paket mit:

sudo dpkg -i ../linux-image-XXX.deb

Und nun kann man schon neustarten und sich überzeugen, ob und wie der neue Kernel läuft. Der erste Start kann etwas länger dauern, also nicht gleich wieder runterschmeißen. Und falls, wie bei mir anfangs, etwas wie WLAN nicht funktioniert, dann hat man zu viele Module abgewählt bzw die entsprechenden Module nicht aktiviert.

Hilfreiche Links

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.