Kärnmodul , loadable kernel module ( LKM ) är en objektfil som innehåller kod som utökar funktionaliteten hos en körande eller så kallad bas OS-kärna . Kärnmoduler används för att lägga till stöd för ny hårdvara eller filsystem, eller för att lägga till nya systemanrop . När funktionen som tillhandahålls av en modul inte längre behövs, kan den laddas ur för att frigöra minne och andra resurser.
De flesta moderna Unix - system och Windows stöder laddningsbara kärnmoduler, även om de kan använda olika namn för dem, som laddningsbar kärnmodul ( kld ) på FreeBSD , kärntillägg ( kext ) på OS X . De kallas ibland för Kernel Loadable Modules ( KLM ) eller Kernel Modules ( KMOD ).
Utan laddningsbara kärnmoduler skulle operativsystemen behöva ha all möjlig funktionalitet i en monolitisk kärna . En betydande del av koden används inte och tar bara upp minne . Varje gång användaren behöver ny funktionalitet som ännu inte ingår i baskärnan, krävs en fullständig omkompilering av baskärnan och en omstart. Användningen av laddningsbara moduler förenklar kraftigt att ändra kärnans funktionalitet och kräver inte en fullständig omkompilering (en modul kan ofta byggas separat från kärnan eller levereras i en förkompilerad form) eller omstarter.
Linux tillhandahåller inte ett stabilt API eller ABI för kärnmoduler. Det betyder att det finns skillnader i intern struktur och funktion mellan olika kärnversioner som kan orsaka kompatibilitetsproblem. I ett försök att bekämpa dessa problem placeras dataversionssymbolen i .modinfo i ELF -modulens laddningssektion. Denna versionsinformation kan jämföras med versionsinformationen för den körbara kärnan innan modulen laddas; om versionerna är inkompatibla kommer modulen inte att laddas.
Andra operativsystem som Solaris , FreeBSD , Mac OS X , Windows håller API och ABI för moduler relativt stabila och undviker detta problem. Till exempel kommer FreeBSD -moduler kompilerade för kärnversion 6.0 att fungera utan omkompilering på någon annan version av FreeBSD 6.x, såsom 6.4. De är dock inte kompatibla med andra större utgåvor och måste kompileras om för användning med FreeBSD 7.x, eftersom API- och ABI-kompatibilitet endast upprätthålls inom samma gren.
Laddbara kärnmoduler är ett bekvämt sätt att modifiera kärnan, detta kan användas av en angripare i ett komprometterat system för att förhindra upptäckt av hans processer eller filer , vilket gör att han kan behålla kontrollen över systemet. Därför använder många rootkits kärnmoduler. [ett]
I Linux -världen laddas och avlastas moduler av modprobe- verktyget . Moduler lagras i /lib/ modules i .ko ("kärnobjekt") filer sedan Linux 2.6. [2] Tidigare versioner använde tillägget .o . Kommandot lsmod listar laddade kärnmoduler och deras beroenden.
Enligt Linux-hållarna är LKM ett härlett verk av kärnan. Kärnfunktioner kan markeras som tillgängliga endast för GPL -moduler.
Att ladda proprietära eller GPL-inkompatibla moduler ställer in flaggan för 'smuts' (smuts) [3] i kärnan. Den här flaggan betyder att eventuella problem eller buggar är mindre sannolikt att undersökas av kärninnehavarna. [4] [5] Moduler blir faktiskt en del av den körande kärnan och kan korrumpera interna datastrukturer, skapa buggar som inte kan reproduceras av de som inte kan ladda en proprietär modul.
Linuxant-fallet2004 försökte Linuxant, ett konsultföretag som släppte en proprietär modul ( enhetsdrivrutin ), komma runt "GPLONLY"-begränsningar för vissa kärnfunktioner. För att göra detta användes NUL-MODULE_LICENSE symbolen i grafen i källkoden för dess modul :
MODULE_LICENSE ("GPL\0för filer i \"GPL\"-katalogen; för andra gäller endast LICENS-filen");Bestämningen av licensen av Linux-kärnan görs genom lexikografisk jämförelse av NUL-terminerade strängar, så att jämföra den specificerade strängen kommer att motsvara en jämförelse med strängen "GPL" , medan modulen inte är licensierad under GPL-licensen . [6]
FreeBSD -kärnmoduler lagras i /boot/kernel/ (moduler distribuerade med distributionen) eller /boot/modules/ för moduler installerade från FreeBSD-portar och andra källor. FreeBSD-kärnmoduler har vanligtvis tillägget .ko . Moduler kan laddas med kldload , lossas med kldunload . Listan över moduler är synlig med kommandot kldstat . Vissa moduler laddas under den inledande uppstartsfasen (anges i filen /boot/loader.conf ).
Vissa laddningsbara kärnmoduler i Mac OS X kan laddas automatiskt. Laddbara kärnmoduler kan också laddas med kommandot kextload . Listan kan visas med kommandot kextstat . Laddbara kärnmoduler finns i programvarupaket med tillägget .kext . Moduler som levereras med operativsystemet lagras i katalogen /System/Library/Extensions , moduler från tredje part lagras i andra kataloger.
Själva Windows -kärnan stöder inte tillägg via laddningsbara moduler. Däremot stöds nedladdningsbara drivrutiner , och en modul designad som en Windows-drivrutin krävs inte för att fungera med någon extern enhet. På grund av detta används "pseudodrivrutiner" i stor utsträckning för att ändra och utöka funktionaliteten hos Windows-kärnan - anti- rootkits , debug- utgångsinterceptorer , extra "agenter" för många systemprogram som släppts av Sysinternals , etc.
av operativsystem | Aspekter|||||
---|---|---|---|---|---|
| |||||
Typer |
| ||||
Kärna |
| ||||
Processledning _ |
| ||||
Minneshantering och adressering | |||||
Ladda och initieringsverktyg | |||||
skal | |||||
Övrig | |||||
Kategori Wikimedia Commons Wikibooks Wiktionary |