Ero sivun ”Ytimen moduulit” versioiden välillä
Pb (keskustelu | muokkaukset) p (siirsi sivun ”Moduuli” uudelle nimelle ”Ytimen moduulit”) |
Pb (keskustelu | muokkaukset) (laajennusta) |
||
Rivi 1: | Rivi 1: | ||
Linuxin [[ydin|ytimeen]] voi | Linuxin [[ydin|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äminen|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ähdekoodi]]puuhun kuuluvat osat voidaan [[ytimen kääntäminen|ydintä käännettäessä]] valita joko kiinteästi ytimeen mukaan, ei lainkaan mukaan tai moduuleiksi. [[Jakelu]]iden 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 [[Virtuaalikoneet|virtualisointi]]ohjelmistojen osat. | |||
==Moduulien sijainti== | |||
Sekä viralliseen ytimeen kuuluvat että ulkopuoliset moduulit sijaitsevat [[Linuxin hakemistorakenne|hakemistossa]] <tt>/lib/modules/''ytimen_versio''/</tt>, esimerkiksi /lib/modules/2.6.25-ARCH/. | |||
Yksittäinen moduuli voi löytyä esimerkiksi polusta <tt>/lib/modules/2.6.25-ARCH/kernel/drivers/net/wireless/[[Ralink_rt2x00|rt2x00]]/rt2500usb.ko</tt>. | |||
==Lataaminen ja hallinta== | |||
Useimmissa järjestelmissä käytetään [[udev]]ia tutkimaan laitteistoa käynnistyksen yhteydessä (coldplug) ja ajon aikana (hotplug) ja lataamaan laitteiden tunnisteiden pohjalta 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 [[paketinhallinta|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 <tt>/etc/modprobe.conf</tt>-[[asetustiedosto]]ssa (2.4-ytimillä <tt>/etc/modules.conf</tt> tai <tt>/etc/conf.modules</tt>). Modprobe.confin sijaan asetukset voidaan myös sijoittaa vapaavalintaiseen tiedostoon hakemiston <tt>/etc/modprobe.d/</tt> 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 Linux]]issa moduulit voidaan listata <tt>/etc/[[rc.conf]]</tt>in kenttään <tt>MODULES=</tt>, [[Debian]]-pohjaisissa jakeluissa tiedostoon <tt>/etc/modules</tt> ja [[Gentoo]]ssa tiedostoon <tt>/etc/modules.autoload.d/kernel-2.6</tt> (2.6-sarjan ytimet). | |||
===Komentorivityökalut=== | |||
Moduuleita voidaan hallita seuraavilla [[komentorivi]]komennoilla: | |||
{{Moduulien hallinta}} | {{Moduulien hallinta}} | ||
[[Luokka: | ==Ulkopuoliset moduulit== | ||
Ulkopuoliset moduulit asennetaan yleensä binäärisinä (valmiiksi käännettyinä) versioina [[paketinhallintajärjestelmä|paketinhallinnan]] kautta. Moduulit ovat tällöin valmiiksi yhteensopivia jakelun oletusytimen kanssa. [[vapaa ohjelmisto|Ei-vapaiden]] moduulien (esimerkiksi [[näytönohjain]]ajurit) lataamiseen on usein käytettävä [[epäviralliset pakettilähteet|epävirallisia pakettivarastoja]]. | |||
Jos ja kun ytimestä tulee uusi versio, on myös ulkopuolisten moduulien päivityttävä sitä tukeviksi. Jakelusta ja [[pakettivarasto]]sta riippuen tähän on kaksi menetelmää. Joko kaikista moduulipaketeista julkaistaan uudet versiot aina ytimen päivittyessä tai käytetään [[DKMS]]-ohjelmistoa, joka [[kääntäminen|kääntää]] moduulit uudelleen aina havaittuaan ytimen päivittyneen. Useimmat paketoijat ovat viime vuosina siirtyneet käyttämään DKMS:ää. | |||
Jos paketinhallinnan kautta ei ole saatavilla haluttua moduulia tai sen versiota, on se käännettävä käsin [[lähdekoodi]]sta. Moduulin kääntämiseen tarvitaan ytimen kehityspaketit (paketit <tt>kernel-devel</tt>, <tt>kernel-dev</tt>, <tt>linux-devel</tt>, <tt>kernel-headers</tt>, <tt>linux-headers</tt> ym jakelusta riippuen) sekä moduulin kanssa yhteensopiva ytimen versio. Ajurikehittäjän sivulta ladattavan ajurin (yleensä [[tarball]]-muodossa) mukana toimitetaan tavallisesti <tt>README</tt>- ja <tt>INSTALL</tt>-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ä [[GNU/Linuxin käynnistysprosessi|järjestelmän käynnistyksen]] alkuvaiheessa. Moduulit sijaitsevat [[tiedostojärjestelmä]]ssä (yleensä [[juuriosio]]lla), 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== | |||
*[[Usein kysyttyjä kysymyksiä ytimestä]] | |||
*[[Ytimen kääntäminen]] | |||
*[[Ytimen asetusten tekeminen]] | |||
*[[Ytimen käynnistysparametrit]] | |||
*[[GNU/Linuxin käynnistysprosessi]] | |||
*[[Udev]] | |||
==Aiheesta muualla== | |||
*[[wikipedia:Loadable kernel module|Ytimen moduulit englanninkielisessä Wikipediassa]] | |||
[[Luokka:Ydin]] | |||
[[Luokka:Ohjeet]] |
Versio 21. marraskuuta 2008 kello 01.09
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 pohjalta 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 DKMS-ohjelmistoa, joka kääntää moduulit uudelleen aina havaittuaan ytimen päivittyneen. Useimmat paketoijat ovat viime vuosina siirtyneet käyttämään DKMS:ää.
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. Ajurikehittäjän sivulta ladattavan ajurin (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
- Usein kysyttyjä kysymyksiä ytimestä
- Ytimen kääntäminen
- Ytimen asetusten tekeminen
- Ytimen käynnistysparametrit
- GNU/Linuxin käynnistysprosessi
- Udev