Navigationsleiste  |    Direktzugriff   |    Kurs  |     Home  


Linux-Kurs: Kernel

Der Kernel ist das Herz von Linux und kümmert sich beispielsweise um die Hardware. Normalerweise braucht der Anwender ihn nicht zu ändern, aber manchmal doch. Und wie das geht erläutert der folgende Teil des Linux-Kurses.

Der Kernel ist das Herz eines Betriebssystems, er regelt den Zugriff auf die Hardware, verwaltet den Speicher und die Prozesse, kurz ohne ihn geht gar nichts. Also warum zum Pinguin solltest du ihn ändern ?
Der wohl häufigste Grund ist der: Du hast die brandneue HyperDuperNet15, aber dein oller Kernel 2.6.2 kennt diese Karte nicht und du hast kein Netzwerk. Aber der neue Kernel 2.6.18 kennt diese Karte und soll damit ordentlich laufen.
Es könnte aber auch sein das du einem extrem sicheren und kleinen Kernel haben willst,
oder du willst mal richtig cool sein und einen eigenen Kernel bauen.

Wichtig ist nur folgendes: Lösche dir niemals den Kernel der gerade stabil arbeitet !!

Achtung !!!!
Mittlerweile ist es fast nicht mehr nötig einen Kernel zu kompilieren, erschwerend kommt noch hinzu das fast jede Distributionen einen anderen Weg geht.
Ich beschreibe hier den "klassischen" Weg einen Kernel zu kompilieren, bitte schaue vorher auf jeden Fall in deine Dokumentation (z.B. für Debian im der Debian-Referenz Kapitel 7 )


Kernel saugen

Der erste Schritt ist es natürlich den Kernel herunterzuladen. Dazu solltest du immer den aktuellen Kernel nehmen, aber warte nach dem Erscheinen eines neuen Kernels erstmal eine Woche (außer du möchtest den "Neuen" mal richtig testen), denn manchmal gibt es auch im Linux-Kernel Fehler.
Aber was ist der aktuelle ??
Kein Problem, dafür gibt es kernel.org [1], dort findest du alle nötigen Informationen.
Dann lädst du den Kernel runter und legst du Kernel nach /usr/src.

Nun wird der Kernel entpackt, wenn du ihn tar.gz-File heruntergeladen hast:
[root]/usr/src# tar -xvzf linux-2.4.18.tar.gz

wenn du ihn tar.bz2-File heruntergeladen hast:
[root]/ausr/src# bunzip2 linux-2.4.18.tar.bz2 && tar -xvzf linux-2.4.18.tar


Damit liegt der Kernel nun unter /ausr/src/linux, das ist aber nicht so schön. Besser ist den Kernel in /usr/src/linux-2.4.18 zu legen. Leider suchen einige Patche/Programme die Kernelquellen aber nur unter /usr/src/linux/; also müssen wir einen Link anlegen der von /usr/src/linux nach /usr/src/linux-2.4.18 zeigt:
[root]/usr/src# mv linux linux-2.4.18     #linux nach linux-2.4.18 verschieben
[root]/usr/src# ln -s linux-2.4.18 linux  #link nach linux-2.4.18 anlegen




Patch

Neue Dinge oder Treiber finden meist nicht direkt ihren Weg in den Kernel, sondern liegen meist am Anfang nur als Patch vor. Wenn diese Patche in Ordnung sind und stabil laufen, läßt Linus sie in seinen Kernel.
Und was macht man nun mit so einem Patch ?
Zuerst mal ist es ganz wichtig das der Patch genau zu dem Kernel paßt, danach ist es Pflicht die Doku zum Patch (mindestens INSTALL) zu lesen.
Wenn du keinen Patch installieren willst, kannst du zum nächsten Absatz springen.

Als kleines Beispiel nehme ich mal den XFS Patch:
[root]/usr/src# patch -b -p0 < xfs-2.4.18-all-i386

Die Option -b sichert die original Dateien als Backup, überschreibt also nicht die Originaldatei, sondern verschiebt sie.



Kernel konfigurieren

Nun kommen wir zum interessantesten Teil: Den Kernel konfigurieren. Hierbei legst du fest wie dein Kernel sein soll und was er kann (und wie groß er ist).
Dazu gibt drei verschiedene Wege, aber zuerst geht du ins Verzeichnis /usr/src/linux :

  1. [root]/usr/src/linux# make config
    Danach werden dir Unmengen von Fragen gestellt, und danach dein Kernel erstellt. Diese Methode ist die schlechteste und nur im absoluten Notfall zu gebrauchen, also schnell weiter.

  2. [root]/usr/src/linux# make menuconfig
    Hierbei erscheint in der Text-Konsole ein einfaches grafisches Menü mit dem du alles einstellst.
    Das Ganze sieht so aus:



  3. [root]/usr/src/linux# make xconfig
    Nun erscheint unter X ein nettes grafisches Fenster und du kannst dich durchklicken.
    Diese Sache ist die übersichtlichste, braucht aber ein laufendes X-System (dieses muß nicht auf dem lokalen Rechner laufen siehe Minitipps: X-Display auf anderen Rechner umleiten ).
    Und so sieht es unter X aus:


Bevor wir nun loslegen erst noch ein kleiner Tipp:
Wenn du deinem Kernel eine eigenen Namen geben willst (was sehr zum empfehlen ist, besonders wenn du spezielle Patches einbindest) mußt du nur eine Zeile in der Datei Makefile ändern:
EXTRAVERSION = mu-1

Damit taufst du deinen Kernel auf den Namen 2.4.18mu-1 .

Und nun geht es endlich mal richtig los:
Konfigurieren wir den Kernel. Ich empfehle dir make xconfig.
Außerdem ist es hilfreich zu wissen welche Komponenten in deinem Rechner stecken, im Zweifelsfall Karte ausbauen und auf den Chip gucken (die Nichttechniker finden am besten heraus wie ihre Karte genau heißt: Rechnung, Anleitung, Meldung beim Rechnerstart).

Damit du nicht ganz verloren im Dschungel der Kernel-Parameter/Funktionen stehst, gehen wir nun die wichtigsten Parameter zusammen durch.
Wenn du einmal weißt wie es geht, kommt du sicher mit den anderen Parameter klar. Jede Box stellt ein Menü dar, naja probiers einfach aus:

Code maturity level options --->



Nun solltest du in etwa folgendes sehen:



Zur Erklärung:
Mit "y" fügst du diese Funktion dem Kernel fest zu, direkt nach dem Booten hat der Kernel diese Funktion.

In der nächsten Spalte steht hier ein "-", wenn dort aber ein "m" steht (kommt gleich noch), fügst du diese Funktion als Modul hinzu. Das bedeutet diese Funktion ist nicht fest im Kernel eingebaut, sondern wird bei Bedarf vom Kernel automatisch geladen.
Achtung !!
Alle Dinge die du beim Booten deines Systems brauchst, dürfen KEIN Modul sein !!
Wie soll der Kernel das Modul zum Betrieb des SCSI-Adapters von der SCSI-Platte laden wenn er keinen Treiber dafür hat (Henne-Ei-Problem) ??

Mit "n" entfernst du logischerweise diese Funktion aus deinem Kernel.

Der Button "Help" enthält eine englische Hilfe zu der Funktion. Dort steht auch meist eine Empfehlung ob du das brauchst oder nicht.

In diesem Menü siehst du den Parameter Prompt for development and/or incomplete code/drivers
Wenn du diesen aktivierst (also "y") werden in den nächsten Menüs auch die Parameter/Funktionen angezeigt, die die Kernel-Entwickler als experimentell oder noch nicht stabil genug ansehen. Am besten deaktivierst du diesen Punkt, wenn du die gesuchte Funktion nicht findest, aktivierst du den Punkt und suchst noch mal. Unter xconfig sind diese Funktionen/Pararmeter heller dargestellt.
Ich gehe hier aber mal davon aus das der Button nicht aktiviert ist.

Ein Klick auf "Main Menu" und zum nächsten Punkt:

Processor type and features --->
Hier stellst du deinen Prozessor ein

     Processor family
     Den richtigen Prozessor eintragen, sonst läufst dein Kernel nicht. Im Zweifel auf Intel/AMD Systemen den 386er nehmen.

     Symmetric multi-processing support
     Wenn du nicht gerade mehrere Prozessoren im Rechner hast -> "n"

Parallel port support --->
     Parallel port support
     PC-style hardware
     Wenn du einen Drucker oder etwas anderes am Parallel Port hängen hast -> "y" (am besten immer)

Networking options --->
     Network packet filtering (replaces ipchains)
     Wenn du dir eine Firewall bauen willst mußt du mindestens diesen Punkt aktivieren


ATA/IDE/MFM/RLL support --->
      IDE, ATA and ATAPI Block devices --->
           SCSI emulation support
           Für ATAPI-Brenner brauchst du den SCSI-Emulation Support (cdburn braucht SCSI-Brenner)
           
         Generic PCI IDE chipset support PROMISE PDC202{46|62|65|67|68} support

           Wenn du einen der beliebten Promise IDE-Controller hast, solltest du hier "y" angeben

SCSI support --->
     SCSI low-level drivers --->
      Wenn du einen SCSI-Controller hast, solltest du hier den Richtigen auswählen. Hast du keinen, deaktiviere das SCSI-Zeug.


Network device support --->
     Ethernet (10 or 100Mbit) --->
     Wenn du eine Netzwerkkarte hast, wähle hier deine aus. Ansonsten lass es weg.


ISDN subsystem --->
     ISDN support
     Passive ISDN cards --->
     Active ISDN cards --->

     Nach den SCSI und Netzwerkkarten kommen nun die ISDN-Controller ....


Input core support --->
     Hinter diesem Punkt ist die USB-Tastatur und Mouse versteckt. Am besten immer mit reinnehmen, macht dann keine Probleme mit USB.


Character devices --->
     Parallel printer support
     Hier steht der zweite Teil für den Parallelportdrucker.


File systems --->
     DOS FAT fs support
     MSDOS fs support
     VFAT (Windows-95) fs support
     Microsoft Joliet CDROM extensions
     NTFS file system support (read only)

      Diese Punkte solltest du alle aktivieren wenn du auf Windows-Dateisysteme oder CDs zugreifen willst

Network File Systems --->
     SMB file system support (to mount Windows shares etc.)

      Wenn du Windows-Freigaben mounten willst, aktiviere diesen Punkt.

     NCP file system support (to mount NetWare volumes)
     Wer noch einen Novellserver hat, braucht das NCP. Der Rest nicht :-)

Native Language Support --->
     Codepage 437 (United States, Canada) (NEW)
     Codepage 850 (Europe) (NEW)

     Diese Funktionen können dir Ärger mit DOS/Windows Dateiname ersparen (Umlaute,....)


Console drivers --->
     Frame-buffer support --->

       Mit Hilfe des Framebuffers kannst du höhere Auflösungen in der Konsole erreichen (und in der linken oberen Ecke erscheint ein Tux).
       Wenn deine Grafikkarte hier bei steht, nimm sie; ansonsten die VESA VGA graphics console (Nur sichtbar bei "Prompt for development and/or incomplete code/drivers")


Sound --->
Ist wohl klar oder? Wenn deine Karte dabei ist, anklicken


USB support --->
Hier kommen die USB-Geräte an die Reihe, am besten alles notwendige als Modul.


So das waren die wichtigsten Parameter/Funktionen, damit sollte dein Kernel schon mal alles Wichtige unterstützen. Spezielle Treiber oder Dinge lassen sicht meist nur durch suchen finden.

Gut, nun solltest du deine Konfiguration erst noch unter einem anderen Namen speichern (Save Configuration to file), so was in der Art "kernelconfig_2.4.18-mu-1" nehme ich immer. Die Nummer erhöhst du einfach mit jedem Kernel-Versuch.

So nun verlassen wir das Menü (Save und Exit, ja wir wollen speichern) und bauen den Kernel.


Kernel bauen (oder besser kompilieren)

Das ist ganz einfach, du gibst folgendes ein:
[root]/usr/src/linux# make dep && make clean && make bzImage

Damit wird der neue Kernel gebaut, das kann je nach Rechenleistung ein gute Weile dauern .......
Jetzt fehlen noch die Module, also bauen wir die auch noch (das geht schneller):
[root]/usr/src/linux# make modules && make modules_install

Die Module findest du nach der Installation unter /lib/modules/2.4.18mu-1 .
Gut die Module sind da, aber wo ist der Kernel ??
Auf einem Intel/AMD-System findest du ihn unter /usr/src/linux/arch/i386/boot/bzImage. Da wir ihn aber dort mit dem Namen nicht brauchen können, wird er umkopiert:
[root]/usr/src/linux# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.18mu-1

Jetzt kommt noch eine kleine Hürde:
Dein Bootmanager muß wissen wo der neue Kernel liegt. Nochmal zur Erinnerung: Den alten Kernel bloß nicht löschen !!

Wenn du den lilo verwendest, trägst du in deine lilo.conf (meist /etc/lilo.conf) folgendes zusätzlich ein:
image=/boot/vmlinuz-2.4.18mu-1
label=Neuer Kernel 2.4.18mu-1
root=/dev/hda5

Das kannst du so nicht übernehmen, sondern muß angepasst werden. Siehe die einfach die anderen (alten) Einträge mal an.
Jetzt mußt du umbedingt noch den lilo aufrufen:
[root]/usr/src/linux# lilo


Benutzt du den grub, so trage folgendes in deine menu.lst (meist /boot/grub/menu.lst) ein:
title Neuer Kernel (2.4.18mu-1) 
kernel (hd0,4)/boot/vmlinuz-2.4.18mu-1 root=/dev/hda5 


Neustart

Jetzt wird es wirklich spannend. Starte deinen Rechner neu und boote deinen Kernel......................................

Ich hoffe mal es hat geklappt, wenn nicht, stimmt wahrscheinlich der Prozessor-Typ oder so was in der Art nicht.
Kein Problem starte mit dem alten Kernel und konfiguriere/baue den Kernel neu.

Damit auch siehst das dein Kernel wirklich der Laufende ist, gebe man das hier ein:
[root]/# uname -rs

Super, dein Kernel läuft !!!
Wahrscheinlich wirdst du bald merken, das was fehlt (passiert mir immer), also noch mal konfigurieren und bauen :-))





Software installieren    Inhalt    Benutzer, Gruppen

Erstellt: 2002-03-09 Autor: Markus Ungermann (markus@tuxhausen.de)
Letztes Update: 2007-10-18     URL: http://www.tuxhausen.de/kurs_kernel.html