Linux Kernel

Ondřej Božek, boza@mail.muni.cz


Obsah


Co je jádro

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.


Historie


Číslování

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.


Moduly

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.


Kompilace

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ů:

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ěč.


System.map

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

Parametry jádra

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.


Použité zdroje

Archiv PV090
Wikipedia.org