Zum Inhalt springen

Kernel-Modul

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 5. März 2020 um 12:19 Uhr durch Y2kbug (Diskussion | Beiträge) (Details: Kernel-Update ohne Neustart: heißt bei Linux Livepatch. Formulierung korrigiert.). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Vorlage:ÜA Ein Kernel-Modul ist ein spezielles Software-Modul, das in den Kernel eines Betriebssystems geladen und wieder daraus entfernt werden kann.[1]

Kernel-Module werden häufig für Gerätetreiber verwendet, da eine große Auswahl der Module für die unterschiedlichsten Hardware-Komponenten mit dem Betriebssystem mitgeliefert oder für dieses entwickelt werden kann, aber nur die tatsächlich benötigten Treiber in den Speicher geladen werden müssen.

Kernel-Module gibt es vor allem bei unix-artigen Betriebssystemen, zum Beispiel Linux, BSD oder Solaris.

Details

Das Verfahren des dynamischen Hinzufügens von Kernel-Modulen wird z. B. dazu verwendet, um einen Standardkernel an die Hardware, auf der er ausgeführt wird, anzupassen. So kann der Treiber eines vorgefundenen Peripheriegeräts zur Laufzeit des Systemkerns geladen werden, während Treiber für nicht vorhandene Hardware ignoriert werden können und somit auch keinen Arbeitsspeicher belegen.

Ein weiterer Vorteil liegt darin, dass Erweiterungen für den Kernel integriert werden können, ohne dass das Betriebssystem neu gestartet werden muss. Denkbar wäre, dass man auf diese Weise einen als Kernel-Modul realisierten Treiber entfernt, um anschließend eine neuere Version in das laufende System einzubindet (entspricht der Funktion eines Livepatch).

Über Kernel-Module werden auch auf Treiber von Drittanbietern realisiert. Dies ist z. B. unter macOS über Kernel-Erweiterungen der Fall, aber auch unter Linux, wenn proprietäre Treiber verwendet werden.

Kernel-Module unter Linux

Obwohl der Linux-Kernel einen monolithischen Aufbau hat, besitzt er auch eine Schnittstelle für Module als Alternative dazu, die Komponenten bereits beim Übersetzen (Kompilieren) statisch in den Kernel zu integrieren.[2] Die Module werden auch englisch loadable kernel modules, kurz LKM, bezeichnet. In der Kernel-Konfiguration ausgewählten Module werden standardmäßig in /usr/lib/modules/kernel_release abgelegt[3] und verwenden die Dateinamenserweiterung .ko, was für kernel object steht. Bis Kernel-Version 2.4 war die Dateinamenserweiterung noch .o. In beiden Fällen handelt es sich um eine Objektdatei, also einer Datei, die Objektcode enthält.[4]

Die auf einem Linux-System aktuell geladenen Kernel-Module werden mit dem Befehls lsmod ausgegeben.

Kernelerweiterungen unter macOS

Unter macOS, ursprünglich ab 1999 als Mac OS X entwickelt, werden englisch Kernel Extensions bis Version 10.15 meist als Treiber für Hardware genutzt. Diese haben die Dateinamenserweiterung .kext und werden bei Bedarf vom Darwin-Kernel XNU als Kernel-Module geladen. Bereits ab Version 10.13 wurden diese jedoch eingeschränkt, müssen vom Benutzer erst bestätigt werden bevor sie geladen werden, und benötigen ab Version 10.14.5 eine gültige Signatur als Beglaubigung von Apple. Mit macOS Catalina (Version 10.15) wurden die Kernel Extensions durch System Extensions ersetzt,[5] die nicht mehr im Kernel-Kontext laufen sondern im Benutzerraum (user space, siehe Ring).[6][7]

Einzelnachweise

  1. Kernelmodule › Wiki › ubuntuusers.de. Abgerufen am 23. Juni 2019.
  2. Kernelmodule › Wiki › ubuntuusers.de. Abgerufen am 23. Juni 2019.
  3. Kernel module - ArchWiki. Abgerufen am 23. Juni 2019.
  4. Bryan Henderson: Linux Loadable Kernel Module HOWTO. 24. September 2006, abgerufen am 4. März 2020 (englisch).
  5. Deprecated Kernel Extensions and System Extension Alternatives. Apple, archiviert vom Original am 26. Februar 2020; (englisch).
  6. System Extensions and DriverKit. Apple, archiviert vom Original am 14. Oktober 2019; (englisch).
  7. Leo Becker: Kernel Extensions in macOS: Apple läutet Ende ein. In: Heise online. 10. Februar 2020. Abgerufen am 4. März 2020.; Zitat: „Die neuen "System Extensions" sollen schrittweise klassische Kernel-Erweiterungen ablösen. Sie können nicht mehr so tief in das System eingreifen: Statt im Kernelspace laufen die System Extensions im Userspace.“.