Kernel modul , loadable kernel module ( LKM ) er en objektfil , der indeholder kode, der udvider funktionaliteten af en kørende eller såkaldt basis OS-kerne . Kernelmoduler bruges til at tilføje understøttelse af ny hardware eller filsystemer eller til at tilføje nye systemkald . Når funktionaliteten fra et modul ikke længere er nødvendig, kan den aflæses for at frigøre hukommelse og andre ressourcer.
De fleste moderne Unix - systemer og Windows understøtter indlæsbare kernemoduler, selvom de kan bruge forskellige navne til dem, såsom kerneindlæsbart modul ( kld ) på FreeBSD , kerneudvidelse ( kext ) på OS X . De omtales nogle gange som Kernel Loadable Modules ( KLM ) eller Kernel Modules ( KMOD ).
Uden indlæsbare kernemoduler ville operativsystemer skulle have al mulig funktionalitet i en monolitisk kerne . En væsentlig del af koden bruges ikke og optager kun hukommelse . Hver gang brugeren har brug for ny funktionalitet, der endnu ikke er inkluderet i basiskernen, kræves en komplet omkompilering af basiskernen og en genstart. Brugen af indlæsbare moduler forenkler i høj grad ændring af kernens funktionalitet og kræver ikke en komplet rekompilering (et modul kan ofte bygges separat fra kernen eller leveres i en prækompileret form) eller genstart.
Linux giver ikke en stabil API eller ABI til kernemoduler. Det betyder, at der er forskelle i intern struktur og funktion mellem forskellige kerneversioner, som kan forårsage kompatibilitetsproblemer. I et forsøg på at bekæmpe disse problemer er dataversioneringssymbolet placeret i .modinfo i ELF - modulets indlæsningssektion. Denne versionsinformation kan sammenlignes med versionsinformationen for den eksekverbare kerne, før modulet indlæses; hvis versionerne er inkompatible, vil modulet ikke blive indlæst.
Andre operativsystemer såsom Solaris , FreeBSD , Mac OS X , Windows holder API'en og ABI for moduler relativt stabile, hvilket undgår dette problem. For eksempel vil FreeBSD - moduler kompileret til kerneversion 6.0 fungere uden genkompilering på nogen anden version af FreeBSD 6.x, såsom 6.4. De er dog ikke kompatible med andre større udgivelser og skal genkompileres til brug med FreeBSD 7.x, da API- og ABI-kompatibilitet kun opretholdes inden for samme gren.
Indlæsbare kernemoduler er en bekvem måde at ændre kernen på. Dette kan bruges af en angriber i et kompromitteret system for at forhindre opdagelse af hans processer eller filer , hvilket giver ham mulighed for at bevare kontrollen over systemet. Derfor bruger mange rootkits kernemoduler. [en]
I Linux -verdenen indlæses og aflæses moduler af modprobe -værktøjet . Moduler er gemt i /lib/modules i .ko ("kerneobjekt") filer siden Linux 2.6. [2] Tidligere versioner brugte .o- udvidelsen . lsmod - kommandoen viser indlæste kernemoduler og deres afhængigheder.
Ifølge brugerne af Linux er LKM et afledt værk af kernen. Kernefunktioner kan markeres som kun tilgængelige for GPL- moduler.
Indlæsning af proprietære eller GPL-inkompatible moduler sætter 'taint' (taint) flag [3] i kernen. Dette flag betyder, at eventuelle problemer eller fejl er mindre tilbøjelige til at blive undersøgt af kerneholderne. [4] [5] Moduler bliver faktisk en del af den kørende kerne og kan ødelægge interne datastrukturer, hvilket skaber fejl, der ikke kan reproduceres af dem, der ikke kan indlæse et proprietært modul.
Linuxant-sagenI 2004 forsøgte Linuxant, et konsulentfirma, der udgav et proprietært modul ( enhedsdriver ), at omgå "GPLONLY"-begrænsninger på nogle kernefunktioner. For at gøre dette blev NULMODULE_LICENSE - symbolet brugt i grafen i kildekoden til dets modul :
MODULE_LICENSE ("GPL\0for filer i \"GPL\"-mappen; for andre gælder kun LICENS-filen");Bestemmelsen af licensen af Linux-kernen sker ved leksikografisk sammenligning af NUL-terminerede strenge, så sammenligning af den specificerede streng vil svare til sammenligning med strengen "GPL" , mens modulet ikke er licenseret under GPL-licensen . [6]
FreeBSD -kernemoduler er gemt i /boot/kernel/ (moduler distribueret med distributionen) eller /boot/modules/ for moduler installeret fra FreeBSD-porte og andre kilder. FreeBSD-kernemoduler har normalt .ko- udvidelsen . Moduler kan indlæses med kldload , losses med kldunload . Listen over moduler er synlig med kommandoen kldstat . Nogle moduler indlæses under den indledende opstartsfase (specificeret i filen /boot/loader.conf ).
Nogle indlæsbare kernemoduler i Mac OS X indlæses muligvis automatisk. Indlæsbare kernemoduler kan også indlæses med kommandoen kextload . Listen kan vises med kommandoen kextstat . Indlæsbare kernemoduler er placeret i softwarepakker med en .kext- udvidelse . Moduler, der leveres med operativsystemet, er gemt i mappen /System/Library/Extensions , moduler fra tredjeparter gemmes i andre mapper.
Selve Windows -kernen understøtter ikke udvidelser gennem indlæsbare moduler. Drivere , der kan downloades, understøttes dog , og et modul, der er designet som en Windows-driver, er ikke påkrævet for at fungere med nogen ekstern enhed. På grund af dette er "pseudo-drivere" i vid udstrækning brugt til at ændre og udvide funktionaliteten af Windows-kernen - anti- rootkits , debug output- interceptorer , hjælpe-"agenter" af mange systemprogrammer udgivet af Sysinternals osv.
af operativsystemer | Aspekter|||||
---|---|---|---|---|---|
| |||||
Typer |
| ||||
Nucleus |
| ||||
Procesledelse _ |
| ||||
Hukommelseshåndtering og adressering | |||||
Indlæsnings- og initialiseringsværktøjer | |||||
skal | |||||
Andet | |||||
Kategori Wikimedia Commons Wikibooks Wiktionary |