Kernel und Module
Kernel
Grundlegendes
- Der Kernel eines Betriebssystems bildet die hardwareabstrahierende Schicht
- Er stellt auf dieser Basis der aufsetzenden Software eine einheitliche Schnittstelle (API) zur Verfügung.
- Diese agiert unabhängig von der Rechnerarchitektur.
- Die Software kann so immer auf die Schnittstelle zugreifen und braucht die Hardware nicht genauer zu kennen.
- Linux ist dabei ein modularer monolithischer Kernel.
- Der Kernel ist so etwas wie ein Vermittler zwischen Anwendungsprogrammen und Hardware.
- Die Aufgaben sind Speicherverwaltung, Prozessverwaltung, Multitasking, Lastverteilung, Durchsetzung der Berechtigungen und Eingabe/Ausgabe-Operationen auf verschiedenen Geräten.
- Der Kernel wird beim Systemstart in den Speicher geladen und verbleibt dort während der ganzen Zeit.
- Der Kern selbst hat keine Anwendungsprogramme, Bibliotheken oder Systemsoftware.
Schaubild
- Die Anwendungsprogramme greifen nicht direkt auf die Hardware zu.
- Sie rufen Kernel System Calls auf und diese machen dann die wirklichen Aktionen.
- Der Kernel kann aber auch Aufrufe verweigern.
Gerätetreiber unter Linux
- Ein Gerätetreiber ist ein spezielles Stück Software, das ein Betriebssystem (wie Linux) mit einer Hardwarekomponente verbindet.
- Jeder Hardwarekomponente benötigt einen spezifischen Treiber, um korrekt zu funktionieren.
- Unter Linux sind viele dieser Treiber als Kernel-Module verfügbar, die dynamisch geladen und entladen werden können.
Module
Kernel-Module
- Ein Kernel-Modul ist ein Stück Code, das dynamisch in den Kernel eingefügt werden kann, um zusätzliche Funktionen bereitzustellen. Viele Gerätetreiber sind als Kernel-Module implementiert.
Fest im Kernel verankert
- Treiber ist Teil des Original Kernel Quellcode
- Das Modul(Treiber) wurde beim komipilieren fest in den Kernel verankert.
- Es lässt sich somit nicht mehr entladen.
- Anwendung gehärteter Kernel
- Wenn ich die Netzwerkkarten von meiner Produktionslinie kenne, brauche ich nur diese in den Kernel zu kompilieren.
Modul gehört zum Kernel und kann nachgeladen werden.
- Treiber ist Teil des Original Kernel Quellcode
- Das Modul wurde beim Kompilieren mit übersetzt.
- Es ist somit Nachladbar.
- Es kann direkt an den Kernel andocken und geht somit eine Symbiose mit dem Kernel ein.
- Geöhnliche und verbreitete Treiber sind normalerweise nachladbar.
Hersteller stellt Quellcode von einem Treiber zur Verfügung
- Treiber ist nicht Teil des Original Kernel Quellcode
- Man muss das Modul nun für den passenden Kernel übersetzen.
- Es gibt 2 Möglichkeiten
Treiber vom Hersteller selbst kompilieren (schlechter)
- Quellen des Treibers besorgen.
- Quellen des aktuellen Kernels installieren
- Diverse Tools wie make installieren.
- Modul gegen den aktuellen Kernel kompilieren
- Nachteil: Bei einem Kernelupdate geht das Spiel erneut los.
DKMS(besser)
- Quellen sind meist über das Paketmanagment erhältlich.
- DKMS übersetzt das Modul gegen den laufenden Kernel
- Am Schluss ist das Modul verfügbar.
- Vorteil: Bei einem Kernelupdate kompiliert DKMS das Modul automatisch.
Effekt
- Der Effekt ist bei beiden Verfahren derselbe.
- Wichtig: Kernel wird nicht neukompiliert.
- Er wird nur für die richtigen Andockpunkte im Quellcode benötigt.
Tools
Welche Module stellt der laufende Kernel zur Verfügung
- find /lib/modules/$(uname -r) -name *.ko
oder
- find /lib/modules/$(uname -r) -name *.ko.xz
Beispiel: Anzeigen geladener Kernel-Module
- lsmod
Beispiel: Laden eines Kernel-Moduls
- sudo modprobe modulname
Beispiel: Entfernen eines Kernel-Moduls
- sudo rmmod modulname
Gerätetreiber installieren
- Die genaue Methode zur Installation eines Gerätetreibers variiert je nach Treiber und Linux-Distribution.
- Oftmals werden Treiber über den Paketmanager der Distribution installiert.
- Manchmal müssen Treiber jedoch von der Herstellerseite heruntergeladen und manuell installiert werden.
Treiberprobleme beheben
Wenn eine Hardwarekomponente nicht korrekt funktioniert, kann es sein, dass der richtige Treiber nicht geladen ist oder Probleme aufweist. Tools wie dmesg und lspci können helfen, Treiberprobleme zu identifizieren und zu beheben.
Beispiel: Anzeigen von Kernel-Nachrichten mit dmesg
- dmesg
Beispiel: Anzeigen von PCI-Geräten mit lspci
- lspci



