Ytimen moduulit

Linux.fista
Versio hetkellä 9. huhtikuuta 2009 kello 17.56 – tehnyt Pb (keskustelu | muokkaukset) (→‎Ulkopuoliset moduulit: wikilinkin korjaus ym)
(ero) ← Vanhempi versio | Nykyinen versio (ero) | Uudempi versio → (ero)
Siirry navigaatioon Siirry hakuun

Linuxin ytimeen voi ajon aikana liittää moduuleiksi kutsuttuja osia, jotka lisäävät sen toiminnallisuutta. Tämän järjestelyn keskeisin hyöty on, ettei ydintä tarvitse kääntää uudelleen aina, kun halutaan lisätä tai poistaa jokin toiminto (esimerkiksi laiteajuri). Moduulit ovat aina sidoksissa tiettyyn ytimen versioon, jos ytimestä asennetaan uusi versio, on myös moduulien oltava uutta versiota varten käännettyjä.

Useimmat ytimen lähdekoodipuuhun kuuluvat osat voidaan ydintä käännettäessä valita joko kiinteästi ytimeen mukaan, ei lainkaan mukaan tai moduuleiksi. Jakeluiden oletusytimissä lähes kaikki mahdollinen on käännetty moduuleiksi, jotta ydin toimisi mahdollisimman monella eri laitteistokokoonpanolla kasvamatta samalla liian suureksi.

Moduulien ei ole pakko kuulua virallisen ytimen lähdekoodipuuhun, vaan myös ulkopuolisia moduuleja voidaan liittää mukaan, kunhan ne on käännetty oikealle ytimen versiolle. Tällaisia ovat mm. monet laiteajurit ja virtualisointiohjelmistojen osat.

Moduulien sijainti

Sekä viralliseen ytimeen kuuluvat että ulkopuoliset moduulit sijaitsevat hakemistossa /lib/modules/ytimen_versio/, esimerkiksi /lib/modules/2.6.25-ARCH/.

Yksittäinen moduuli voi löytyä esimerkiksi polusta /lib/modules/2.6.25-ARCH/kernel/drivers/net/wireless/rt2x00/rt2500usb.ko.

Lataaminen ja hallinta

Useimmissa järjestelmissä käytetään udevia tutkimaan laitteistoa käynnistyksen yhteydessä (coldplug) ja ajon aikana (hotplug) ja lataamaan laitteiden tunnisteiden (ks komennot lspci ja lsusb) perusteella oikeat (laiteajuri)moduulit. Jos jokin moduuli on riippuvainen toisten moduulien tarjoamista toiminnoista, ladataan myös nämä moduulit automaattisesti riippuvaisuustietokannan perusteella.

Moduulitiedostot sisältävät listan siitä, mitkä tunnisteet omaavien laitteiden kanssa ne on tehty toimimaan. Jos esimerkiksi paketinhallinnan kautta asennetaan ulkopuolisia moduuleita, ovat ne näin valmiita käyttöön heti, kun moduulit on lisätty /lib/modules-hakemistoon (ja moduulien riippuvaisuustietokanta on päivitetty). Moduulien lataamiseen tarvitsee puuttua käsin vain poikkeustapauksissa.

Lataamisasetukset

Ladattaville moduuleille voidaan määritellä asetuksia /etc/modprobe.conf-asetustiedostossa (2.4-ytimillä /etc/modules.conf tai /etc/conf.modules). Modprobe.confin sijaan asetukset voidaan myös sijoittaa vapaavalintaiseen tiedostoon hakemiston /etc/modprobe.d/ alle.

Jos esimerkiksi jonkin tietyn moduulin latautuminen halutaan estää (vaikkapa päällekkäisyyksien takia), voidaan se mustalistata (engl. blacklist) lisäämällä modprobe.conf-tiedostoon rivi

blacklist moduulinnimi

Jos halutaan käsin määritellä jokin tietty moduuli latautuvaksi käynnistyksen yhteydessä (mikäli se ei lataudu automaattisesti), voidaan tiedostoon /etc/rc.local lisätä rivi

modprobe moduulinnimi

Tähän on myös olemassa jakelukohtaisia menetelmiä, esimerkiksi Arch Linuxissa moduulit voidaan listata /etc/rc.confin kenttään MODULES=, Debian-pohjaisissa jakeluissa tiedostoon /etc/modules ja Gentoossa tiedostoon /etc/modules.autoload.d/kernel-2.6 (2.6-sarjan ytimet).

Komentorivityökalut

Moduuleita voidaan hallita seuraavilla komentorivikomennoilla:

  • depmod - päivittää moduulien riippuvaisuustietokannan
  • insmod - lisää moduulin (ei tue riippuvuuksia)
  • lsmod - listaa käytössä olevat moduulit
  • modinfo - näyttää tietoja moduulista
  • modprobe - lisää, asettaa ja poistaa moduuleita
  • rmmod - poistaa moduulin (ei tue riippuvuuksia)


Ulkopuoliset moduulit

Ulkopuoliset moduulit asennetaan yleensä binäärisinä (valmiiksi käännettyinä) versioina paketinhallinnan kautta. Moduulit ovat tällöin valmiiksi yhteensopivia jakelun oletusytimen kanssa. Ei-vapaiden moduulien (esimerkiksi näytönohjainajurit) lataamiseen on usein käytettävä epävirallisia pakettivarastoja.

Jos ja kun ytimestä tulee uusi versio, on myös ulkopuolisten moduulien päivityttävä sitä tukeviksi. Jakelusta ja pakettivarastosta riippuen tähän on kaksi menetelmää. Joko kaikista moduulipaketeista julkaistaan uudet versiot aina ytimen päivittyessä tai käytetään akmodin ja DKMS:n kaltaisia järjestelmiä, jotka kääntävät moduulit automaattisesti uudelleen aina havaittuaan ytimen päivittyneen.

Ensimmäisen vaihtoehdon ongelmana on paketoinnin työläys ja mahdolliset tilapäiset riippuvaisuusongelmat. Jälkimmäisen vaihtoehdon kanssa ongelmaksi taas tulee vaatimus jonkin verran tilaa vievien kehitystyökalujen asentamisesta.

Jos paketinhallinnan kautta ei ole saatavilla haluttua moduulia tai sen versiota, on se käännettävä käsin lähdekoodista. Moduulin kääntämiseen tarvitaan ytimen kehityspaketit (paketit kernel-devel, kernel-dev, linux-devel, kernel-headers, linux-headers ym jakelusta riippuen) sekä moduulin kanssa yhteensopiva ytimen versio. Moduulin kehittäjän sivulta ladattavan lähdekoodin (yleensä tarball-muodossa) mukana toimitetaan tavallisesti README- ja INSTALL-tiedostot, joissa on lisätietoa kääntämisestä.

Initrd

Jos käytetään jakeluiden oletusytimiä joissa suurin osa laiteajureista on käännetty moduuleiksi, tulee ongelmaksi se, etteivät moduulit ole käytettävissä järjestelmän käynnistyksen alkuvaiheessa. Moduulit sijaitsevat tiedostojärjestelmässä (yleensä juuriosiolla), mutta jotta tiedostojärjestelmään päästäisiin käsiksi, tarvitaan eri laitteistokokoonpanoja varten suuri määrä eri moduuleita.

Jotta moduulit olisivat käytettävissä tarpeeksi aikaisin, on kehitetty initrd-niminen järjestelmä, jossa tarvittavat moduulit on sijoitettu käynnistyksen ajaksi keskusmuistiin ladattavaan tiedostojärjestelmään.

Initrd-tiedostojärjestelmän levykuva korvataan uudella aina ydintä päivitettäessä. Levykuva voidaan myös luoda käsin, mikäli oletusversio ei sisällä kaikkia tarvittavia moduuleita.

Katso myös

Aiheesta muualla