Der Linux-Kernel ist der urspünglich von Linus Torvalds programmierte Kern und damit das Herzstück des Linuxsystem. Im allgemeinen Sprachgebrauch ist der Linux-Kernel auch der Namensgeber, da jedoch die ursprünglichen Zusatzprogramme von GNU programmiert wurden, besteht Richard M. Stallmann (der Gründer der FSF) immer auf der Bezeichnung GNU/Linux.
Der Linuxkernel kann statisch (monolitisch) aufgebaut sein, d.h. alle benötigten Module sind fest einkompiliert, weit häufiger ist er jedoch modular gehalten, was die Möglichkeit bietet zur Laufzeit Module (und Funktionen) nachzuladen und somit den Kernel klein zu halten. Fast alle Distributionen setzten heute modulare Kernel ein.
Bei den Kernelversionen hat die mittlere Nummer eine besondere Aussagekraft: gerade Nummern (2.4.x, 2.6.x) sind stabile Anwenderkernel, ungerade (2.1.x, 2.3.x) instabile Entwicklerkernel. Mit der Kernelreihe 2.6 wird dieses Schema aufgeweicht. Sie wird vom maintainer (=Projektbetreuer und Hauptverantwortlicher) Andrew Morton betreut.
In der aktuellen 2.6.x-Version gibt es vier Hauptbäume:
Einen eigenen Kernel kompilieren macht Sinn, wenn man sich sein System exakt an seine Bedürfnisse anpassen möchte. Also spezielle Optionen braucht oder einige Teile rauswerfen will (die im Standardkernel der jeweiligen Distribution enthalten sind). Außerdem ist fast immer nicht der neueste Kernel dabei, so dass man für manche Hardware oder zum testen auf die neueste Version angewiesen ist. Auch zu Lern- und Verständniszwecken sollte man so etwas mal versucht/gemacht haben.
Bei Sicherheitslücken oder veränderter Hardware ist allerdings schnell eine Anpassung (Neukompilieren) erforderlich. Da muss jeder selber entscheiden, ob er sich die Mühe machen will oder mit dem vorkompilierten Standardkernel zufrieden ist.
Die Kernelkonfiguration geht grundsätzlich auf drei verschiedene Arten:
make config
(geht im Textmodus alle Optionen durch, für „hardcore-Linuxer“)make menuconfig
(Menu im Textmodus mit Navigation über Tastatur)make xconfig
(grafische Konfigurationsoberfläche).Die Schritte zum Kernelübersetzen:
make config
, make menuconfig
oder make xconfig
(siehe oben)Nun splitet sich die weitere Vorgehensweise nach dem Bootmanager auf:
/boot/grub/menu.lst
vornehmen./lib/modules/KERNELVERSION/modules.dep
. Der Aufruf ist bei einem neuen Kernel oder einzelner Module nötig.
Das Laden einzelner Module kann man verhindern indem man einen Eintrag in der Datei /etc/modprobe.d/blacklist
anlegt:
blacklist MODULNAME
Beim Systemstart zu ladene Module werden bis Kernel 2.4 ist die Konfigurationsdatei für die Module
/etc/modules.conf
(oder auch /etc/conf.modules
).
Seit Kernel 2.6 ist es grundsätzlich die Datei /etc/modprobe.conf
oder die Dateien unterhalb von /etc/modprobe.d/
. Allerdings wird die Datei /etc/modules
auch noch unter Ubuntu ausgewertet. Manche Distributionen (bisher Suse, Feodora und in Zukunft evtl. Redhat) wollen eigene Änderungen in der Datei modprobe.conf.local
abgelegt wissen.
Wenn es /etc/modprobe.conf
gibt, dann wird alles unter /etc/modprobe.d/
ignoriert. Darum steht in der
Regel am Ende von /etc/modprobe.conf
die Zeile „include /etc/modprobe.d“.
Fallweise:
modprobe MODULNAME
Bereits geladene Kernelmodule lassen sich mit
rmmod MODULNAME
entladen.
Viele Dienst erlassen sich auf eine korrekt laufende (syncronisierte) Zeit. Das ist z. B. in vollvirtualisierten Gästen ein großes Problem.
Auch in virtualisierten KVM-Gästen kann es zu Meldung wie diese kommen:
Clocksource tsc unstable (delta = -4398046495868 ns)
Für die Beurteilung ob das ein Problem darstellt oder nicht ist es wichtig die aktuell verwendete „clocksource“ anzuzeigen:
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
Die Antwort ist in diesem Fall kvm-clock (in den physikalischen Rechner oft „tsc“). Somit wäre die o. g. für den Gast unwichtig.
Die Liste der unterstützten Quellen bekomme ich wie folgt.
cat /sys/devices/system/clocksource/clocksource0/available_clocksource
kvm-clock hpet acpi_pm jiffies tsc
Die verwendete Quelle kann mittles Boot-Parameter geändert werden, Beispiel: clocksource=acpi_pm