Als Kernel-Modul, Kernel-Erweiterungsmodul, oder Kernel-Erweiterung (englisch kernel module, kernel extension module, kernel extension) wird eine ergänzende Software­einheit bezeichnet, die ein laufender Kernel (Betriebssystem) während der Laufzeit und ohne Neustart laden kann. Kernel-Module erweitern die Fähigkeiten des Kernels, etwa indem Treiber, Dateisysteme, Systemaufrufe und andere Schnittstellen ergänzt werden, die der Kernel zunächst nicht umfasst.[1][2][3][4]

Das Laden kann beim Initialisieren des Systems erfolgen oder auch erst dann wenn tatsächlicher Bedarf besteht – beim Anschließen eines Gerätes oder wenn bestimmte Funktionen aufgerufen werden – und wieder entladen, sobald es nicht mehr benötigt wird. Das wird als dynamisches Laden (englisch dynamic load) bezeichnet.

Nutzen

Bearbeiten

Die Möglichkeit, die Kernel-Fähigkeiten zu erweitern, reduziert die Notwendigkeit, den Kernel anpassen und neu kompilieren zu müssen und reduziert zudem sonst notwendige Neustarts.

Moderne Betriebssysteme sollen in der Regel auf und mit unterschiedlichen Computer- und Peripherie-Geräten funktionieren und liefern dementsprechend Treiber für unterschiedliche Komponenten von Computern, Erweiterungskarten und Peripheriegeräte mit. Kernel-Module ermöglichen es, dass nur die benötigten Treiber für die tatsächlich vorhandene Hardware in den Arbeitsspeicher geladen werden und deren Funktionen nicht statisch im Kernel mitgeliefert werden muss. Die Umsetzung als zuladbares Erweiterungsmodul macht es außerdem möglich, dass zusätzliche Funktionserweiterungen von Drittanbietern genutzt werden können, z. B. als Gerätetreiber für deren Hardware oder ein weiteres Dateisystem, das von unabhängigen Entwicklern bereitgestellt wird.

Durch Plug & Play werden die entsprechenden Kernel-Module normalerweise automatisch vom Kernel angefordert, wenn die entsprechende Hardware gefunden wurde. Dazu registriert das Modul in einer vom Kernel verwalteten Liste alle Geräte, für die es zuständig ist, sodass der Kernel es findet und laden kann, wenn es benötigt wird. Bei sehr alten Geräten (z. B. ISA-Erweiterungskarten) oder wenn dies aus anderen Gründen nicht automatisch möglich ist, kann ein Erweiterungsmodul auch per Startkonfiguration oder mittels Programmen zur Erkennung (z. B. der Hardware, oder auch eines benötigten Dateisystems) abermals automatisch geladen werden, oder aber das Laden wird vom Anwender selbst angestoßen. Als Kernel-Modul kann ein Treiber zudem im laufenden Betrieb aktualisiert werden, indem es zuerst entladen und danach dessen neuere Version wieder geladen wird.

Kernel-Module bei Linux-Distributionen

Bearbeiten

Obwohl Linux ein monolithischer Kernel ist, umfasst er auch eine Schnittstelle, um zuladbare Kernel-Module hinzuladen zu können (englisch loadable kernel modules, kurz LKM). Kernel-Module sind Dateien, die Objektcode enthalten (Objektdateien). Sie werden üblicherweise unter /usr/lib/modules/$(uname -r)/ abgelegt und tragen die Dateinamenserweiterung .ko (englisch kernel object; bis Kernel-Version 2.4 war .o die Dateinamenserweiterung). Geladene Kernel-Module können u. a. mit dem Befehl lsmod aufgelistet werden.[1][4][2]

Kernel-Module bei FreeBSD

Bearbeiten

Mit FreeBSD 3.0 wurde eine sogenannte dynamic kernel linker facility eingeführt (kurz: kld; etwa ‚dynamische Kernelverknüpfungseinrichtung‘), die die bisherige LKM facility ablöste. Erweiterungen liegen hier im Verzeichnis /boot/kernel/. Die wichtigsten Befehle diesbezüglich sind kldload(8), kldunload(8) und kldstat(8).

Kernel-Erweiterungen bei macOS, iOS & Co.

Bearbeiten

Eine Kernel-Erweiterung (englisch kernel extensions) für XNU, den Kernel von Darwin, die Basis von macOS und iOS sowie Apples anderen Betriebssystemen, wird bei Bedarf geladen. Sie liegen im Verzeichnis /System/Library/Extensions/ und haben .kext als Dateinamenserweiterung.

Aus Sicherheitsgründen wurde diese Möglichkeit für Drittanbieter verworfen und gänzlich ersetzt. Während eine Kernel-Erweiterung im Kernelmodus läuft, laufen die mit macOS Catalina 10.15 eingeführten System-Erweiterungen (englisch system extensions) im Benutzermodus und haben so beispielsweise keinen direkten Zugriff auf Hardware.[5][6][7]

Einzelnachweise

Bearbeiten
  1. a b Kernelmodule. In: Wiki von ubuntuusers.de. Abgerufen am 6. März 2020.
  2. a b Kernelmodule. In: Wiki von archlinux.de. Abgerufen am 6. März 2020.
  3. Alessandro Rubini, Jonathan Corbet: Module erstellen und starten. Kapitel 2. In: Linux-Gerätetreiber, 2. Auflage, April 2002. O'Reilly, archiviert vom Original (nicht mehr online verfügbar) am 25. August 2016; abgerufen am 6. März 2020.
  4. a b Bryan Henderson: Linux Loadable Kernel Module HOWTO. 24. September 2006, abgerufen am 6. 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.“.

📚 Artikel Terkait di Wikipedia

Filesystem in Userspace

(Filesystem in Userspace) ist ein Kernel-Modul für Unix-Systeme, das es ermöglicht, Dateisystem-Treiber aus dem Kernel-Mode in den User-Mode zu verlagern

Linux

Linux-Kernel und wesentlich auf GNU-Software basieren. Die weite, auch kommerzielle Verbreitung wurde ab 1992 durch die Lizenzierung des Linux-Kernels unter

Linux (Kernel)

bewusste Entscheidung. Linux ist ein monolithischer Kernel. Die Treiber im Kernel und die Kernel-Module laufen im privilegierten Modus (x86: Ring 0), haben

OrangeFS

(Cluster-Dateisystem), das seit Mai 2016 (ab Version 4.6) als Kernel-Modul ein Teil des Linux-Kernels ist. Es geht auf das Parallel Virtual File System zurück

FTPFS

Protocol (FTP) basiert. FTPFS wurde ursprünglich als eigenständiges Linux-Kernel-Modul entwickelt, später aber in die LUFS-Suite integriert. LUFS wurde von

Kernel-based Virtual Machine

x86-Plattform entwickelt und besteht für diese aus dem Kernel-Modul kvm.ko sowie aus den hardwarespezifischen Modulen kvm-intel.ko (für Intel-Prozessoren) oder kvm-amd

Monolithischer Kernel

erkannt und sind ihnen durch das Auslagern von Funktionalitäten in Kernel-Module begegnet. Durch die intensive Verwendung von Kernelmodulen, auch für

Dynamic Kernel Module Support

Dynamic Kernel Module Support, kurz DKMS, ist ein Framework für den Betriebssystem-Kernel Linux. Das 2003 von Dell entwickelte Programmiergerüst überwacht