Linuxové jádro vytvořil v roce 1991 Linus Torvalds. Tehdy jednadvacetiletý student informatiky na Helsinské univerzitě inspirován operačním systémem MINIX započal celý projekt jako koníček, při kterém si chtěl vyzkoušet funkce svého zánovního PC s 80386 procesorem.
Lidé ale začali do projektu aktivně přispívat a tak je dnes z Linuxu vyspělé jádro s podporou mnoha architektur (od moderních mobilních telefonů po nejvýkonnější superpočítače světa). Následuje seznam některých milníků při vývoji jádra:
V současné době jsou jádra číslována dle schématu A.B.C.D. První dvě čísla, tedy A a B, se mění jen při opravdu významných změnách. Již delší dobu zůstávají ustálena na 2.6. C značí verzi jádra. D je poté vyhrazeno pro opravy chyb, které jsou v jádru nalezeny.
Krom toho může být součástí názvu i některá z přípon, značící, že se nejedná o tzv. vanilla kernel. Ty nejznámější přípony jsou:
Linuxové jádro není čistě monolitické, ale umožňuje používání tzv. modulů. Moduly jsou části jádra, které se dají za běhu přidávat a zase odebírat. Typicky jsou používany pro přidání podpory nového hardwaru, souborového systému anebo systémového volání.
Díky použití modulů je výsledné jádro menší a zabírá méňě paměti. Moduly se dají rekompilovat samostatně a je možné zkompilovat i modul pro běžící jádro, aniž bychom měli jeho kompletní zdrojové kódy. Nevýhodou jsou bezpečnostní rizika plynoucí z možnosti modifikovat jádro za běhu systému.
Pro práci s moduly jsou používány nejčastěji následujicí příkazy:
Zdrojové kódy jádra se dají stáhnout ze serveru www.kernel.org anebo z jednoho z jeho mnoha zrcadel. Nejčastěji se stahuje komprimovaný archív, který se do /usr/src/ rozbalí například příkazem:
tar xvjf linux-2.6.31.tar.bz2
Pokud je potřeba aplikovat ještě nějaký patch (například -stable patch se záplatami), tak použijeme v adresáři s jádrem příkaz:
patch -p1 <patch-2.6.31.1
Nyní můžeme přistoupit ke konfiguraci, tedy k vybraní toho, co vše do jádra chceme zakompilovat (a to buď jako pevnou součást anebo modul). Konfigurace je uložena v souboru .config, který se ale needituje přímo, protože součástí distribuce zdrojových kódů jádra jsou i různé nástroje k tomu určené. Jejich seznam se dá najít ve výpisu příkazu make help, zde popíšeme jen ty nejčastěji používané:
Když je vše nakonfigurované, tak samotný příkaz make bez parametrů slouží ke spuštění kompilace a to jak samotného jádra, tak i všech modulů.
Pokud při kompilaci nedojde k žádným chybám, tak jádro po jejím skončení najdeme (v případě architektru x86) v adresáři arch/x86/boot/ pojmenované jako bzImage. Tento soubor poté musíme dostat do adresáře /boot/ a patřičně překonfigurovat zavaděč systému. Z kořenového adresáře jádra ještě nesmíme zapomenout spustit příkaz make modules_install, který zkompilované moduly nahraje do adresáře /lib/modules/x/, kde x označuje verzi jádra. (Pro aktuální jádro zjistíme příkazem uname -r.)
Při každém zkompilovaní jádra dojde v jeho adresáři k vytvoření souboru System.map. Tento soubor slouží k vzájemnému převodu mezi jménem symbolu a adresou v paměti. Významu tak nabývá ve chvíli, kdy je potřeba zjišťovat debugovací informace po chybě kernelu (kernel panic).
Většina programů tento soubor očekává jako /boot/System-map-`uname -r`, nicméně nová jádra nabízí volbu CONFIG_KALLSYMS, která zajistí, že kernel si zapamatuje tabulku symbolů sám.
Abychom mohli vytvořit vlastní, na míru šité jádro, tak potřebujeme zjistit, jaký hardware to vlastně máme a tedy jaké ovladače musíme zakompilovat. K tomu nám mohou posloužit následující soubory a programy:
Jádru při startu (respektive modulům při zavádění) je možné zadávat parametry ovlivňující jeho činnost. V závislosti na zavaděči je nejčastěji najdeme v /boot/grub/menu.lst anebo v /etc/lilo.conf. Časté parametry jsou například:
Více podrobností se dá najít v manuálové stránce bootparam(7) anebo v dokumentaci k jádru v souboru x86/x86_64/boot-options.txt.