Kernel-Modul
Vorlage:ÜA Ein Kernel-Modul (kurz LKM für englisch loadable kernel module) 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 bei unterschiedlichen 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 eine neuere Version in das laufende System einbindet.
Ü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 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.
Die auf einem Linux-System aktuell geladenen Kernel-Module kann man sich mit Hilfe des Befehls lsmod
anzeigen lassen.
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,[4] die nicht mehr im Kernel-Kontext laufen sondern im Benutzerraum (user space, siehe Ring).[5][6]
Einzelnachweise
- ↑ Kernelmodule › Wiki › ubuntuusers.de. Abgerufen am 23. Juni 2019.
- ↑ Kernelmodule › Wiki › ubuntuusers.de. Abgerufen am 23. Juni 2019.
- ↑ Kernel module - ArchWiki. Abgerufen am 23. Juni 2019.
- ↑ Deprecated Kernel Extensions and System Extension Alternatives. Apple, archiviert vom am 26. Februar 2020 (englisch).
- ↑ System Extensions and DriverKit. Apple, archiviert vom am 14. Oktober 2019 (englisch).
- ↑ 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.“.