Jádro je vrstva mezi softwarem a hardwarem, tedy program, který koordinuje činnost ostatních programů a zprostředkovává jim prostředky počítače.Jeho hlavní úkol spočívá v přidělovaní paměti a času procesorů programům, ovládání zařízení počítače a abstrakci funkcí.
Skoro celé je napsáno v jazyce C, ale obsahuje i některé kousky v assembleru.
Verze jádra jsou značeny trojicí číslic oddělenými tečkami. První dvě čísla označují tzv. vývojovou řadu neboli větev (2.0.x, 2.5.x, 2.6.x). Řady se sudým druhým číslem jsou stabilní, ostatní jsou nestabilní. Nestabilní řady přecházejí ve stabilní, které se vyvíjí paralelně. Například řada 2.3 přešla v 2.4, řada 2.5 přešla v 2.6 (ale 2.4 se stále vyvíjí).
Některé vlastnosti z novějších řad se přenášejí i do starších - tomu se říká backport.
Mezi každou změnou číslice za druhou tečkou ve verzi příchází na řadu kandidáti novější verze(2.6.17-rc1).
V nedávné době doznalo číslování drobných změn. Řada 2.6 je nyní vydávána se čtvrtým podčíslem. Pokud se během vývoje objeví opravy kritických nebo bezpečnostních chyb, jsou zařazeny do podverze poslední stabilní verze
Současná stabilní verze je 2.6.20.1. Aktuální stabilní verze lze vždy nalézt na www.kernel.org.
Linuxové jádro je koncipováno jako jednolitá část kódu s podporou načítání externích modulů. Toto se používá kvůli zvýšení stability, urychlení běhu jádra, zmenšení velikosti samotného jádra a zmenšení paměťových nároků. Linux má modulární monolitické jádro
Moduly přidávají do jádra podporu pro určité zařízení, souborový systém, apod. Lze je za běhu systému přidávat a odebírat.
Moduly mohou být zaváděny programem insmod
či modprobe
, odebírány programem rmmod
.
Používané moduly včetně závislostí můžou být zjišťovány pomocí lsmod
.
Kompilací lze vyprodukovat menší a lépe padnoucí jádro.
Ke kompilaci je potřeba: gcc, make, glibc, binutils, util-linux, module-init-tools.
Zdrojové kódy jádra by měli být rozbaleny do /usr/src
, přičemž /usr/src/linux
bývá symbolický odkaz
na zdrojové kódy práve běžícího jádra.
1. Po přechodu do adresáře se zdrojovými kódy je vhodné spustit příkaz make clean
jež vyčistí adresářové struktury.
2. Poté je nutno provést konfiguraci, tedy zvolit co bude jádro obsahovat a co bude zkompilováno jako modul. Na výběr je několik způsobů:
make config
- na konzoli interaktivně klade otázky, ne příliš přívětivýmake menuconfig
- asi nejčastější, uživatelsky přívětivý, strukturované menu pomocí ncursesmake xconfig
- uživatelsky přívětivý způsob v grafickém režimu(Qt)make gconfig
- jako předchozí pomocí GTK
make oldconfig
- nastaví parametry jako při poslední kompilacimake cloneconfig
- použije se konfigurační soubor z /proc, kde by měl být konfig právě zavedeného jádra
Při kofiguraci je nutné zahrnout vše potřebné, jinak se může stát že po spuštění nového jádra uvidíme "kernel panic". Proto je vhodné nechat v zavděči možnost bootovat staré jádro.
3. Je třeba vytvořit závislosti dle naší konfigurace make dep
.
4. Kompilaci samotného jádra spustíme pomocí make bzImage
. Nové jádro bude umístěno v /usr/src/linux/arch/i386/boot/
.
5. Kompilaci modulů spustíme pomocí make modules
.
6. Zkompilované moduly následně pomocí make modules_install
připravíme do adresáře /lib/modules/$verze
, kde je bude jádro hledat.
7. Jádro musíme také zkopírovat z /usr/src/linux/arch/i386/boot/bzImage
do /boot
a nastavit zavaděč.
Tento soubor bývá nejčastěji umístěn v /boot
. Obsahuje jakousi převodní tabulku mezi adresami názvy funkcí obsažených v jádru.
Bývá používán programy jako ps, uptime, top a klogd atd. V textu těchto programů se neobjevují adresy funkcí ale jejich názvy.
Vypadá asi následovně:
... c0493d20 t alsa_sound_exit c0493ec0 T snd_minor_info_oss_done c0493e00 T snd_info_done c0493e70 t snd_info_version_done c0493fc0 t alsa_pcm_exit ...
Jádru lze zadávat parametry ve formatu "parametr=hodnota".
Několik důležitých a zajímavých parametrů:
Seznam parametrů k jádru lze nalézt v souboru Documentation/kernel-parameters.txt
, nebo pomocí man bootparam
.