Ero sivun ”Ytimen kääntäminen” versioiden välillä

Siirry navigaatioon Siirry hakuun
9 merkkiä lisätty ,  16. maaliskuuta 2008
parantelua
p (siirsi sivun ”Kernelin kääntäminen” uudelleenohjauksen ”Ytimen kääntäminen” päälle: suomenkielinenkin sana löytyy)
(parantelua)
Rivi 1: Rivi 1:
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.
GNU/Linux käyttöjärjestelmän ytimen (engl. ''kernel'') kääntämistä pidetään usein erittäin hankalana, mitä se tosiasiassa ei ole. Nykyisin käyttäjän tarve kääntää ydin itse on vähentynyt, mutta toimenpide voi olla tarpeellinen esimerkiksi eksoottisempien oheislaitteiden toimimaan saattamiseksi. Toinen yleinen syy on halu optimoida ytimestä 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 asetukset ovat valittuna jo [[jakelu]]n vakioytimessä (engl. ''stock kernel''). Tarkista kuinka vanhaa ohjetta luet.


==Ytimen hakeminen==
==Ytimen hakeminen==
Helpoimmalla pääsee, jos ytimen lähdekoodi löytyy paketinhallinnasta (monissa järjestelmässä paketinhallinnan kautta löytyy myös valmiiksi käännettyjä ytimiä). Tällöin haettaessa lähdekoodit  paketinhallinnalla, mukaan tulee usein joitain pieniä jakelun ylläpitäjien tekemiä päivityksiä, jotka esimerkiksi lisäävät suorituskykyä tai vakautta. Huomaa kuitenkin, että vaikka haet lähdekoodin paketinhallinnan kautta, on kääntäminen tehtävä käsin.
Helpoimmalla pääsee, jos ytimen lähdekoodi löytyy paketinhallinnasta (useimmissa jakeluissa paketinhallinnan kautta löytyy myös valmiiksi käännettyjä ytimiä). Jos haet lähdekoodin paketinhallinnasta, saat käyttöön saman lähdekoodin, josta jakelun vakioytimetkin on käännetty. Tällöin mukana on usein pieniä muutoksia jotka saattavat lisätä suorituskykyä tai tuoda ominaisuuksia, jotka virallisesta (siis kernel.orgin) lähdekoodipuusta puuttuvat. Huomaa kuitenkin, että vaikka haet lähdekoodin paketinhallinnan kautta, on kääntäminen tehtävä käsin.


Jos paketinhallinnassa ei ole sinulle sopivaa lähdekoodipakettia, [http://www.kernel.org kernel.orgista] voi ladata uusimman julkaistun ytimen. Nykyään on suositeltavaa käyttää uusinta vakaata 2.6-sarjan ydintä. Lataa paketti esimerkiksi /usr/src -[[Linuxin hakemistorakenne|hakemistoon]] ja pura se. <tt>tar.bz2</tt>-päätteinen paketti puretaan komennolla <tt>[[tar]] jxvf linux-2.6.x.x.tar.bz2</tt> ja <tt>tar.gz</tt>-päätteinen komennolla <tt>tar zxvf linux-2.6.x.x.tar.gz</tt>. Purettuasi paketin siirry tuloksena syntyneeseen uuteen hakemistoon. Ytimen lähdekoodin saa ladattua myös Suomessa sijaitsevalta [ftp://ftp.fi.kernel.org/pub/linux/kernel/v2.6/ ftp.fi.kernel.org]-palvelimelta.
Jos paketinhallinnassa ei ole sinulle sopivaa lähdekoodipakettia, [http://www.kernel.org kernel.orgista] voi ladata uusimman julkaistun ytimen. Nykyään on suositeltavaa käyttää uusinta vakaata 2.6-sarjan ydintä. Lataa paketti esimerkiksi /usr/src -[[Linuxin hakemistorakenne|hakemistoon]] ja pura se. <tt>tar.bz2</tt>-päätteinen paketti puretaan komennolla <tt>[[tar]] jxvf linux-2.6.x.x.tar.bz2</tt> ja <tt>tar.gz</tt>-päätteinen komennolla <tt>tar zxvf linux-2.6.x.x.tar.gz</tt>. Purettuasi paketin siirry tuloksena syntyneeseen uuteen hakemistoon. Ytimen lähdekoodin saa ladattua myös Suomessa sijaitsevalta [ftp://ftp.fi.kernel.org/pub/linux/kernel/v2.6/ ftp.fi.kernel.org]-palvelimelta.


Kannattaa huomata, etteivät kaikki ytimen ulkopuoliset ajurit välttämättä toimi uusimpien ytimen versioiden kanssa. Samassa lähdekoodipaketissa olevat koodit ''oikein'' konfiguroituina toimivat, mutta ulkopuoliset ajurit saattavat kieltäytyä kääntymästä sen vuoksi, että ytimessä on kehityksen myötä poistunut jotain tai jokin ajurin kannalta olennainen ominaisuus on ratkaisevasti muuttunut.
Kannattaa huomata, etteivät kaikki ytimen ulkopuoliset ajurit välttämättä toimi uusimpien ytimen versioiden kanssa. Samassa lähdekoodipaketissa olevat moduulit ''oikein'' säädettynä toimivat, mutta ulkopuoliset ajurit saattavat kieltäytyä kääntymästä sen vuoksi, että ytimessä on kehityksen myötä poistunut jotain tai jokin ajurin kannalta olennainen ominaisuus on ratkaisevasti muuttunut. Tämä koskee erityisesti suljetun lähdekoodin ohjelmien käyttämiä moduuleita.


==Asetusten tekeminen==
==Asetusten tekeminen==
Nykyisen ytimen version näet komennolla <tt>uname -a</tt>. Mikäli käytössäsi on jo 2.6-sarjan ydin, kannattaa tutkia löytyykö ytimen asetustiedosto (<tt>.config</tt>) 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ä <tt>.config</tt>. Aja tämän jälkeen komento <tt>make oldconfig</tt> jolloin sinulta kysytään asetukset niihin ominaisuuksiin, joita vanhassa asetustiedostossa ei ollut.
Nykyisen ytimen version näet komennolla <tt>uname -a</tt>. Mikäli käytössäsi on jo 2.6-sarjan ydin, kannattaa tutkia löytyykö ytimen asetustiedosto (<tt>.config</tt>) 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ä <tt>.config</tt>. Aja tämän jälkeen komento <tt>make oldconfig</tt> 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 <tt>make menuconfig</tt> (yleisin ja toimii lähes aina), <tt>make xconfig</tt> (Graafinen, Qt-kirjastoa käyttävä), <tt>make gconfig</tt> (Graafinen, GTK+-kirjastoa käyttävä) tai <tt>make config</tt> (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.
Jos sinulla ei ole vanhaa asetustiedostoa tai jos haluat tehdä itse asetuksia, aja komento <tt>make menuconfig</tt> (yleisin ja toimii lähes aina, käyttää [[curses]]-kirjastoa), <tt>make xconfig</tt> (Graafinen, Qt-kirjastoa käyttävä), <tt>make gconfig</tt> (Graafinen, GTK+-kirjastoa käyttävä) tai <tt>make config</tt> (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.
Mikäli et tee ns. [[initrd]]-ydintä, on syytä muistaa että ''juuriosion tiedostojärjestelmän ajuri on käännettävä ytimen sisään'', muuten käynnistettäessä seuraa [[kernel panic]]. 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. <tt>lspci -v</tt> -komento antaa hyödyllistä tietoa laitteistostasi, ja runsaasti lisätietoa löytyy <tt>/proc</tt>-väylältä. Esimerkiksi tiedosto <tt>/proc/cpuinfo</tt> 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 saattaa olla hieman hitaampi kuin edistyneempiä ominaisuuksia hyödyntävät ytimet. 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.
 
Valitessasi ytimen asetuksia on hyvä tutustua tarkkaan koneesi laitteistoon. <tt>lspci -v</tt> -komento antaa hyödyllistä tietoa laitteistostasi, ja runsaasti lisätietoa löytyy <tt>/proc</tt>-väylältä. Esimerkiksi tiedosto <tt>/proc/cpuinfo</tt> 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 huomattavan 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.
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.
Rivi 26: Rivi 24:
Asetusten tekemisen jälkeen ydin kääntyy yksinkertaisesti komennolla <tt>make</tt>. Jos kääntäminen keskeytyy johonkin virheeseen, on syytä kääntää kriittinen katse asetustiedostoa kohtaan.
Asetusten tekemisen jälkeen ydin kääntyy yksinkertaisesti komennolla <tt>make</tt>. Jos kääntäminen keskeytyy johonkin virheeseen, on syytä kääntää kriittinen katse asetustiedostoa kohtaan.


Perinteinen tapa kääntää kerneli:
Ytimen oman ohjeistuksen mukainen komento ytimen kääntämiseen on yksinkertaisesti:
  make
  make


Mikäli käytettävissä on useampia suorittimia, tai suoritinytimiä, kannattaa kääntää useammassa säikeessä:
  CONCURRENCY_LEVEL=2 make
  CONCURRENCY_LEVEL=2 make


kääntää ytimen kahdessa säikeessä. Tämä on erityisen suositeltavaa moniprosessorikoneilla, mutta se todennäköisesti nopeuttaa työskentelyä myös yhdellä prosessorilla, sillä yhdessä säikeessä kääntäminen ei jatkuvasti käytä kaikkea prosessoritehoa hyödykseen.
Tämä on erityisen suositeltavaa moniprosessorikoneilla, mutta se todennäköisesti nopeuttaa työskentelyä myös yhdellä prosessorilla, sillä yhdessä säikeessä kääntäminen ei jatkuvasti käytä kaikkea prosessoritehoa hyödykseen.


=== Kääntäminen Debianissa ===
=== Kääntäminen Debianissa ===
Rivi 70: Rivi 69:
Myöskin erikseen käännetyt kernelin modulit on nyt käännettävä uudestaan, jotta ne toimisivat uuden kernelin kanssa.
Myöskin erikseen käännetyt kernelin modulit on nyt käännettävä uudestaan, jotta ne toimisivat uuden kernelin kanssa.


==Säätäminen==
=="Virityssarjat"==
On myös olemassa erillaisia muokkauspaketteja (patch) jolla saadaan kerneliin lisää tehoa tai uusia ominaisuuksia. Tutuimmat ovat esimerkiksi nitro, love, ck ja cko paketit. Nykyisin nämä kaikki on saatavissa beyond-patchissä: http://iphitus.loudas.com/beyond.html
On myös olemassa erillaisia muokkauspaketteja ([[patch]]) jolla saadaan kerneliin lisää tehoa tai uusia ominaisuuksia. Tutuimmat ovat esimerkiksi nitro, love, ck ja cko paketit.  
 
Kernelin patchit toimitataan yleensä .patch-, .diff--, .bz2 tai .gz-muodoissa:
Kernelin patchit toimitataan yleensä .patch-, .diff--, .bz2 tai .gz-muodoissa:


Navigointivalikko