Jádro systému

Petr Lautrbach <xlautrb@fi.muni.cz>

Obsah

Historie a současnost

Linux napsal Linus Torvalds v roce 1991, jako klon operačního systému UNIX, který uvolnil pod licencí GNU GPL. Dnes se na vývoji podílí vývojáři a firmy z celého světa. Pro vývoj se používá git, který napsal Linus pro potřeby vývoje jádra. Seznam uložišť linuxových projektů lze nalézt na adrese http://git.kernel.org/ .

Linux byl původně určen pro 32bitovou x86 architekturu. Dnes však již běží i na mnoha dalších Compaq Alpha AXP, Sun SPARC a UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, Cell, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64, AXIS CRIS, Xtensa, AVR32 a Renesas M32R

Linux může běžet i sám pod sebou jako proces v uživatelském prostoru - User Mode Linux.

Číslování

Pro jednotlivé verze se používá číslování ve formátu:

Současně jsou i dostupné experimentální větve, jako je -mm, kterou vydává Andrew Morton a většina distribucí používá vlastní verze jádra s dalšími úpravami a bezpečnostními záplatami.

Moduly

Jaderné moduly umožňují vkládat kód do jádra za běhu systému. Obvykle se používají pro ovladače zařízení, filesystému a pro přidávání systémových volání. Bez použití modulů by každá změna znamenala rekompilaci celého jádra, zatímco s moduly stačí překompilovat a nahrát modul do jádra a to i bez toho aniž bychom měli kompletní zdrojové kódy aktuálně běžícího jádra.

Pro práci s moduly používáme utility z balíku module-init-tools

modprobe - pro manipulaci s moduly 
lsmod - pro výpis nahraných modulů

Parametry jádra

Jádro i moduly umožňují zadat parametry při startu, resp. při nahrání modulu. Některé z parametrů:

acpi=off - zakáže používání ACPI
console=ttyS0 - použije sériový port jako konzoli
debug - povolí ladící režim jádra
init=/bin/bash - umožní specifikovat jiný než std. init
...
Více informací se nachází v Documentation/kernel-parameters.txt

Zdrojové kódy

Zdrojové kódy jádra se dájí stáhnout buď přímo ze stránek http://www.kernel.org/ nebo v rámci zdrojových balíčků distribuce.

Součástí zdrojových kódů je i rozsáhlá dokumentace - přehledný restřík dokumentace je v souboru Documentation/00-INDEX

Pro instalaci konkrétní verze můžeme použít buď přímo balík se zdrojovými soubory dané verze nebo aplikovat záplaty zvyšující verzi na zdrojové soubory předchozí verze.

Pro stabilní verze je potřeba postupně aplikovat všechny záplaty zvyšující verzi o 1. Pro verzi s opravami (2.6.x.y) obsahují záplaty kompletní změny a aplikují se přímo na stabilní verzi.

Příklad: mějme jádro linux-2.6.27.tar.bz2 a chceme jádro verze 2.6.28.7

  1. stáhneme záplatu na verzi 2.6.28
    http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.28.bz2
    a záplatu
    http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.28.7.bz2
  2. Rozbalíme zdrojové kódy
    $ tar xfvj linux-2.6.27.tar.bz2
    
  3. aplikujeme záplatu zvyšující verzi
    $ cd linux-2.6.27
    
    $ bzip2 -dc ../patch-2.6.28.bz2 | patch -p1
    
  4. a nakonec i záplatu s bezpečnostními opravami
    $ bzip2 -dc ../patch-2.6.28.7.bz2 | patch -p1
    
nyní máme jádro verze 2.6.28.7, což snadno ověříme pomocí příkazu:
$ make kernelversion
2.6.28.7

Konfigurace

Konfigurace jádra je uložena v souboru .config. Pro jeho vygenerování můžeme použijeme jeden z *config parametrů jádra. Jaké nám Makefile nabízí možnosti zjistíme pomocí make help

Některé z nich:

$ make config - čistě textové rozhraní
$ make menuconfig - ncurses
$ make xconfig - QT rozhraní
$ make allyesconfig - na všechny odpovědi odpoví yes
$ make allnoconfig - odpoví naopak no
Pokud máme .config z předchozí verze, použijme make oldconfig, který se zeptá pouze na nové možnosti, které nejsou v původním .config

Některé informace o hardwaru počítače se dá zjistit pomocí přikazů:

$ cat /proc/cpuinfo  - informace o procesoru
$ dmesg - informace které vypisuje jádro při startu a běhu
$ lspci - vypíše PCI zařízení
a další

Kompilace a příkaz make

Minimální požadavky pro kompilaci a provozování jádra najdeme jsou uvedené v Documentation/Changes.

Pro kompilaci jádra použijeme:

$ make - vytvoříme komprimovaný obraz jádra a moduly

# make install - jádro nainstalujeme
Pokud máme jádro používající moduly použijeme
# make modules_install
Použitím parametru -O=vystupni/adresar můžeme určit jiný výstupní adresář pro zkompilované soubory.

System.map

Při každé kompilaci jádra se vytváří i tabulka symbolů, která je uložena v souboru System.map. Po instalaci jádra se obvykle nacházi v /boot/System.map-$(uname -r). Používá se pro ladění stavů jádra kernel panic. Pokud použijeme při konfiguraci volbu CONFIG_KALLSYMS, pak jádro umí překládat adresy na symboly samo.

Literatura