Ytimen kääntäminen

Linux.fista
Versio hetkellä 29. huhtikuuta 2005 kello 16.21 – tehnyt 193.166.82.145 (keskustelu) (→‎Asetusten tekeminen)
Siirry navigaatioon Siirry hakuun

Kernelin, eli GNU/Linux käyttöjärjestelmän ytimen, kääntämistä pidetään usein erittäin hankalana, mitä se tosiasiassa ei ole. Nykyisin tarve käyttäjän itsensä tekemään kernelin kääntöön on vähentynyt, mutta toimenpide voi olla tarpeellinen esimerkiksi eksoottisempien oheislaitteiden toimimaan saattamiseksi. Toinen yleinen syy on halu optimoida kernelistä pois ominaisuuksia, joille käyttäjä ei koe olevan itsellään tarvetta. Usein vanhentuneessa ohjeessa sanotaan ytimen käännön olevan välttämätöntä, vaikka vaaditut vipuset ovat valittuna jo vakiokernelissä. Tarkista kuinka vanhaa ohjetta luet.

Ytimen hakeminen

kernel.org:ista voi ladata uusimman julkaistun ytimen. Nykyään on suositeltavaa käyttää uusinta vakaata 2.6-sarjan ydintä. Lataa paketti /usr/src -hakemistoon ja pura se. tar.bz2-päätteinen paketti puretaan komennolla tar jxvf linux-2.6.x.x.tar.bz2 ja tar.gz-päätteinen komennolla tar zxvf linux-2.6.x.x.tar.gz. Purettuasi paketin siirry tuloksena syntyneeseen uuteen hakemistoon. Kernelin lähdekoodin saa ladattua myös Suomessa sijaitsevalta ftp.fi.kernel.org-palvelimelta.

Kannattaa huomata, etteivät kaikki kernelin ulkopuoliset ajurit välttämättä toimi uusimpien lähdekoodien/kernelien kanssa. Samassa lähdekoodipaketissa olevat koodit oikein konfiguroituina toimivat, mutta ulkopuoliset ajurit saattavat kieltäytyä kääntymästä sen vuoksi, että kernelistä on kehityksen myötä poistunut jotain tai jokin ajurin kannalta olennainen ominaisuus on ratkaisevasti muuttunut.

Asetusten tekeminen

Nykyisen ytimen version näet komennolla uname -a. Mikäli käytössäsi on jo 2.6-sarjan ydin, kannattaa tutkia löytyykö ytimen asetustiedosto (.config) jostakin. Monissa jakeluissa asetustiedosto löytyy /boot -hakemiston alta nimellä kernel-2.6.x.x.config. Asetustiedosto voi myös löytyä pakattuna tiedostosta /proc/config.gz. Jos vanha asetustiedosto löytyy, kopioi se uuden ytimen lähdekoodin juurihakemistoon nimellä .config. Aja tämän jälkeen komento make oldconfig jolloin sinulta kysytään asetukset niihin ominaisuuksiin, joita vanhassa asetustiedostossa ei ollut.

Jos sinulla ei ole vanhaa asetustiedostoa tai jos haluat tehdä itse asetuksia, aja komento make menuconfig (yleisin ja toimii lähes aina), make xconfig (Graafinen, QT-kirjastoa käyttävä), make gconfig (Graafinen, GTK+ -kirjastoa käyttävä) tai make config (kysyy kaikki kohdat erikseen, ei suositeltava). Tämän jälkeen tee haluamasi asetukset, mutta älä kuitenkaan muuta mitään mistä et ole varma. Suurimpaan osaan tarjolla olevista asetuksista on hyvä ohjeistus kyseisen asetuksen kohdalla help-valikossa.

Mikäli et tee ns. initrd-ydintä, on syytä muistaa että juuriosion tiedostojärjestelmän ajuri on käännettävä ytimen sisään. Initrd-ytimen tapauksessa ajurin voi kääntää myös moduuliksi, mutta tällöin on tehtävä erikseen initrd-tiedosto jotta ydin osaa ottaa tiedostojärjestelmän käynnistyksen yhteydessä käyttöön. Initrd-ytimissä käytetään romfs-muotoista ram-levyasemaa.

Osa ajureista ei toimi tällä hetkellä hyvin joidenkin toisten ajureiden kanssa. Ne eivät välttämättä käänny lainkaan, tai ne eivät käänny puhtaasti, mikäli kaksi tällaista ajuria on valittuna. 2.6-sarjan ytimet ovat kirjoitushetkellä vielä voimakkaan kehityksen alla. Apua valintoihin kannattaa aina katsoa kunkin ajurin kohdalta löytyvästä help-valikosta.

Valitessasi ytimen asetuksia on hyvä tutustua tarkkaan koneesi laitteistoon. lspci -v -komento antaa hyödyllistä tietoa laitteistostasi, ja runsaasti lisätietoa löytyy /proc-väylältä. Esimerkiksi tiedosto /proc/cpuinfo kertoo kattavasti millainen prosessori koneessasi on. Oikean vaihtoehdon valinta on tärkeää etenkin prosessorin kohdalla ydintä käännettäessä. x86-koneissa pienin yhteinen nimittäjä on 80386-prosessorityyppi, jonka valitsemalla ydin toimii jokaisessa koneessa, mutta se ei käytä hyödykseen läheskään kaikkia tarjolla olevia ominaisuuksia ja on huomattan hidas. Perusnyrkkisääntönä sanottakoon, että nykyään pienin yhteinen nimittäjä on Pentium. Mikäli aiot tehdä ytimestäsi siirrettävän, eli sellaisen joka toimii koneessa kuin koneessa, on 386 hyvä vaihtoehto. Sen sijaan omalle koneelle optimaalista ydintä räätälöitäessä oikean prosessorityypin (tai lähimmän vastaavan) valinta on järkevin.

2.4 -sarjan kerneleissä oli AMD:n prosessorien ja VIA-piirisarjan kanssa ongelmia, joiden vuoksi piti kääntää 686-kerneli jonkin aikaa näihin koneisiin. Vastaavanlaisia ongelmia saattaa edelleenkin esiintyä erityisesti bleeding edge-tekniikoiden kanssa, kun kehitys ei ole vielä päässyt tarpeeksi pitkälle.

Kääntäminen

Asetusten tekemisen jälkeen ydin kääntyy yksinkertaisesti komennolla make (helppoa, eikö?)

Jos kääntäminen keskeytyy johonkin virheeseen, on syytä kääntää kriittinen katse asetustiedostoa kohtaan.


Debianistit voivat käyttää seuraavia komentoja (kernel-package ja fakeroot pitää olla asennettuina):

Tämä kääntää dpkg -i -komennolla asennettavissa olevan kernelin: $ fakeroot make-kpkg --revision kernel-versio kernel_image

Tämä kääntää /usr/src/modules -hakemistossa olevista ulkopuolisten modulien lähdekoodeista kernel-moduleita $ fakeroot make-kpkg --revision kernel-versio modules_image

Mikäli käännät samoilla sorsilla muita kerneleitä, tämä siivoaa kernelin sorsat debian-tauhkasta $ fakeroot make-kpkg clean

Kun kerneliä asennetaan Debianissa, syntyneet deb-paketit voi siirtää koneesta toiseen tai asentaa samassa koneessa. Tämä yksinkertaistaa erityisesti heikkotehoisten koneiden kernelin optimoimista, sillä 100 mhz pentium kääntää kerneliä useita tunteja siinä kun nykyaikainen hyperthreading-pentium kääntää kernelin muutamassa minuutissa.

Asentaminen

Tässä vaiheessa täytyy kirjautua pääkäyttäjäksi (komento su), jonka jälkeen ytimen moduulit asennetaan komennolla make modules_install. Tämän jälkeen /lib/modules-hakemistoon pitäisi ilmestyä uusi hakemisto jonka nimi on ytimesi nimi (olettaen että mitään virheitä ei satu).

Tämän jälkeen itse ydin voidaan asentaa komennolla make install, jolloin /boot-hakemistoon pitäisi ilmestyä vmlinux-2.6.8 tms. tyylinen tiedosto, joka on itse kerneli.

Käynnistyslatain

Avaa käynnistyslataimesi asetustiedosto (GRUB:illa /boot/grub/menu.lst ja lilolla /etc/lilo.conf) ja lisää sinne uuden ytimen tiedot ottaen mallia vanhoista (ei kannata poistaa vanhoja siltä varalta että ydin ei toimikkaan). Tallennuksen jälkeen lilo:n käyttäjien on asennettava lilo boottisektoriin uudelleen komennolla lilo.

Testaus

Boottaa kone, risti kädet ja toivo parasta!

Viimeistely

Jos ydin toimii, kannattaa luoda /usr/src-hakemistoon symbolinen linkki linux, joka viittaa kernelin lähdekoodihakemistoon (jotkut ohjelmat haluavat päästä käsiksi kääntövaiheessa ajossa olevan ytimen lähdekoodiin).

Säätäminen

On myös olemassa erillaisia muokkauspaketteja (patch) jolla saadaan kerneliin lisää tehoa tai uusia ominaisuuksia. Tutuimmat ovat esimerkiksi nitro, love, ck ja cko paketit.