Linuxi tuum

Allikas: Kuutõrvaja

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:

295px-Kernel basic.svg.png

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

Linux kernel diagram.png

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)

Menuconfig.png

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/

http://www.makelinux.net/kernel/diagram