Es kommt nicht oft vor, dass ich den Linuxkernel selbst übersetzen muss. In der Regel bietet der generische Debian- oder Ubuntukernel alle Treiber, die man braucht und da die Module nur dann geladen werden, wenn sie tatsächlich benötigt werden, ist der Performancegewinn eines eigenen Kernel für mich auf neuer Hardware kaum spürbar.
Natürlich gibt es aber auch gute Gründe, warum ein eigener Kernel sinnvoll sein kann. Sei es nur um das letzte bisschen Leistung herauszukitzeln, ein neues Kernelfeature zu aktivieren oder unnötige zu deaktivieren.
Der Standardkernel 2.6.32 von Squeeze und auch der 2.6.26 von Lenny funktionieren beide nicht auf meinem Toshiba Satellite 220cs Laptop. Bei nur 16 MB RAM regt sich nach GRUB für gewöhnlich nichts mehr. Meine Versuche mit Slitaz hingegen waren sehr erfolgreich. Sowohl das Betriebssystem als auch der Kernel sind so angepasst, dass selbst 16 Jahre alte Hardware mit aktueller Software funktioniert.
Als Debian-Fan wollte ich unbedingt den Kernel anpassen, um auszuprobieren wie sich Debian auf dem alten Laptop schlägt. Natürlich stand ich wieder mal vor dem Problem, wie ging das eigentlich bei Debian mit dem Kernelkompilieren.
Debians Kernel Handbook zeigt schon die wichtigsten Schritte auf, doch am einfachsten und nachvollziehbarsten werden sie auf www.adminlife.net beschrieben.
Debian bringt nämlich schon ein Werkzeug mit, welches alle wichtigen Schritte der Kernelkompilierung übernimmt und den angepassten Kernel auch gleich in ein .deb Paket umwandelt, welches sich über Debians Apt dann problemlos verwalten lässt.
Die wichtigsten Schritte sind:
- Notwendige Programme zum Kompilieren installieren
aptitude install kernel-package build-essential
- Gewünschte Kernel Quellen installieren. Entweder die Debian Kernel Sourcen nehmen oder direkt von www.kernel.org herunterladen und in /usr/src entpacken. Z.B.
aptitude install linux-source-2.6.30
- Symlink anlegen
ln -s /usr/src/linux-2.6.30 /usr/src/linux
- Kernelconfig kopieren. Für den Anfang genügt es die aktuelle config aus /boot zu nehmen. Allgemein geht auch zcat /proc/config.gz > kernel.cfg
cp /boot/config-`uname -r` /usr/src/linux/.config
- Kernel an die eigenen Bedürfnisse anpassen
cd /usr/src/linux make oldconfig make menuconfig
- Den Kernel kompilieren und ein .deb Paket erstellen
make-kpkg kernel_image --revision 20110217 --initrd
Ich musste auf meinem im letzten Post vorgestellten Debian-Minimalsystem mit debootstrap noch das Paket lzma installieren, damit das Kompilieren erfolgreich war.
Als Kernelconfig hatte ich die Slitaz 2.6.30-loram config ausgewählt. Beim Übersetzen wurde zuerst ein Fehler mit dem Kernelmodul lguest gemeldet, dass ich danach aus der config gestrichen habe.
Erfreulicherweise lief danach die Kernelkompilierung erfolgreich durch. Das entstandene .deb Paket lässt sich bequem mit dpkg -i installieren.
Mit diesem Kernel ließ sich wie erhofft problemlos sowohl ein Squeeze als auch ein Lenny in Qemu booten. Möglichkeiten zum Optimieren gibt es noch einige. Z.B. benötige ich nicht wirklich das ReiserFS-Dateisystem und gefühlte 100 weitere Module auch nicht.
Vielleicht werde ich deswegen auch in Zukunft die Kernelconfig soweit anpassen, dass tatsächlich nur noch die absolut notwendigen Pakete übrig bleiben. Für den Anfang ist "the Debian way ™" und ein Minidebian in Ubuntu eine bequeme Möglichkeit um weiter herum zu experimentieren.
Wie sich der neue Kernel auf dem Toshiba 220cs geschlagen hat, dazu demnächst mehr.