====== Kernel ======
Der [[wpde>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 [[http://www.fsf.org|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**:
- main 2.6.x (Linus Torvalds Vanilla-Kernel)
- 2.6.x.y-stable (sehr stabil, Fokus auf Bugfixes)
- 2.6.x-git (experimenteller, täglicher Snapshot von Linus Torvalds Kernel-tree)
- 2.6.x-mm (neue und ungeteste Änderungen, diese wandern später in Linus Torvalds Kernel-tree ; Betreuer Andrew Morton).
{{:linux:linux_kernel_stuktur.png|Linux Kernel Schaubilnd; Quelle: Wikipedia http://de.wikipedia.org/w/index.php?title=Datei:Linux_Kernel_Stuktur.svg&filetimestamp=20090108084244}}
===== Kernelkompililation =====
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 [[linux:distributionen und live-cds|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**:
- Kernelsourcen auspacken
- ''make config'', ''make menuconfig''oder ''make xconfig'' (siehe oben)
- make dep
- make bzimage (übersetzt den Kernel)
- make modules (übersetzt die Module)
Nun splitet sich die weitere Vorgehensweise nach dem **[[bootmanager und bootprozess|Bootmanager]]** auf:
- Grub: den Kernel per Hand nach /boot kopieren + Eintrag in ''/boot/grub/menu.lst'' vornehmen.
- lilo:
- make bzlilo (installiert den Kernel für lilo in /boot zusammen mit wichtigen Systemdateien)
- make modules_install (installiert die Module)
===== Links =====
* [[http://www.ibm.com/developerworks/linux/library/l-linux-kernel/?S_TACT=105AGX59&S_CMP=GR&ca=dgr-lnxw07LKernalAnatomy|Anatomy of the Linux kernel]]
* [[http://kernelnewbies.org/|KernelNewbies]]
* [[http://kernelnewbies.org/LinuxChanges|LinuxChanges]]
* [[http://www.linuxforen.de/forums/showthread.php?t=161878|Kernel (2.6) Konfigurations-Howto]]
* [[http://www.freesoftwaremagazine.com/articles/drivers_linux|Writing device drivers in Linux: A brief tutorial]]
* [[http://www.heise.de/newsticker/Linux-uebers-Internet-mit-boot-kernel-org--/meldung/145751|Linux übers Internet mit boot.kernel.org]]
* [[http://www.heise.de/newsticker/meldung/Anteil-der-Freizeit-Kernel-Hacker-sinkt-1500629.html|Anteil der Freizeit-Kernel-Hacker sinkt]]
==== Debian ====
* [[https://www.adminlife.net/howtos/linux-kernel-backen-the-debian-way/|Linux Kernel backen – the Debian Way]]
* [[http://www.linuxtoday.com/news_story.php3?ltsn=2006-12-22-011-26-OS-DB-KN|HowtoForge: How To Compile A Kernel--The Debian (Sarge) Way]]
* [[http://www.pengutronix.de/software/linux-rt/debian_de.html|Realtime Linux für Debian]]
==== Ubuntu ====
* [[http://www.howtoforge.com/kernel_compilation_ubuntu|How To Compile A Kernel - The Ubuntu Way]]
* [[http://reconstructor.aperantis.com/cgi-bin/moin.cgi/CustomKernelHowto|Custom Kernel HowTo]]
===== Kernelmodule verwalten =====
* **lsmod** listet aktuell geladene Module auf
* **insmod** / **rmmod:** Module laden und entfernen
* **modprobe** lädt Module indem es auf zusätzliche Abhängigkeiten zu anderen Module prüft und diese ggf. ebenfalls lädt
* **rmmod** MODULNAME entlädt Module
* **depmod** baut die Liste der Abhängigkeiten auf. Diese stehen in einer Datei unter ''/lib/modules/KERNELVERSION/modules.dep''. Der Aufruf ist bei einem neuen Kernel oder einzelner Module nötig.
* **modinfo** MODULNAME sollte Informationen über ein Modul ausgeben
:!: Das **Laden einzelner Module** kann man **verhindern** indem man einen Eintrag in der Datei ''/etc/modprobe.d/blacklist'' anlegt:
blacklist MODULNAME
==== Kernelmodule laden ====
**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:Ubuntu]] ausgewertet. Manche Distributionen (bisher [[suse: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
==== Kernelmodule entladen ====
Bereits geladene Kernelmodule lassen sich mit
rmmod MODULNAME
entladen.
===== Clocksource =====
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: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''