Portál AbcLinuxu, 28. března 2024 11:56

Kompilovanie jadra - I

31. 5. 2004 | Rastislav Stanik
Články - Kompilovanie jadra - I  

Co je to vlastně jádro, kdy je potřeba jej kompilovat a jak na to jít. První díl článku vysvětlí teorii, druhý vás provede praxí.

Načo jadro vlastne je

Keď sedíte za počítačom a čítate tento článok, robíte tak pomocou prehliadača a možno vám do toho počítač hrá nejakú muziku a tlačí na tlačiarni dokument. Za tým všetkým je ale schované niečo iné. Nenápadné. Jadro.

Jadro (angl. kernel) má tieto hlavné úlohy:

  1. Štartovanie systému
  2. Ovládačmi sprostredkováva prístup k hardwaru
  3. Poskytuje programom prostriedky (angl. resources) ako sú pamäť alebo čas, kedy sa inštrukcie programu môžu vykonávať v procesore

Pri štarte počítača sa používa dohoda o tom, akým spôsobom BIOS odovzdá riadenie operačnému systému. Táto dohoda prakticky znamená, že po vykonaní štartovacích testov pamate a niektorých periférií sa riadenie odovzdá tzv. boot manageru. V Linuxe sa najčastejšie používa lilo, grub alebo loadlin, či boot manažér iného operačného systému - napr. Windows. Úlohou boot manažéra je nájsť na disku súbor jadra, nahrať ho do pamäti a odovzdať mu riadenie.

V podstate každý kus hardwaru v počítači potrebuje svoj ovládač. Klávesnica, video-karta, sieťová karta, sériové, paralelné či USB porty, disk, disketová mechanika a tak ďalej. Okrem toho existujú aj ovládače pre algoritmické záležitosti ako sú súborové systémy, sieťové protokoly či rôzne systémy ako napr. APM (advanced power managerment). Jadro poskytuje množinu funkcií, ktoré umožňujú programom robiť rôzne operácie ako napríklad otvorenie súboru.

Moderné operačné systémy sú mnohoúlohové (umožňujú beh viacerých programov naraz) a mnohoužívateľské (umožňujú prácu viacerých užívateľov naraz). Jadro sa stará o to, aby rozdelenie výkonu, pamati a sieťovej priepustnosti bolo spravodlivo rozdelené medzi bežiace programy (potenciálne rôznych užívateľov).

Prečo?

Najčastejšie dôvody pre kompilovanie jadra:

  1. Snaha niečo sa dozvedieť.
  2. Pridanie podpory pre hardware, ktorý pôvodným jadrom podporovaný nie je.
  3. Snaha o zmenu konfigurácie ovládačov z hľadiska toho, či sú priamo v jadre, alebo existujú ako moduly.
  4. Opravy chýb v jadre.
  5. Snaha niečo si dokazovať a dvíhať si sebavedomie :-)

Keď dostanete do ruky inštaláciu linuxového systému, tak spravidla vlastne máte nejakú distribúciu. Niekto zobral jadro a množinu programov a dal ich dohromady tak, aby spolu fungovali. Medzi známe distribúcie patrí Red Hat, Debian, Mandrake či Slackware alebo Gentoo. Ten, kto distribúciu zostavuje, sa spravidla postará o to, abyste dostali aj jadro (niekedy máte na výber z viacerých). Toto jadro bolo tvorcom distribúcie nejako nakonfigurované. Spravidla tak, aby podporovalo čo najrozmanitejšie konfigurácie hardwaru a požiadavky užívateľov.

V súčasnosti je veľmi zriedkavo nutné, abyste jadro kompilovali sami. Linuxové jadro je postavené ako skladačka. Skladá sa z mnohých častí nazývaných moduly, ktoré nie sú priamo v súbore jadra, ale je možné jadro požiadať o to, aby ich funkcionalitu nahralo zo súboru dodatočne - už v čase, kedy je systém rozbehnutý. Preto je často možné, že ak vaše jadro neobsahuje podporu pre nejaký hardware, možno do neho túto podporu doplniť neskôr - nahraním modulu. Niekedy medzi modulmi existujú závislosti. Napríklad ak máte všeobecnú podporu pre SCSI aj podporu pre SCSI disky ako moduly, tak najprv musíte nahrať všeobecnú podporu pre SCSI a až potom môžete nahrať podporu SCSI diskov. Nahrávanie modulov (príp. ich odstraňovanie) sa spravidla robí pomocou programov z balíka modutils. Veľmi stručne:

Pridať alebo ubrať modul môže len užívateľ root. Druhá varianta pridávania a odoberania modulov je použitie automatického nahrávania modulov, ktoré ešte spomeniem nižšie.

Kompilovanie jadra

Kde zobrať zdrojový kód jadra?

Ak dospejete k rozhodnutiu, že je nutné skompilovať vlastné jadro, musíme najprv získať jeho zdrojový kód. Existuje viacero variant jadier, ktoré môžete chcieť, a preto si najprv treba ujasniť zdrojový kód, ktorého jadra vlastne chceme:

Vanilla jadro
Vývojári jadra uverejňujú oficiálny zdrojový kód jadra na kernel.org. Postupom času vznikajú novšie a novšie verzie jadra. V súčasnosti je hlavné číslo verzie 2. Verzie stabilné - dostatočne odskúšané - majú vedľajšie číslo párne. V súčasnosti sa najskôr stretnete s verziou 2.6, 2.4 alebo 2.2. Ten, kto má chuť riskovať, experimentovať alebo potrebuje niečo čo v aktuálnej verzii nie je, môže skúsiť čísla nepárne. V súčasnosti je poslednou verziou 2.6.6. Experimentálne verzie 2.3 a 2.5 sa už nevyvíjajú. Okrem oficiálneho zdrojového kódu tu nájdete aj odnože udržiavané poprednými vývojármi jadra. Napríklad Alan Cox tu má odnož s príponou -ac. Tieto odnože sa spravidla líšia použitím niektorých experimentálnych algoritmov.
Jadro distribúcie
Tvorcovia distribúcií tiež vychádzajú z vanilla jadra, ale často k nemu pridávajú vlastné úpravy alebo niektoré z vlastností nepárnej verzie. To neznamená, že také jadro je menej stabilné, ale len to, že podľa názoru distributora je daná úprava dostatočne stabilná pre širšie použitie, resp. je to risk hodný zvýšeného výkonu a podobne. Pretože distributéri potrebujú nejaký čas na testovanie, tak svoju upravené verziu jadra publikujú s istým oneskorením oproti vanilla jadru.

Zdrojový kód jadra má vo forme archívu cez 30MB. Preto v prípade, že máte k dispozícií zdrojový kód staršej verzie, môže vám stačiť zobrať len zmeny oproti tejto staršej verzii - tzv. patch (záplatu).

Ak máte úplný zdrojový kód jadra, rozbaľte ho (tradične sa rozbaľuje do /usr/src):

# cd /usr/src
# tar xvfz kernel-2.6.3.tgz

alebo

# cd /usr/src
# tar xvfj kernel-2.6.3.tar.bz2

Podľa toho, či máte zdrojový kód jadra komprimovaný programom gzip, alebo bzip2. Rozbalením vznikne adresár, ktorý nesie meno verzie /usr/src/linux-2.6.3/. Je vhodné ho buď premenovať

# mv linux-2.6.3 linux

alebo vytvoriť symbolickú linku

# ln -s linux-2.6.3 linux

tak, aby zdrojový kód bol dostupný pod adresárom /usr/src/linux.

Ak máte patch, musíte ho aplikovať na svoj zdrojový kód jadra

# cd /usr/src/linux
# gunzip -c patch-2.6.4.gz | patch -p1 -

alebo

# cd /usr/src/linux
# bunzip2 -c patch-2.6.4.bz2 | patch -p1 -

Číslo záplaty 2.6.4 znamená, že ho možno aplikovať na zdrojový kód jadra 2.6.3 a jeho aplikovaním získame kód jadra 2.6.4.

Na budúce si povieme o možnosťach konfigurácie jadra pred kompilaciou, o samotnej kompilacii a konečně o instalácii skompilovaného kernelu, aby bylo možno jej využíť při boote systému.

Související články

Kompilovanie jadra - II
Jaderné noviny
Téma: kdy kompilovat jádro
Na co se často ptáme 1 - LILO

Odkazy a zdroje

kernel.org

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.