Jádro systému Linux

Michal Karas, <xkaras2@fi.muni.cz>

Obsah

Historie

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:

Číslování verzí a patchsety

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:

Moduly

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:

Kompilace jádra

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.)

System.map

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.

Detekce hardwaru

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:

Parametry jádra

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.

Literatura