Kernel und Module: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „=Kernel= ==Grundlegendes== *Der Kernel eines Betriebssystems bildet die hardwareabstrahierende Schicht *Er stellt auf dieser Basis der aufsetzenden Software ei…“
 
Zeile 19: Zeile 19:
*Er wird geladen und bildet eine Einheit mit dem Kernel.
*Er wird geladen und bildet eine Einheit mit dem Kernel.
{{#drawio:kernel-und-module}}
{{#drawio:kernel-und-module}}
== 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.
=== 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.
=Möglichkeiten=
==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.
{{#drawio:kernel-und-module-1}}
==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.
{{#drawio:kernel-und-module}}
==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.
{{#drawio:kernel-und-module-2}}
==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

Version vom 17. Oktober 2026, 11:59 Uhr

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.
kernel-space

Kernel und Module

  • Ein Kernel Modul ist mit einem Treiber vergleichbar.
  • Er wird geladen und bildet eine Einheit mit dem Kernel.
kernel-und-module

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.

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.

Möglichkeiten

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.
kernel-und-module-1

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.
kernel-und-module

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.
kernel-und-module-2

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