„Kernel-Modul“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
Dk1909 (Diskussion | Beiträge) K Auszeichnungsfehler korrigiert |
K Form |
||
Zeile 15: | Zeile 15: | ||
== Kernel-Module bei Linux-Distributionen == |
== Kernel-Module bei Linux-Distributionen == |
||
Obwohl [[Linux (Kernel)|Linux]] ein [[monolithischer Kernel]] ist, umfasst er auch eine Schnittstelle, um zuladbare Kernel-Module hinzuladen zu können ({{enS|loadable kernel modules}}, kurz ''LKM''). Kernel-Module sind [[Datei]]en, die [[Objektcode]] enthalten (Objektdateien). Sie werden üblicherweise unter <code>/usr/lib/modules/$(uname -r)/</code> abgelegt und tragen die [[Dateinamenserweiterung]] < |
Obwohl [[Linux (Kernel)|Linux]] ein [[monolithischer Kernel]] ist, umfasst er auch eine Schnittstelle, um zuladbare Kernel-Module hinzuladen zu können ({{enS|loadable kernel modules}}, kurz ''LKM''). Kernel-Module sind [[Datei]]en, die [[Objektcode]] enthalten (Objektdateien). Sie werden üblicherweise unter <code>/usr/lib/modules/$(uname -r)/</code> abgelegt und tragen die [[Dateinamenserweiterung]] <kbd>.ko</kbd> ({{enS|kernel object}}; bis Kernel-Version 2.4 war <kbd>.o</kbd> die Dateinamenserweiterung). Geladene Kernel-Module können u. a. mit dem Befehl <code>lsmod</code> aufgelistet werden.<ref name="ubukm"/><ref name="tldp.org_module_howto"/><ref name="archkm"/> |
||
== Kernel-Module bei FreeBSD == |
== Kernel-Module bei FreeBSD == |
||
Zeile 22: | Zeile 22: | ||
== Kernel-Erweiterungen bei macOS, iOS & Co. == |
== Kernel-Erweiterungen bei macOS, iOS & Co. == |
||
Eine Kernel-Erweiterung ({{enS|kernel extensions}}) für [[XNU]], den Kernel von [[Darwin (Betriebssystem)|Darwin]], die Basis von [[macOS]] und [[iOS (Betriebssystem)|iOS]] sowie Apples anderen Betriebssystemen, wird bei Bedarf geladen. Sie liegen im Verzeichnis <code>/System/Library/Extensions/</code> und haben < |
Eine Kernel-Erweiterung ({{enS|kernel extensions}}) für [[XNU]], den Kernel von [[Darwin (Betriebssystem)|Darwin]], die Basis von [[macOS]] und [[iOS (Betriebssystem)|iOS]] sowie Apples anderen Betriebssystemen, wird bei Bedarf geladen. Sie liegen im Verzeichnis <code>/System/Library/Extensions/</code> und haben <kbd>.kext</kbd> als [[Dateinamenserweiterung]]. |
||
Aus Sicherheitsgründen wurde diese Möglichkeit für Drittanbieter verworfen und gänzlich ersetzt. Während eine Kernel-Erweiterung im [[Ring (CPU)|Kernelmodus]] läuft, laufen die mit [[macOS Catalina|macOS Catalina 10.15]] eingeführten System-Erweiterungen ({{enS|system extensions}}) im [[Ring (CPU)|Benutzermodus]] und haben so beispielsweise keinen direkten Zugriff auf Hardware.<ref>{{Internetquelle |url=https://developer.apple.com/support/kernel-extensions/ |titel=Deprecated Kernel Extensions and System Extension Alternatives |hrsg=Apple |archiv-url=https://web.archive.org/web/20200226125846/https://developer.apple.com/support/kernel-extensions/ |archiv-datum=2020-02-26 |abruf=2020-03-04 |abruf-verborgen=1 |sprache=en |offline=0}}</ref><ref>{{Internetquelle |url=https://developer.apple.com/system-extensions/ |titel=System Extensions and DriverKit |hrsg=Apple |archiv-url=https://web.archive.org/web/20191014115151/https://developer.apple.com/system-extensions/ |archiv-datum=2019-10-14 |abruf=2020-03-04 |abruf-verborgen=1 |sprache=en |offline=0}}</ref><ref name="heiseonline_4656895">{{Heise online |ID=4656895 |Titel=Kernel Extensions in macOS: Apple läutet Ende ein |Autor=Leo Becker |Datum=2020-02-10 |Abruf=2020-03-04 |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.}}</ref> |
Aus Sicherheitsgründen wurde diese Möglichkeit für Drittanbieter verworfen und gänzlich ersetzt. Während eine Kernel-Erweiterung im [[Ring (CPU)|Kernelmodus]] läuft, laufen die mit [[macOS Catalina|macOS Catalina 10.15]] eingeführten System-Erweiterungen ({{enS|system extensions}}) im [[Ring (CPU)|Benutzermodus]] und haben so beispielsweise keinen direkten Zugriff auf Hardware.<ref>{{Internetquelle |url=https://developer.apple.com/support/kernel-extensions/ |titel=Deprecated Kernel Extensions and System Extension Alternatives |hrsg=Apple |archiv-url=https://web.archive.org/web/20200226125846/https://developer.apple.com/support/kernel-extensions/ |archiv-datum=2020-02-26 |abruf=2020-03-04 |abruf-verborgen=1 |sprache=en |offline=0}}</ref><ref>{{Internetquelle |url=https://developer.apple.com/system-extensions/ |titel=System Extensions and DriverKit |hrsg=Apple |archiv-url=https://web.archive.org/web/20191014115151/https://developer.apple.com/system-extensions/ |archiv-datum=2019-10-14 |abruf=2020-03-04 |abruf-verborgen=1 |sprache=en |offline=0}}</ref><ref name="heiseonline_4656895">{{Heise online |ID=4656895 |Titel=Kernel Extensions in macOS: Apple läutet Ende ein |Autor=Leo Becker |Datum=2020-02-10 |Abruf=2020-03-04 |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.}}</ref> |
Version vom 19. März 2020, 13:21 Uhr
Als Kernel-Modul, Kernel-Erweiterungsmodul, oder Kernel-Erweiterung (englisch kernel module, kernel extension module, kernel extension) wird eine ergänzende Softwareeinheit bezeichnet, die ein laufender Kernel (Betriebssystem) laden kann – sprich während der Laufzeit und ohne Neustart. Dadurch werden seine Fähigkeiten erweitert. So können etwa 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
Die Möglichkeit, die Kernel-Fähigkeiten zu erweitern, reduziert die Notwendigkeit, den Kernel anpassen und neu kompilieren zu müssen sowie von Neustarts.
Beispielsweise soll ein Betriebssystem in der Regel auf und mit unterschiedlichen Computer- und Peripherie-Geräten funktionieren und liefert entsprechend unterschiedliche Treiber mit. Selbstredend sollen nur die benötigten Treiber für die tatsächlich vorhandene Hardware in den Arbeitsspeicher geladen werden und nicht alle mitgelieferten. Die Umsetzung als zuladbares Erweiterungsmodul macht das möglich.
Gleichzeitig kann oder soll nicht jede Hardware unterstützt werden. Dritte können Erweiterungsmodule für solche Hardware erstellen und anbieten.
Auf diese Weise kann auch ein Treiber im laufenden Betrieb aktualisiert werden. Dabei wird sein Erweiterungsmodul entladen und danach dessen neuere Version geladen.
Kernel-Module bei Linux-Distributionen
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
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.
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
- ↑ a b Kernelmodule. In: Wiki von ubuntuusers.de. Abgerufen am 6. März 2020.
- ↑ a b Kernelmodule. In: Wiki von archlinux.de. Abgerufen am 6. März 2020.
- ↑ Alessandro Rubini, Jonathan Corbet: Module erstellen und starten. Kapitel 2. In: Linux-Gerätetreiber, 2. Auflage, April 2002. O'Reilly, abgerufen am 6. März 2020.
- ↑ a b Bryan Henderson: Linux Loadable Kernel Module HOWTO. 24. September 2006, abgerufen am 6. März 2020 (englisch).
- ↑ 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.“.