Linuxi tuum
Sisukord
Tuum
Linuxi tuumale vastab üks ca 2500 kB fail, mis laaditakse mällu vahetult enne operatsioonisüsteemi käivitumist. Tuum on mälus kogu arvuti töötamise aja korraldades programmide ja füüsiliste seadmete vahelist läbisaamist. Samuti on tuuma ülesandeks tagada samaaegsete süsteemi kasutajate, õigemini nende poolt käivitatud programmide vahel õiglane süsteemi ressursside (mälu, protsessori aeg) jaotus.
_______________________ | | | rakendsprogrammid | |_______________________| ________ | | | TUUM | |________| _________| | .. |_______ | | | võrgukaart hiir kõvaketas
Või siis veel lihtsamalt:
Linux kasutab monoliitset tuuma, mis tähendab, et "kogu tarkus" kuidas operatsioonisüsteem suhtleb seadmetega sisaldub otse tuumas või tuuma moodulites. Tuuma moodulid sisaldavad infot selle kohta, kuidas tegeleda mõne konkreetse seadmega, näiteks helikaardiga. Modulaarsuse eeliseks on, et kui mõnda seadet parasjagu ei kasutata, siis on vastav moodul laadimata ning süsteem vähem koormatud.
Õigupoolest on operatsioonisüsteemi nimeks GNU Linux kusjuures Linux viitab konkreetselt tuumale. Linuxi tuuma patent kuulub selle arendamise alustajale ja peamisele ettevõtjale Linus Trovaldsile. Linus Trovaldsi nõusolekul ilmutatakse järgmine tuuma versioon.
Ametlikuks Linuxi tuuma leheküljeks on http://www.kernel.org/
Põhjalikuma kirjelduse leiab wikipedia lehelt http://en.wikipedia.org/wiki/Linux_kernel
Tuuma arendamine ja lähtetekstid
Erinvelt mitmetest teisest operatsioonisüsteemidest jagatakse Internetis Linuxi tuuma kompileerimiseks vajalikke C-keelseid lähtetekste tasuta. Keskmiselt kord paari kuu jooksul ilmub järgmine versioon. Linuxi tuuma arendatakse paralleelselt kahes harus:
- eksperimentaalne, versiooninumbri teine arv on paaritu (näiteks 2.3.33)
- stabiilne, versiooninumbri teine arv on paaris (näiteks 2.2.15)
Muuks, kui katsetusteks ei soovitata eksperimentaalseid tuumi kasutada. Kui tuumas parandatakse vigu (neid avastatakse aegajalt ka stabiilsetes tuumades!) või lisatakse midagi ideoloogiliselt väheolulist, näiteks toetus mõnele uuele seadmele, siis ilmutatakse järjekordne tuum ühe võrra suurendatud versiooninumbri viimase kohaga. Kui tuuma arendamisel toimub põhimõttelisi muutusi ja need loetakse stabiilseks, siis antakse välja tuuma versioon, mille teise koha numbrit on suurendatud järgmisele paarisarvule. Näiteks 1999. aasta detsembris lõpetas kernel 2.0.36 2.0.xx seeria ja välja tuli 2.2.0 kernel.
Tuuma lähtetekste saab kopeerida kas originaalserverist www.kernel.org või paljudest selle peeglitest, näiteks Eestist. Lähtetekstid on pakitult suurusega ca 15 MB ning nende tuumaks kompleerimiseks on vaja standardseid kompileerimisvahendeid, näiteks GNU C (EGCS) kompilaatorit ja lisavahendeid, mis on enamuse distributsioonidega kaasas.
Vajadus uue tuuma järele tekib tavaliselt siis, kui
- on vaja muuta tuuma konfiguratsiooni, näiteks hakata kasutama IP-aliasingut
- omandasite uue seadme ja soovite seda kasutama hakata, näiteks SCSI kõvaketta
- uues tuuma versioonis on parandatud olulisi vigu või on lisatud teile vajalikke uusi funtsioone
Ettevalmistused uue tuuma paigaldamiseks
Uue tuuma paigaldamisel tuleb sooritada järgmised sammud
1. teha endale selgeks miks on uut tuuma vaja 2. kopeerida Internetist tuuma lähtetekstid ja need arvutis lahti pakkida 3. uurides tuuma dokumentatsiooni veenududa, et teie operatsioonisüsteem sobib neist lähteteksidest kopileeritud tuuma kasutamiseks 4. konfigureerida tuum 5. kompileerida tuum 6. paigaldada tuum
Eelmises punktis selgitati miks on vaja hakata mõtlema uue tuuma peale ja kust milliseid lähtetekse kopeerida. Jätkame eeldades, et olete lähteteksid endale juba ära kopeerinud.
Viige lähteteksid kataloogi /usr/src enne veenududes, et seal pole kataloogi ega linki nimega linux. Igaks juhuks võite olemasoleva mõne muu nime alla liigutada. Kui uue tuuma tegemine peaks untsu minema, saab endise seisu taastada. Seejärel pakkige lähtetekstid lahti
bash# tar zxvf linux-2.2.xx.tar.gz
Lugege faili /usr/src/linux/Documentation/Changes kust saate teada kas teie süsteem sobib selle tuuma kasutamiseks.
Konfigureerimine
Tuuma konfigureerimisel näidatakse milliste omadustega uut tuuma soovitakse saada. Selleks sisenega kataloogi /usr/src/linux ning andke korraldus
bash# make menuconfig
(Lisaks on võimalik tuuma konfigureerida ka käskude make config ja make xconfig abil)
Avanenud dialoogide ehk menüüde vahel saab liikuda klaviatuuri abil kasutades nooli, tühikut ja enterit. Vaikimisi on juba osa valikuid teie eest tehtud ja kui te ei tea mis need tähendavad, ei maksa neid suvaliselt muuta. Kui valiku ees on [ ], siis saab tühiku vajutamisega sinna tekitada tärni ning järgmise tühiku vajutusega selle sealt eemaldada. Sellised omadused saab jätta valimata või nad otse kernelisse kompileerida. Kui valiku ees on < >, siis saab tühiku vajutusega tekitada sinna Mi, mis tähendab, et omadus kompileeritakse moodulina. Vajutades veel tühikut ilmub tärn, mis tähendab, et vastav täiendus kompileeritakse otse kernelisse ja veelkord algab ring taas. Järgnevalt kirjeldame üldiseid olulisi valikuid. Klahvid shift ja ? annavad täpsemat infot välja kohta.
- Code maturity level options - kui see võimalus valida, siis saata muudes sektsioonides näha ka neid valikud mida ehk ei peeta kõige stabiilsemateks, kuigi tegu võib olla stabiilse tuumaga.
- Processor type and features - näitate oma protsessori tüübi. Reeglina saab uuematel protsessoritel kasutada vanemate jaoks kompileeritud kernelit, aga mitte vastupidi.
- Loadable module support - võimalus kasutada tuuma mooduleid
Tuuma kompileerimine ja paigaldamine
Kopmileerimise tulemusena tekib tuum so tuumale vastav fail ja tuuma moodulid. Selleks andke korraldus
bash# make dep && make clean && make bzImage
Tuuma moodulite kompileerimiseks andke korraldus
bash# make modules
Selleks, et operatsioonisüsteem uut tuuma kasutama hakkaks tuleb tuum ja moodulid paigaldada. Esmalt kopeerige uus tuum /usr/src/linux/arch/x86/boot/bzImage näiteks juurkataloogi nime alla /k16. Mooduleid hoitakse kataloogi /lib/modules/2.2.xx/. Kui selline kataloogi juba ees on, siis tuleb ta kustutada või liigutada mõne muu nime alla. Installeerige moodulid paika selliselt
arch/x86/boot/bzImage
bash# make modules_install
Lisaks on oluline kopeerida kerneli sümboliteteisendusfail
bash# cp System.map /boot/System.map
Grub
Lilo
Kuna operatsioonisüsteem peab suutma leida tuuma veel enne kui ta teab midagi failisüsteemidest, siis vajad ta infot millisel füüsilisel aadressil arvuti kvakettal tuumale vastav fail asub. See info kirjutatakse arvuti kõvaketta või partitsiooni algusse käsuga lilo.
Esmalt redigeerige lilo konfiguratsioonifaili /etc/lilo.conf lisades sinna näiteks sektsiooni
image = /k16 root = /dev/hda2 label = k16 read-only
Töötava süsteemi puhul on seal kindlasti juba sarnane sektsioon olemas, kopeerige see ja tehke hädavajalikud muudatused.
- image - tuuma faili nimi
- root - juurfailisüsteemi nimi
- label - konkreetse tuumaga seostatud nimi
- read-only - peab olema
Laske lilol kirjutada info kõvaketta algusse, prooviks
bash# lilo -t Added k16 Added linux The boot sector and the map file have *NOT* been altered.
Kui te ei saa veateateid, siis kirjutage päriselt
bash# lilo Added k16 Added linux
Kui teie lilo.confis sisaldub mitu sellist sektsiooni, näites on kaks, siis te saate arvuti käivitamisel valida mitme tuuma vahel. Uue tuuma kasutuselevõtmisel soovitatakse alati jätta ka vana tuum, tema moodulid ja System.map alles; kui peaks olema üllatusi, saate vana juurde tagasi pöörduda. Kui arvuti käivitamisel ilmub tekst LILO, klõbistage shifti ja tabulaatorit ning te näete erinevaid labeleid. Sisestage selle labeli nimi millist tuuma te soovite kasutada. Vaikimisi kasutatakse esimest.
Peale õnnestunud tuuma paigaldamist võite tuuma lähtetekstid kustutada va kataloogi /usr/src/linux/include.
Moodulid
Tuuma moodulid on seotud tavaliselt konkreetse funktsiooniga, näiteks teevad võimlalikuks mõne seadme kasutamise.
Mõned käsud moodulite haldamise tarbeks
- lsmod näitab mis moodulid on sisse loetud (kui asi on kernelisse sisse kompileeritud kuigi võik olla moodul siis seda ei näidata.
- insmod sisestab mooduli
- modprobe sisestab mooduli ja sellele moodulile tööks vajalikud muud moodulid
- rmmod laeb mooduli maha
- depmod valmistab ette info modprobe jaoks (käivitada enne modprobe kasutamist)
Mooduli laadmisel saab ja tuleb tavaliselt näidata ära millisete omaduste seade töötab. Näiteks ISA ne2000 võrgukaardi mooduli laadimisel seadme IRQ ja IO aadress
bash# modprobe ne irq=10 io=0x300
Mooduli mälust eemaldamine toimub selliselt
bash# rmmod ne
Soovides näha millised moodulid parasjagu on mällu laaditud kasutage käsku lsmod
bash# lsmod
Moodulitega tegelemisel on vaja arvestada vastavate seadmete poolt tarvitatavaid ressursse. Abiks on uurida failide /proc/interrupts, /proc/dma ja /proc/io jt sisu.
Tuuma patchimine
Teatud juhtudel on vaja mõningate lisafunktsioonide toe saamiseks vaja tuuma koodi täiendada. Seda nimetatakse patchimiseks. Järgnevas näites vaatame kuidas lisada tuumale unionfs patch kuid kirjeldatud meetod töötab sarnaselt ka teiste stadartsete patchidega.
Unionfs (Unoverlay filesystem, to make read-only (e.g. optical) media writeable (by storing the changes in RAM or elsewhere), commonly used for livecd)
1. Tõmmata endale tuuma algkood
2. Minna aadressile http://www.fsl.cs.sunysb.edu/project-unionfs.html ja tõmmata sealt tuuma versioonile vastav patch, versioonide klappimine on oluline
3. kopeerida see kausta kus asub tuuma kood ja anda käsk
gzip -dc unionfs-*.diff.gz | patch -p1
4. Kompileerida kernel edasi tavaliste võtetega
Reboot linux faster with kexec
Kexec on linuxi kerneli paik, mis lubab bootida uude kernelisse. Kexec jätab vahele kogu bootloaderi ahela ja hüppab koheselt kerneli juurde, mida soovime laadida. Puudub seega rauatasemel toimuv reset, firmwarede aktiivsus jms. Seetõttu on töötava süsteemi taaslaadimine ülimalt kiire. Millest tulenevalt on downtime väiksem.
Gentoos tuleb paigaldada kexec-tools pakett
# emerge -av kexec-tools
Kerneli seadistus:
Processor type and features ---> [*] kexec system call (EXPERIMENTAL)
In Gentoo, Kexec is executed when you reboot, by reboot command or pressing Ctrl+Alt+Del.
Käsurealt Kexeci käivitamiseks:
# kexec -l <kernel-image> --append="<command-line-options>"
For example, if the kernel image you want to reboot is /boot/bzImage, and the contents of /proc/cmdline are "root=/dev/hda1", the command to load the kernel would be:
# kexec -l /boot/bzImage -append="root=/dev/hda1"
Lingid
Tuuma kompileerimisest põhjalikumalt
http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#SECTION-INTRO
Lihtsustatud skeem kerneli ehitusest
http://kernelnewbies.org/KernelSafari
Eestikeelne kerneli kompileerimise juhend
http://viki.pingviin.org/Vanilla_Kerneli_kompileerimine
http://kuutorvaja.eenet.ee/wiki/Tuuma_kasutamine
http://www.cyberciti.biz/tips/understanding-the-linux-kernel.html
http://flylib.com/books/en/1.410.1.18/1/
http://www.kutukupret.com/2008/06/27/anatomy-of-the-linux-kernel/