Einen neuen Kernel kompilieren
Warum sollte jemand einen neuen, eigenen Kernel kompilieren wollen?
Es ist oft nicht nötig, da der Standardkernel in Debian die meisten
Konfigurationen bedient. Allerdings kann es unter folgenden Umständen nützlich
sein, einen neuen Kernel zu kompilieren:
spezielle Hardwareanforderungen bewältigen oder Hardwarekonflikte mit den
vorkompilierten Kernel
Hardware oder zusätzliche Optionen unterstützen, die im Standardkernel nicht
enthalten sind, wie z.B. APM oder SMP
den Kernel optimieren durch Entfernen von nicht benötigten Treibern,
um die Bootzeit zu verkürzen
Optionen des Kernels nutzen, die vom Standardkernel nicht unterstützt werden,
wie z.B. Unterstützung für viel Arbeitsspeicher (high memory support)
einen aktualisierten oder Entwicklerkernel verwenden
seine Freunde beeindrucken, neue Sachen ausprobieren
Kernel-Image-Verwaltung
Sie brauchen keine Angst davor zu haben, auszuprobieren, einen eigenen Kernel
zu kompilieren. Es macht Spaß und lohnt sich.
Um auf die debiansche Art einen Kernel zu kompilieren, benötigen
Sie ein paar Pakete: kernel-package,
kernel-source-&kernelversion; (dies war die neueste Version
zum Zeitpunkt, als dies geschrieben wurde), fakeroot
und ein paar weitere, die vielleicht schon installiert sind
(/usr/share/doc/kernel-package/README.gz enthält die
komplette Liste).
Diese Methode erstellt ein .deb-Paket aus den Kernelquellen und, falls
Sie Nicht-Standard-Module verwenden, auch ein synchrones abhängiges .deb für diese
Module. Es ist ein besserer Weg, um die Kernel-Images zu verwalten
(verglichen mit der Nicht-Debian-Methode, einen Kernel zu erzeugen);
/boot enthält den Kernel, die dazugehörige
System.map und ein Log der aktiven Konfigurationsdatei für den Bau des
Kernels.
Beachten Sie, dass Sie Ihren Kernel nicht auf Debian-Art
kompilieren
müssen, aber wir meinen, dass es erheblich sicherer
und einfacher ist, das Paketsystem zur Verwaltung der Kernel zu verwenden.
Sie können auch Ihre Kernelquellen direkt von Linus beziehen statt aus
dem kernel-source-&kernelversion;-Paket, aber
trotzdem die kernel-package-Methode zum
Kompilieren nutzen.
Sie finden eine komplette Dokumentation zur Nutzung von
kernel-package unter
/usr/share/doc/kernel-package. Dieses Kapitel gibt
nur eine kurze Einführung.
Wir gehen hier davon aus, dass Sie freien Zugriff auf Ihren Rechner haben
und die Kernelquellen irgendwo in Ihr Home-Verzeichnis entpacken werden
Es gibt auch andere Verzeichnisse, in die Sie die Kernelquellen entpacken und
wo Sie Ihren eigenen Kernel bauen können, aber dieses ist der einfachste Weg,
da er keine speziellen Berechtigungen erfordert.
. Ebenso gehen wird davon aus, dass Ihre zu bauende Kernel-Version
&kernelversion; ist. Vergewissern Sie sich, dass Sie sich in dem Verzeichnis
befinden, in das Sie die Kernelquellen entpacken möchten und extrahieren Sie
sie mittels tar xjf /usr/src/kernel-source-&kernelversion;.tar.bz2.
Wechseln Sie in das Verzeichnis kernel-source-&kernelversion;,
das erzeugt wurde.
Sie können jetzt Ihren Kernel konfigurieren. Führen Sie make
xconfig aus, wenn X11 installiert, konfiguriert und gestartet ist;
andernfalls nehmen Sie make menuconfig (hierzu muss
das Paket libncurses5-dev installiert sein). Nehmen Sie sich
die Zeit, die Onlinehilfe zu lesen, und wählen Sie sorgfältig die Optionen aus.
Wenn Sie Zweifel haben, ist es typischerweise besser, den zweifelhaften
Gerätetreiber mit in den Kernel zu integrieren (ein Gerätetreiber ist ein
Stück Software, das Hardware-Peripherie verwaltet, wie z.B. Ethernetkarten,
SCSI-Controller und so weiter). Seien Sie vorsichtig: andere Optionen, die nicht
zu einer bestimmten Hardwarekomponente gehören, sollten Sie auf dem Standardwert
belassen, wenn Sie sie nicht verstehen. Vergessen Sie nicht, den
Kernel module loader
unter Loadable module support
zu aktivieren (diese Option ist standardmäßig nicht aktiv). Tun Sie dies nicht, wird
Ihr Debian-System Probleme machen.
Säubern Sie den Kernelquellen-Baum und setzen Sie die
kernel-package-Parameter zurück. Dies erledigen Sie mit
make-kpkg clean.
Kompilieren Sie jetzt den Kernel mit:
fakeroot make-kpkg --revision=custom.1.0 kernel_image.
Die Versionsnummer 1.0
können Sie nach Belieben ändern. Sie wird nur
von Ihnen selbst verwendet, um Ihre verschiedenen Kernel zu verwalten.
Ebenso können Sie jedes andere Wort statt custom
verwenden (z.B. den
Host-Namen des Rechners). Die Kernelkompilierung könnte eine ganze Weile dauern,
abhängig von der Leistungsfähigkeit Ihres Rechners.
Wenn Sie PCMCIA-Support benötigen, müssen Sie ebenfalls das
pcmcia-source-Paket installieren. Entpacken Sie die
gzip-tar-Datei als root in das Verzeichnis /usr/src
(es ist wichtig, dass die Module dort gefunden werden, wo sie gesucht werden,
nämlich in /usr/src/modules). Führen Sie dann als root
make-kpkg modules_image aus.
Sobald die Kompilierung beendet ist, können Sie Ihren eigenen Kernel wie
ein Paket installieren. Tippen Sie als root dpkg -i
../kernel-image-&kernelversion;-subarchitecture_custom.1.0_&architecture;.deb
ein. Der Teil subarchitecture im Dateinamen ist eine
optionale Bezeichnung für die Unterarchitektur, wie
z.B. i586
,
abhängig davon, welche Kerneloptionen Sie gesetzt haben.
dpkg -i kernel-image... installiert den Kernel
zusammen mit ein paar anderen dazugehörigen Dateien. Zum Beispiel wird
die System.map korrekt installiert
(dies ist nützlich für die Fehlersuche bei Kernelproblemen) und
/boot/config-&kernelversion; wird installiert,
sie enthält Ihre aktuelle Konfiguration. Ihr neues
kernel-image-&kernelversion;-Paket ist ebenfalls
clever genug, automatisch eine Aktualisierung Ihres Bootloaders zu starten,
die es Ihnen erlaubt, den neuen Kernel zu booten, ohne den Bootloader manuell
neu konfigurieren zu müssen. Wenn Sie auch ein Modul-Paket erzeugt
haben, weil Sie z.B. PCMCIA benötigen, müssen Sie auch dieses Paket noch
installieren.
Jetzt ist es Zeit, einen Systemneustart zu machen: lesen Sie aufmerksam
alle Warnungen, die die vorherigen Schritte unter Umständen erzeugt haben,
und tippen Sie dann shutdown -r now ein.
Mehr Informationen über kernel-package enthält
die tolle Dokumentation in /usr/share/doc/kernel-package.