Jádro systému Linux

Vít Rusňák, xrusnak@fi.muni.cz

Obsah

Co je jádro

Kernel (česky jádro) je součást operačního systému, které zprostředkovává a koordinuje komunikaci mezi hardware (CPU, paměťi, I/O zařízení) a operačním systémem a programy. Přiděluje čas procesoru (či procesorů) a paměti, prostřednictvím jádra jsou ovládány zařízení počítače.

Jádro je zaváděno do paměti pomocí sekundárního zavaděče systému (GRUB, LILO). Jádra lze rozdělit na monolitická (MS-DOS), mikrokernely (Mach, minix), modulární (AIX, Solaris, Linux). Nadále se budu zabývat právě modulárním linuxovým jádrem.

Linuxové jádro je šířeno pod GPL licencí. Původně bylo napsáno pro procesory architektury i386, ale postupem času bylo portováno na další platformy. Téměř celé je napsáno v jazyce C, ale obsahuje i některé kousky assembleru. Řídí se standardem POSIX.1.


Stručně z historie


Proč kompilovat vlastní jádro

Někteří mohou namítat, že jim standardní distribuční jádro vyhovuje, ovšem zkompilovat si vlastní jádro má hned několik výhod:

Ovšem má to i své nevýhody. Kompilace jádra není pro každého. Člověk si snadno může úplně rozbít systém. U kompilace se musí přemýšlet, číst dokumentaci a hlavně rozumět systému více než na úrovni BFU. Ale hlavně musíme mít superuživatelská práva na stroji, kde chceme jádro kompilovat.


Kde jej získat

Standardní verze jádra bývá označována jako Vanilla. Zdrojové soubory lze získat na ftp.kernel.org, případně jeho mirrorech (seznam lze najít na kernel.org/mirrors/).

Označování verzí se řídí několika jednoduchými zásadami. Nechť je značení x.y.z:

Dále je možné narazit i na další doplňující označení, které se týkají např. konkrétních distribucí


Příprava

Pro kompilaci je potřeba několika utilit, u kterých může záležet (a záleží) i na jejich verzích (viz dokumentace k danému jádru v Documentation/README) - gcc, make, glibc, binutils, util-linux, module-init-tools.

Po stažení zdrojových souborů tyto rozbalíme do adresáře /usr/src (samozřejmě s právy superuživatele).


Patchování a konfigurace

Patchování

Záplat pro jádra je nepřeberné množství, ať už se jedná o podporu HW či zajištění vyšší bezpečnosti. Záplaty přidávají další volby do konfigurace jádra. Aplikují se aplikují příkazem (vždy ule dokumentace k dané záplatě):
# patch -p1 < soubor.patch
Kompilace pak probíhá standardním způsobem.

Konfigurace

Prvním krokem při konfiguraci většinou bývá odstranění předchozích pokusů příkazem # make clean, který odstraní binární výstupy kompilace.

Případně # make mrproper, který uvede zdrojové soubory do stavu těsně po rozbalení.

Dalším krokem je spuštění samotné konfigurace. Je několik možností jak na to:

Volby mohou být Y/N nebo M jako moduly.

Po ukončení konfigurace je vytvořen soubor .config, ve kterém jsou uloženy všechny volby, které byly provedeny. Tím můžeme přejít ke kompilaci.


Kompilace a instalace

Pro kompilaci jádra zavoláme příkaz # make. Ten vytvoří obraz nového jádra, který je uložen v /usr/src/linux/arch/i386/boot/ pod názvem bzImage.

Pro instalaci modulů se používá # make modules && make modules_install. Tato sekvence příkazů přeloží moduly a uloží jejich soubory ve formátu *.o nebo *.ko do adresáře /lib/modules/verze_kernelu.

Závěrem je potřeba zkopírovat obraz jádra do bootovací oblasti (v nejlepším případě i přejmenovat) a nakonfigurovat zavaděč systému (GRUB, LILO) aby reflektoval nové jádro a nastavit případné parametry jádra (viz bootparam(7)).


Soubor System.map

Soubor System.map se také kopíruje do /boot. Obsahuje tabulku, převádějící adresy na symboly. Většinou odkazuje na soubor dané verze jádra a bývá označován System.map-x.y.z.

Obsah vypadá asi následovně:

       ...
    c081caa0 b __warned.21639
    c081caa4 b swsusp_header
    c081caa8 b resume_bdev
    c081cac0 b snapshot_state
    c081caec B kexec_image
    c081caf0 B kexec_crash_image
    c081caf4 B crash_notes
    c081caf8 b kexec_lock
       ...

Použité zdroje