Was ist Linux?
Bash-Befehle 1
Bash-Befehle 2
DOS VS Linux
Der VI-Editor
LInux LOader
Kernel erzeugen
United Linux
ISDN-Gateway
VPN Einführung
NEU: Debian

Einen Linux-Kernel erzeugen

Einleitung:
Der Kernel ist der "Kern" eines Betriebssystems und beinhaltet alle für das Booten relevanten Treiber. Anders, als bei allen anderen Systemen, hat man im Unix die Möglichkeit einen "eigenen" Kernel zu generieren, der genau auf die individuellen Bedürfnissen zugeschnitten ist. Treiber für den CD-ROM-Brenner oder Soundkarte werden normalerweise als Modulen kompiliert. Das hat den Vorteil, dass der Betriebssystemkern sehr klein wird und so weniger Ressourcen beansprucht. Möchte man Musik hören, dann lädt man einfach das entsprechende Modul für die Soundkarte dynamisch in den Kernel. Natürlich hat man danach die Möglichkeit, die geladenen Modulen, die nicht mehr benötigt werden, zu entladen. Es hört sich vielleicht komplizierter an als es tatsächlich ist, doch eigentlich ist die Kompilation eines Kernels mit etwas Hintergrundwissens ein leichtes Spiel.

Kurzanleitung:
Die Quellcodes eines Kernels kann man auf diversen FTP-Servern beziehen (wie zum Beispiel bei SuSE www.suse.de), welche als kompriemierte Archiv-Dateien im TAR-Format vorliegen. Zunächst muss diese Datei ins Verzeichnis /usr/src verschoben werden. Wenn dort schon ein Verzeichnis namens "linux" vorhanden ist, müssen sie es mit dem Befehl

rm -r linux

restlos löschen. Danach entpacken sie das TAR-Archiv mit

tar xzvf

TAR-Archive können ganze Dateihierarchien abspeichern und werden desshalb vor allem fürs Backup eingesetzt. Mit tar xzvf erstellt der TAR-Befehl den ganzen gespeicherten Verzeichnisbaum her (Siehe auch tar und cpio). Jetzt müssten sie ein Subdirectory mit dem Namen linux im aktuellen Verzeichnis vorfinden. Bevor sie einen neuen Kernel generieren, müssen sie alle benötigten Treiber auswählen, die sie brauchen. Wechseln sie dazu ins Verzeichnis linux und geben, wenn sie sich in der graphischen Oberfläche befinden (GUI, X-Windows), in einem neuen Terminal den Befehl

make xconfig

ein. Es erscheint nun ein neues Fenster, in dem sie alle Optionen aktivieren können, die sie wollen. Ich empfehle ihnen nicht allzu viel auszuwählen, da sonst der Kernel zu gross wird. Wenn sie damit fertig sind, überprüfen sie mit

make dep

alle Abhängigkeiten und starten sie mit

make zImage (siehe: Wichtige Anmerkung)

die Kompilation des Kernels. Wie lange die Generierung dauert, hängt allein von ihrem System ab. Der Aufruf von make mit dem Parameter zImage erzeugt einen neuen Kern und legt diesen ins Verzeichnis /usr/src/linux/arch/i386/boot/ ab. Damit Linux beim Booten diesen Kern lädt, müssen sie ihn noch ins Verzeichnis /boot kopieren, ihn auf vmlinuz umbenennen und LILO aufrufen, damit er aktualisiert wird. Gewiss haben sie einige Komponente, wie etwa Filesysteme, in der Kernelkonfiguration als Module definiert. Damit sie diese benutzen können, müssen sie auch diese kompilieren und installieren:

make modules ; make modules_install

Detailanleitung:
Ich habe ihnen oben einen Möglichen Weg gezeigt, wie sie einen neuen Betriebssystemkern erzeugen können. Im folgendem habe ich die Installationsschritte mit weiteren Möglichkeiten aufgeführt:

  1. Kopieren von Kernelquellen ins /usr/src
  2. Verzeichnis linux löschen:
    rm -r linux
  3. tar xvzf
  4. cd
  5. make xconfig
    weitere Möglichkeiten sind make menuconfig (menügesteuert, ähnlich wie YAST) oder make config (textbasierend), die beide unter der normalen Shell ohne X-Windows funktionieren.
  6. make dep um Abhängigkeiten zu prüfen
  7. Evtl. make clean (Damit löschen sie alle während der letzten Kompilierung erzeugten Files.)
  8. make zImage Alternativ: make zlilo (Hier wird der Kernel erzeugt und dem Linux-Loader automatisch bekannt gemacht) oder make zdisk (erzeugt eine Bootdiskette)
    (siehe: Wichtige Anmerkung)
  9. Bei zImage müssen sie den komprimierten Kernel, der sich in /usr/src/linux/arch/i386/boot befindet, nach /boot kopieren:
    cp /usr/src/linux/arch/i386/boot/zImage /boot/vmlinuz
  10. ssbschreiben sie nun die alte System-Map mit der neu konfigurierten Version:
    cp /usr/src/linux/System.map /boot/System.map
  11. Nun muss man dem Linux-Loader den neuen Kernel bekannt machen. Geben sie dazu das Kommando lilo ein.
  12. Kompilation und Installation der Module:
    make modules; make modules_install

Anmerkung:
Sie können den Kernel auch mit einer Befehlszeile Kopilieren und installieren:
make dep; make clean; make zImage

Wichtige Anmerkung:
Sollte der Kernel zu gross werden (kommt öfters vor!), kann der Kernel mit der Option b compiliert werden.
Beispiele: make bzImage / make bzlilo / make bzdisk

Umgang mit Modulen:
  • insmod
    Mit dem Befehl insmod wird das angegebene Modul geladen. Das Modul wird in einem Unterverzeichnis von /lib/modules/ gesucht.
  • rmmod
    Entlädt das angegebene Modul. Dies ist natürlich nur dann möglich, wenn die entsprechende Funktionalität des Kernels nicht mehr verwendet wird. So ist es nicht möglich, das Modul isofs zu entladen, wenn noch eine CD gemountet ist.
  • depmod
    Dieser Befehl erzeugt eine Datei mit dem Namen modules.dep im Verzeichnis /lib/modules/, in der Abhängigkeit der einzelnen Module untereinander verzeichnet sind. Damit stellt man sicher, dass beim Laden eines Modules alle davon abhängige Module ebenfalls automatisch geladen werden. Ist das Starten des Kernel-Dämons in /etc/rc.config vorgesehen, wird die Datei mit den Modul-Abhängigkeiten beim Start des Systems automatisch generiert, sofern sie noch nicht existiert.
  • modprobe
    Laden bzw. Entladen eines Modules mit Berücksichtigung der Abhängigkeiten von von anderen Modulen. Dieser Befehl ist sehr mächtig und kann für eine Reihe weitere Zecken eingesetzt werden. Im Gegensatz zum Laden mittels insmod wertet modprobe die Datei /etc/conf.modules aus und sollte daher generell zum Laden von Modulen verwendet werden.
  • lsmod
    Zeigt an, welche Module gegenwärtig geladen sind und von wievielen anderen Modulen sie verwendet werden. Module, die vom Kernel-Dämon geladen wurden, sind durch ein nachfolgendes (autoclean) gekennzeichnet; das weist darauf hin, dass diese Module automatisch wieder entfernt weden, wenn sie längere Zeit nicht benutzt werden.
Autor: Vince / Datum: 1999-10-19 

signature of this request:
Man entdeckt keine neuen Erdteile, ohne den Mut zu haben, alte Küsten aus den Augen zu verlieren. (André Gide)