Copyright (C) 1996 Jari Kaasalainen (jari.kaasalainen@iki.fi) Tätä dokumenttia saa kopioida ja levittää muuttamattomana vapaasti. Jos levität muutettua tai lyhennettyä versiota dokumentista, tätä tekijänoikeusmerkintää ei saa poistaa. En ota vastuuta mahdollisista virheistä enkä varsinkaan muiden muuttamista versioista. Jos teet dokumenttiin lisäyksiä tai korjauksia, merkitse selvästi oma työsi. Parasta olisi, jos lähettäisit korjausehdotuksesi minulle osoitteeseen jjk@iki.fi jolloin ne voidaan ottaa mukaan alkuperäiseen tekstiin. Versio 1.0 13.1.1997 1. Mikä on kernel? Asennuksen yhteydessä kiintolevyllesi asentuu aina myös ns. kernel. Kernel on käyttöjärjestelmän ydin, joka huolehtii kaikesta tieto- liikenteestä käyttäjän ja koneen välillä. Kerneliin on sisällytetty monia erilaisia laiteajureita, jotka ohjaavat koneeseen kytkettyjä eri lisälaitteita, kuten CD-ROM-asemia, verkko- ja äänikortteja yms. Koska PC-koneita voi olla vaikka minkälaisia (itse asiassa PC voi olla muukin kuin vain ns. IBM PC -yhteensopiva, kuten esim. Amiga, Apple MacIntosh, BeBox, Digitalin Alphaakin voinee sanoa PC:ksi), ei kerneliin voi, eikä kannata sisällyttää kaikkien mahdollisten lisälaitteiden ajureita. Jos koneessa ei ole Sound Blaster-äänikorttia, ei kernelissä tarvita myöskään tukea sille. Turhien laiteajureiden lisääminen vain kasvattaa turhaan kernelin kokoa ja hidastaa koneen toimintaa. Tämän takia kannattaakin jokaiseen koneeseen tehdä juuri sille sopiva kernel, tätä sanotaan "kernelin kääntämiseksi". 2. Mitä kernelin kääntämiseen tarvitaan? Jotta kernel voidaan kääntää, tarvitsee Linux-koneessa olla sekä C-kääntäjä ja Linux-kernelin lähdekoodit. Lisäksi asennettuna pitää olla bash-komentotulkki (shell). C-kääntäjänä Linuxissa käytetään GNU C-kääntäjää (lyhyesti GCC), joka on kaikkien GNU-lisenssin alaisuudessa olevien ohjelmien tapaan vapaasti levitettävissä. Kaikissa distribuutioissa on mahdollisuus asentaa asennuksen aikana myös GCC, joka kannattaa aina asentaa, C ja *nix kun ovat oikeastaan erottamattomia. Varsinaisen C-kääntäjän lisäksi pitää asentaa myös ohjelma nimeltä 'make'. Kernelin lähdekoodit toimitetaan useimpien distribuutioiden mukana, mutta koska ne ovat yleensä jo valmiiksi vanhentuneita (parhaimmillaan Linus saattaa tehdä viikonkin aikana useamman version!), kannattaa käydä hakemassa uusin versio Funetista tai sen mirrorista. ftp.funet.fi/pub/Linux/PEOPLE/Linus/ Versionumeroinnista kannattaa huomata se, että Linuxista on aina työn alla kaksi eri versiota. Toinen on ns. tuotantoversio, joka on versio, johon ei tule enää uusia ominaisuuksia, ainoastaan bugikorjauksia. Toinen versio taas on kehitysversio, jossa testataan uusia ominaisuuksia ja joka saattaa olla hyvinkin epävakaa. Aloittelijan kannattaa käyttää aina tuotantoversiota, eikä kehitysversio muutenkaan sovellu kuin niille, jotka haluavat olla aktiivisesti Linuxin kehityksessä mukana. Versiot numeroidaan tyyliin: .. Tuotanto- ja kehitysversiot tunnistaa siitä, että tuotantoversiot ilmaistaan parillisilla ja kehitysversiot parittomilla numeroilla. Esim. versio 2.0.26 tarkoittaa että kyseessä on Linuxin kernel-versio 2, joka on tuotantoversio ja jonka patch-taso on 26. Versionumero 2.1.17 taasen tarkoittaa kernel-version 2 kehitysversiota 1, jonka patch-taso on 17. Tätä kirjoitettaessa viimeisin tuotantoversio on 2.0.27. Kernelin lähdekoodit ovat todella massiivisia (pakattuna n. 6 megatavua), joten niiden siirtämiseen omalle koneelle kannattaa varata riittävästi aikaa ja lisäksi varmistaa, että koneen kiintolevyltä löytyy tarpeeksi tilaa niiden purkamiseen. 3. Mitä lähdekoodipaketilla tehdään? Oletetaan, että olet siirtänyt koneellesi Funetista hakemasi paketin linux-2.0.26.tar.gz, joka sisältää siis lähdekoodit kernelin versioon 2.0.26 ja jonka olet siirtänyt oman koneesi hakemistoon /root. Lisäksi oletetaan, että nykyinen kernelversiosi on 2.0.0, jonka lähdekoodit ovat hakemistossa /usr/src/linux. Ensimmäiseksi kirjaudu sisään järjestelmään tunnuksella root, ellet ole sitä jo tehnyt. Siirry hakemistoon /usr/src ja katso sen hakemistolistaus komennolla ls -l. Sieltä pitäisi löytyä seuraava hakemisto: drwxr-xr-x 15 root root 1024 Dec 8 19:35 linux/ Muuta tämän hakemiston nimi vaikkapa linux-2.0.0:ksi komennolla: mv linux linux-2.0.0 Mikäli hakemistossasi on jo linux-2.0.0 -hakemisto ja sen lisäksi seuraava linkki: lrwxrwxrwx 1 root root 12 Dec 10 19:32 linux -> linux-2.0.0 ei uudelleennimeämistä tarvita. Ylläoleva tiedosto on ns. linkki hakemistoon linux-2.0.0, joka tarkoittaa, että aina kun siirrytään hakemistoon linux, siirrytäänkin oikeasti hakemistoon linux-2.0.0. Tämä linkki pitää kuitenkin poistaa ennen uuden kernelin asennusta, koska (ainakin uusissa kernelpaketeissa) uusi kernel asentuu oletus- arvoisesti hakemistoon linux/. Poistaminen tapahtuu komennolla: rm -f linux Seuraavaksi pura uudet lähdekoodit sisältävä paketti komennolla: tar xzvf /root/linux-2.0.26.tar.gz Nyt kun komennat jälleen ls -l, pitäisi hakemistossa olla tällaiset alihakemistot: drwxr-xr-x 15 root root 1024 Dec 8 19:35 linux-2.0.0/ drwxr-xr-x 15 root root 1024 Dec 22 13:17 linux/ Tulevaisuutta ajatellen kannattaa linux-hakemisto muuttaa jälleen vastaamaan kyseistä kernel-versiota, eli komenna jälleen: mv linux linux-2.0.26 Koska kernelin käännössä tarvitaan kuitenkin myös linux-hakemistoa, pitää nyt luoda linkki tähän hakemistoon, jotta lähdekoodit löytyvät. Komenna: ln -s linux-2.0.26 linux Varmista vielä, että hakemistosta löytyy seuraavat linkit ja hakemistot: # ls -l lrwxrwxrwx 1 root root 12 Dec 10 19:32 linux ->linux-2.0.26/ drwxr-xr-x 15 root root 1024 Dec 8 19:35 linux-2.0.0/ drwxr-xr-x 15 root root 1024 Dec 22 13:17 linux-2.0.26/ Jos et halua säilyttää vanhoja kernel-versioita, voit tuhota ne komentamalla: rm -rf linux- Tee tämä kuitenkin vasta, kun olet todennut uuden kernel-version taatusti toimivan koneellasi! 4. Seuraa linkkejä Seuraavaksi pitää varmistaa, että myös seuraavat linkit löytyvät hakemistosta /usr/include: /usr/include/asm, /usr/include/linux ja /usr/include/scsi. Varmimmin asia hoituu, kun suoritat seuraavat komennot: cd /usr/include rm -rf asm linux scsi ln -s /usr/src/linux/include/asm-i386 asm ln -s /usr/src/linux/include/linux linux ln -s /usr/src/linux/include/scsi scsi Tässä vaiheessa kannattaa myös siivota mahdolliset ylimääräiset .o-tiedostot, joka tapahtuu menemällä takaisin /usr/src/linux-hakemistoon ja antamalla komento: make mrproper 5. Mitä saisi olla? Nyt voidaankin alkaa valitsemaan, mitä uuteen kerneliin halutaan mukaan. Mikäli et ole hakemistossa /usr/src/linux, siirry sinne. Kernelin konfigurointi voidaan suorittaa kolmella tapaa. Perinteinen tapa on käyttää tavallista config:ia, joka tapahtuu komennolla: make config Koska config on kuitenkin melko ei-käyttäjäystävällinen, kannattaa mieluummin käyttää menuconfigia, joka antaa käyttöön helppokäyttöisen valikon, josta voidaan nuolinäppäimillä valita halutut optiot. Mikäli käytössäsi on X Window System, voit käyttää myös xconfigia, jolla saat vielä helpomman hiiriohjatun menun käyttöösi. X vie kuitenkin paljon tehoa samoin kuin kernelin kääntäminenkin, joten sitä ei kannata käyttää ellei käytössäsi ole tehokasta konetta. Komenna: make menuconfig tai: make xconfig 5.1 make menuconfig Vaikka normaali (=guru ;) tapa suorittaa kerneliin tulevien ajurien yms. valinta onkin normaali config, niin selitän tässä ainoastan menuconfigin käyttöä. Ensinnäkin se on paljon selkeämpi ja toiseksi se on myös ainoa tapa, jota itse olen käyttänyt. Mikäli haluat tai joudut käyttämään jotain muuta vaihtoehtoa, pitäisi tästä oppaasta kuitenkin olla apua myös siihen. Kun menuconfig on kääntynyt, voit liikkua valikoissa nuolinäppäimien ja -näppäimen avulla. Valittuasi jonkin alivalikon (selitän jokaisesta erikseen myöhemmin), voit sisällyttää kunkin option kerneliin näin: painamalla 'Y' optio sisällytetään suoraan kerneliin, 'N' poistaa valinnan, 'M' tekee optiosta erikseen ladattavan moduulin (tästä enemmän myöhemmin). Nämä ohjeet pätevät ainakin kernelin versioon 2.0.26. Jotkut kohdat ovat hieman keskeneräisiä johtuen kirjoittajan tiedon puutteesta. Täydennyksiä/korjauksia otetaan vastaan kiitollisuudella. 5.1.1 Code maturity level Jos haluat käyttää vielä testausvaiheessa olevia optioita (kuten JAVA-tuki), valitse tämä. Valikkoihin ilmestyy muutamia uusia optioita, joita ei näy ilman tätä. Tällaiset optiot on erikseen mainittu tässä tekstissä. Jokainen käyttää kuitenkin näitä omalla vastuullaan, joten jos haluat olla varma kernelin vakaudesta, älä valitse tätä. 5.1.2 Loadable module support Ladattavien moduulien tuki. Jos haluat, voit tehdä joistakin optioista erikseen insmod-komennolla ladattavia. Esim. jos et halua jokaisen käynnistyksen yhteydessä automaattisesti ladata esim. verkkokortin ajureita (mikäli koneesi ei ole aina verkossa), voit tehdä siitä erikseen ladattavan moduulin. Jos jokin optio on moduulikelpoinen, se on merkitty '< >'-merkeillä. '[ ]'-merkeillä varustetut optiot on sisällytettävä kerneliin tai jätettävä kokonaan pois. Moduuleista on hyötyä erityisesti silloin, kun keskusmuisti on pieni ja halutaan tehdä mahdollisimman pieni kernel, mutta kuitenkin varmistaa että kaikki tarpeelliset ajurit ovat silti käytettävissä haluttaessa. Jäljempänä on erikseen kerrottu onko joku optio mahdollista modularisoida. 5.1.3 General setup Yleisiä asetuksia. Kernel math emulation - jos koneessasi ei ole matematiikkaprosessoria (useimmat 386-koneet, 486sx), valitse tämä, jolloin Linux emuloi matematiikkaprosessoria (tarpeellinen joissakin tehtävissä). Networking support - jos haluat käyttää erilaisia verkko-ohjelmia (mail, pine, lynx) valitse tämä. Limit memory to low 16MB - tarkkaa merkitystä en tiedä, mutta en ole itse koskaan tarvinnut. PCI bios support - ei tarkkaa tietoa, PCI-väyläisissä koneissa ilmeisesti kannattaa käyttää. PCI bridge optimization - ei tarkkaa tietoa. Testausasteella. System V IPC - ei tietoa. Kernel support for a.out binaries - jos tiedät ettet tule käyttämään vanhoja a.out-formaatissa olevia ohjelmia, voit jättää pois, mutta haittaakaan tuskin on. Moduulikelpoinen. Kernel support for ELF binaries - useimmat uudet Linuxissa käytetyt ohjelmat on yleensä käännetty ELF-formaattiin, joten valitse tämä. Moduulikelpoinen, mutta kannattaa kääntää suoraan kerneliin. Kernel support for JAVA binaries - tuki JAVA:lle, jolla voit ajaa JAVA-ohjelmia suoraan komentoriviltä. Testausvaiheessa. Moduulikelpoinen. Compile kernel as ELF - mikäli c-kääntäjäsi (lähes aina gcc, eli GNU C) on ELF-tyyppinen (ainakin versiot 2.7.x ovat), valitse tämä. Uusimpien Linux-distribuutioiden mukana toimitettava gcc on ELF-formaatissa. Processor type - valitse listasta prosessorisi tyyppi. Cyrixin 686- prosessorit tarvitsevat erillisen päivityksen, jotta kernel tunnistaa ne Pentium-tyyppiseksi. 5.1.4 Floppy, IDE, and other block devices Levykeasemien, IDE-liitäntäisten laitteiden ja muiden ei-SCSI-laitteiden ajureita. Normal floppy disk support - koska koneessasi todennäköisesti on levyke- asema, valitse tämä. Moduulikelpoinen. Enhanced IDE/MFM/RLL disk/cdrom/tape support - käytät todennäköisesti IDE-kiintolevyä, joten valitse tämä. Jos käytät ainoastaan SCSI-laitteita, et tarvitse tätä. Moduulikelpoinen. Use only disk-only driver on primary interface - ei tietoa, jätä pois. Include IDE/ATAPI CDROM support - mikäli CD-asemasi on normaali IDE- liitäntäinen malli, valitse tämä. Ellei, valitse myöhemmässä vaiheessa oikea malli. Include IDE/ATAPI TAPE support - jos koneessasi on IDE-liitäntäinen nauha-asema, valitse tämä. Support removable IDE interfaces (PCMCIA) - jos käytät siirrettäviä PCMCIA-kiintolevyjä, valitse tämä. (Seuraavat liittyvät emolevysi piirisarjoihin. Jos tiedät emollasi olevan joku niistä, valitse se.) Loopback device support - ei tarkkaa tietoa, valitse kuitenkin. Moduulikelpoinen. Multiple devices driver support - ei tarkkaa tietoa (nimestä voisi päätellä, että jos käytät useita laitteita (mitä?), tarvitset tätä). RAM disk support - jos haluat käyttää osaa muististasi RAM-levynä, valitse tämä. Moduulikelpoinen. XT harddisk support - ei tietoa. 5.1.5 Networking options Verkkoihin liittyviä asetuksia. 5.1.6 SCSI support SCSI-laitteiden ajureita. Koska en itse käytä muita SCSI-laitteita kuin ulkoista rinnakkais- porttiin liitettävää Iomega ZIP-asemaa, en osaa kertoa niistä muuta kuin sen, että valitsemalla SCSI support, SCSI disk support ja SCSI low level drivers -valikosta IOMEGA Paraller Port support, ZIP-aseman pitäisi toimia. Kun mounttaat ZIP-levykkeen, niin partitio on todennäköisesti /dev/sda4. Miksi juuri 4, sitä ei tunnu tietävän kukaan. 5.1.7 Network device support Verkkokortteihin ja -protokolliin liittyviä ajureita. 5.1.8 ISDN subsystem ISDN-laitteiden ajureita. En itse omista ISDN:ää, joten en tiedä näistä sen enempää. 5.1.9 CD-ROM drivers (not for SCSI of IDE/ATAPI drives) Mikäli CD-asemasi ei ole normaali IDE- tai SCSI-liitäntäinen malli, valitse listasta oikea. 5.1.10 Filesystems Tiedostojärjestelmien tuki. Valitse näistä ne tiedostojärjestelmät, joiden tuen haluat kerneliin. Quota support - jos haluat rajoittaa käyttäjien käytettävissä olevaa levytilaa, valitse tämä. Mandatory lock support - ei tietoa, voi jättää pois. Seuraavat voi tehdä moduuleiksi. Useimmat tuskin tarvitsevat muita kuin Second Extendedin ja FATin. Minix - Minix-käyttöjärjestelmän tiedostojärjestelmä. Extended - alkuperäinen Linuxin tiedostojärjestelmä. Second extended - nykyisin käytetty Linuxin tiedostojärjestelmä. Valitse tämä. xiafs - ei tietoa. DOS FAT - jos haluat käyttää DOS-osioitasi Linuxista, valitse tämä. MSDOS - erikseen Microsoftin DOSille. VFAT - Windows95:n käyttämä tiedostojärjestelmä. umsdos - jos asensit Linuxin umsdos-versiona FAT-osiolle, valitse tämä. /proc - ei tarkkaa tietoa, valitse kuitenkin. NFS - toisten koneiden osioiden mounttaaminen verkon kautta. Moduulikelpoinen. Root fs on NFS - jos root-osiosi on jollain muulla verkon koneella kuin omallasi. SMB - Windows for Workgroups:n jaettujen tiedostojen käyttämiseen. ISO9660 cdrom - useimmat CD-asemat tarvitsevat tätä ISO-standardia. Moduulikelpoinen. OS/2 - jos haluat käyttää OS/2:n HPFS-osioita Linuxista. Vain luku, eli et voi kirjoittaa HPFS-osioille. Moduulikelpoinen. System V and Coherent - ei tietoa. Moduulikelpoinen. Amiga FFS - tuki Amigan tiedostojärjestelmälle. Testausvaiheessa. Moduulikelpoinen. UFS - ei tietoa. Moduulikelpoinen. 5.1.11 Charater devices Jos käytät jotain erikoisia sarja- tai rinnakkaisporttiin liitettäviä laitteita, valitse se/ne listasta. Useimmille riittää pelkkä Standard/ generic serial support, jolloin hiirikin toimii. Sen voi myös tehdä moduuliksi. 5.1.12 Sound Äänikorttiajurit. Myös moduulikelpoinen. Valitse listasta oma äänikorttisi. Sound Blasterin kohdalla pitää kertoa myös oikea I/O-väylä, keskeytys-osoite (IRQ) ja DMA. SB16 tarvitsee myös oikean 16bittisen DMA:n ja MPU401-väylän osoitteet. Ellet ole muuttanut niitä, tehdasasetusten pitäisi olla kohdallaan. Tarkista ne äänikorttisi ohjekirjasta, jos äänikorttisi ei toimi kernelin kääntämisenkään jälkeen. /dev/dsp and /dev/audio support - ei tarkkaa tietoa, valitse kuitenkin. 5.1.13 Kernel hacking Hackers only ;). Jos tiedät mikä tämä on, sinun ei tarvitse lukea tätä opasta. 5.1.14 Load / Save Jos käytät jotain muuta (valmista) konfigurointi-tiedostoa voit ladata sen Load-kohdasta. Jos haluat tallettaa tekemäsi asetukset tietyn nimiseen tiedostoon, se onnistuu Save-kohdasta. 6. Kääntäminen Kun olet valinnut kaikki haluamasi optiot kerneliin, voit halutessasi vielä tarkastella /usr/src/linux hakemistosta löytyvää tiedostoa Makefile. Mikäli olet tyytyväinen, voit seuraavaksi komentaa: make dep make clean Nämä komennot suorittavat muutamia tarkistus- ja siivousrutiineja. Varsinainen kääntäminen voidaan tehdä monella tavalla, tavallisin lienee komento: make zImage Tämä tekee hakemistoon /usr/src/linux/arch/i386/boot-hakemistoon tiedoston zImage, joka on uusi kernelisi. Voidaksesi käyttää sitä, se on kopioitava siihen paikkaan josta käynnistät Linuxin. Esim. jos kernel sijaitsee tiedostossa /vmlinuz, komenna: cp zImage /vmlinuz Muista ottaa alkuperäisestä varmuuskopio! Jos käytät buuttaukseen käynnistyslevykettä, varmista, että levykeasemassa on tyhjä levyke ja komenna: make zdisk Tämä luo myös zImage-tiedoston ja kopioi sen myös levykkeelle, jota voit käyttää Linuxin käynnistämiseen. Tämä tapa on varteenotettava, varsinkin jos et ole sataprosenttisen varma siitä, että uusi kernelisi toimii luotettavasti. Mikäli käynnistys epäonnistuu, voit aina käynnistää vanhan kernelisi joko vanhalta käynnistyslevykkeeltäsi tai kiintolevyltäsi, riippuen siitä minne se on asennettu. Jos käytät LILO:a ja olet varma, että kernelisi toimii, voit komentaa: make zlilo Tämä tekee myös zImage-tiedoston ja muokkaa LILO:a niin, että Linux käynnistyy uudella kernelilläsi kun seuraavan kerran käynnistät sen. Muista jälleen, että käynnistyslevyke varmasti toimivalla kernelillä on hyvä olla olemassa mikäli näin ei käy! Mikäli otit käyttöön myös moduulit, ne täytyy vielä lopuksi asentaa komennoilla: make modules make modules_install 7. Uuden kernelin käyttö Kun olet kääntänyt kernelin ja siirtänyt sen oikeaan paikkaan, voit testata sen toimivuuden käynnistämällä koneen uudelleen. Mikäli kone jumittuu, käytä toimivaa käynnistyslevykettä ja tarkista kaikki valitsemasi optiot. Kun olet varma, että kaikki valitsemasi on oikein, käännä kernel uudelleen ja kokeile. Mikäli mikään ei auta, kannattaa asiaa kysellä tarkemmin esim. Internetin sfnet.atk.linux-uutisryhmässä.