|
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:
- Kopieren von Kernelquellen ins /usr/src
- Verzeichnis linux löschen:
rm -r linux
- tar xvzf
- cd
- 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.
- make dep um Abhängigkeiten zu prüfen
- Evtl. make clean (Damit löschen sie alle
während der letzten Kompilierung erzeugten Files.)
- 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)
- 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
- ssbschreiben sie nun die alte System-Map mit
der neu konfigurierten Version:
cp /usr/src/linux/System.map /boot/System.map
- Nun muss man dem Linux-Loader den neuen Kernel
bekannt machen. Geben sie dazu das Kommando lilo ein.
- 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.
|
|