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.
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.
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í
Linux lachtan 2.6.23.15-137.fc8 #1 SMP Sun Feb 10 17:48:34 EST 2008 i686 i686 i386 GNU/Linux
The latest stable version of the Linux kernel is: 2.6.24.3 The latest prepatch for the stable Linux kernel tree is: 2.6.25-rc3 The latest snapshot for the stable Linux kernel tree is: 2.6.25-rc3-git1 The latest 2.4 version of the Linux kernel is: 2.4.36.2 The latest 2.2 version of the Linux kernel is: 2.2.26 The latest prepatch for the 2.2 Linux kernel tree is: 2.2.27-rc2 The latest -mm patch to the stable Linux kernels is: 2.6.25-rc2-mm1
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).
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.
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:
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.
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 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 ...