Ydinmoduuli , ladattava ydinmoduuli ( LKM ) on objektitiedosto , joka sisältää koodia, joka laajentaa käynnissä olevan tai niin kutsutun käyttöjärjestelmän perusytimen toimivuutta . Ydinmoduuleita käytetään tuen lisäämiseen uusille laitteistoille tai tiedostojärjestelmille tai uusien järjestelmäkutsujen lisäämiseen . Kun moduulin tarjoamia toimintoja ei enää tarvita, se voidaan purkaa muistin ja muiden resurssien vapauttamiseksi.
Useimmat nykyaikaiset Unix - järjestelmät ja Windows tukevat ladattavia ydinmoduuleja, vaikka ne voivat käyttää niille eri nimiä, kuten ytimen ladattava moduuli ( kld ) FreeBSD :ssä ja ytimen laajennus ( kext ) OS X :ssä . Niitä kutsutaan joskus ytimen ladattaviksi moduuleiksi ( KLM ) tai ydinmoduuleiksi ( KMOD ).
Ilman ladattavia ydinmoduuleja käyttöjärjestelmillä olisi oltava kaikki mahdolliset toiminnot monoliittisessa ytimessä . Merkittävä osa koodista ei ole käytössä ja vie vain muistia . Joka kerta kun käyttäjä tarvitsee uusia toimintoja, joita ei ole vielä sisällytetty perusytimeen, perusytimen täydellinen käännös ja uudelleenkäynnistys vaaditaan. Ladattavien moduulien käyttö yksinkertaistaa huomattavasti ytimen toiminnallisuuden vaihtamista eikä vaadi täydellistä uudelleenkääntämistä (moduuli voidaan usein rakentaa erillään ytimestä tai toimittaa esikäännetyssä muodossa) tai uudelleenkäynnistystä.
Linux ei tarjoa vakaata APIa tai ABI :ta ydinmoduuleille. Tämä tarkoittaa, että eri ydinversioiden sisäisessä rakenteessa ja toiminnassa on eroja, jotka voivat aiheuttaa yhteensopivuusongelmia. Näiden ongelmien torjumiseksi tietojen versiointisymboli sijoitetaan .modinfo - tiedostoon ELF - moduulin latausosaan. Tätä versiotietoa voidaan verrata suoritettavan ytimen versiotietoihin ennen moduulin lataamista; jos versiot eivät ole yhteensopivia, moduulia ei ladata.
Muut käyttöjärjestelmät, kuten Solaris , FreeBSD , Mac OS X , Windows pitävät API :n ja ABI :n moduuleille suhteellisen vakaina välttäen tämän ongelman. Esimerkiksi ytimen versiolle 6.0 käännetyt FreeBSD - moduulit toimivat ilman uudelleenkääntämistä missään muussa FreeBSD 6.x:n versiossa, kuten 6.4:ssä. Ne eivät kuitenkaan ole yhteensopivia muiden suurten julkaisujen kanssa, ja ne on käännettävä uudelleen käytettäväksi FreeBSD 7.x:n kanssa, koska API- ja ABI-yhteensopivuus säilyy vain samassa haarassa.
Ladattavat ydinmoduulit ovat kätevä tapa muokata ydintä, jota hyökkääjä voi käyttää vaarantuneessa järjestelmässä estääkseen prosessiensa tai tiedostojensa havaitsemisen , jolloin hän voi säilyttää järjestelmän hallinnan. Siksi monet rootkit käyttävät ydinmoduuleja. [yksi]
Linux - maailmassa modprobe -apuohjelma lataa ja purkaa moduulit . Moduulit on tallennettu /lib/modules .ko- tiedostoihin ("ytimen objekti") Linux 2.6:sta lähtien. [2] Aiemmissa versioissa käytettiin .o -laajennusta . Komento lsmod luettelee ladatut ydinmoduulit ja niiden riippuvuudet.
Linuxin ylläpitäjien mukaan LKM on ytimen johdannaisteos . Ytimen toiminnot voidaan merkitä saatavilla vain GPL - moduuleille.
Omien tai GPL:n kanssa yhteensopimattomien moduulien lataaminen asettaa ytimeen "taut" (taut) -lipun [3] . Tämä lippu tarkoittaa, että ytimen ylläpitäjät eivät todennäköisesti tutki mitään ongelmia tai vikoja . [4] [5] Moduuleista tulee itse asiassa osa käynnissä olevaa ydintä ja ne voivat korruptoida sisäisiä tietorakenteita luoden virheitä, joita eivät pysty toistamaan ne, jotka eivät pysty lataamaan omaa moduulia.
Linuxantin tapausVuonna 2004 Linuxant, konsulttiyritys, joka julkaisi patentoidun moduulin ( laiteohjaimen ), yritti kiertää joidenkin ytimen toimintojen "GPLONLY"-rajoitukset. Tätä varten käytettiin NULMODULE_LICENSE - symbolia kaaviossa sen moduulin lähdekoodissa :
MODULE_LICENSE ("GPL\0\"GPL\"-hakemiston tiedostoille; muille vain LICENSE-tiedosto koskee");Linux-ydin määrittää lisenssin NUL-päätteisten merkkijonojen leksikografisella vertailulla, joten määritetyn merkkijonon vertaaminen vastaa vertailua merkkijonoon "GPL" , kun taas moduulia ei ole lisensoitu GPL-lisenssillä . [6]
FreeBSD - ydinmoduulit tallennetaan kansioon /boot/kernel/ (jakelun mukana jaettavat moduulit) tai /boot/modules/ FreeBSD-porteista ja muista lähteistä asennetuille moduuleille . FreeBSD-ydinmoduuleilla on yleensä .ko -pääte . Moduulit voidaan ladata kldloadilla ja purkaa kldunloadilla . Moduuliluettelo näkyy komennolla kldstat . Jotkut moduulit ladataan alkukäynnistyksen aikana (määritetty /boot/loader.conf-tiedostossa ).
Jotkut ladattavat ydinmoduulit Mac OS X :ssä voidaan ladata automaattisesti. Ladattavat ydinmoduulit voidaan ladata myös kextload- komennolla . Lista voidaan näyttää komennolla kextstat . Ladattavat ydinmoduulit sijaitsevat ohjelmistopaketeissa, joiden laajennus on .kext . Käyttöjärjestelmän mukana toimitetut moduulit tallennetaan hakemistoon /System/Library/Extensions , kolmansien osapuolien moduulit muihin hakemistoihin.
Itse Windows - ydin ei tue laajennuksia ladattavien moduulien kautta. Ladattavia ohjaimia kuitenkin tuetaan , eikä Windows-ohjaimeksi suunniteltua moduulia vaadita toimimaan minkään ulkoisen laitteen kanssa. Tästä johtuen "pseudoohjaimia" käytetään laajalti muuttamaan ja laajentamaan Windows-ytimen toimintoja - rootkit -torjuntaohjelmia, virheenkorjaustulosteen sieppaajia , monien Sysinternalsin julkaisemien järjestelmäohjelmien apu-agentteja jne.
Käyttöjärjestelmien näkökohdat | |||||
---|---|---|---|---|---|
| |||||
Tyypit |
| ||||
Nucleus |
| ||||
Prosessien hallinta |
| ||||
Muistinhallinta ja osoitus |
| ||||
Lataus- ja alustustyökalut | |||||
kuori | |||||
muu | |||||
Luokka Wikimedia Commons Wikikirjat Wikisanakirja |