Jádro systému

Petr Písař, xpisar@fi.muni.cz


Obsah


Kde vzít jádro

Zdrojový kód jádra operačního systému Linux lze získat z oficiálního archivu http://www.kernel.org/ (FTP). Je však silně doporučeno použít lokální mirror. Balíček se zdrojovým kódem jádra je taktéž obsažen v mnoha distribucích.

Stáhnout je možné celý kernel nebo jen inkrementální patch, případně patche opravující chyby. K dispozici jsou také historie změn (Changelog).


Číslování verzí

Verze jádra se skládá ze tří čísel (většinou) oddělených tečkou (např. 2.6.5). První číslo uvádí generaci jádra, druhé číslo vývojovou řadu. Ty obvykle bývají dvě — stabilní (sudé číslo) a vývojová (liché číslo). Poslední číslo udává pořadí vydání. V současné době je poslední stabilní verze 2.6.8.1. Dále se objevují přípony jako -preN, -rcN a -mmN značící skoro hotovou verzi, respektive vývojovou větvi.


Nástroje pro kompilaci

Pro úspěšný překlad a fungování jádra je potřeba mnoho pomocných programů. Především gcc, make, binutils, util-linux, module-init-tools… Také záleží na jejich verzi (viz Documentation/Changes). Podle použitého konfiguračního nástroje může být vyžadována knihovna ncurser nebo Xlib.


Konfigurace

Získaný balíček zdrojového kódu rozbalíme do adresáře /usr/src, pracovní adresář změníme na právě vzniklý ./linux-X.Y.Z. Nyní můžeme aplikovat případné patche ve správném pořadí (např. při přechodu na vyšší verzi jádra nebo přidání funkcionality, která není ve vanilla jádře). Nakonec je vhodné se ujistit, že časy modifikace všech souboru jsou nastaveny v minulosti.

Konfiguraci jádra lze provézt jedním z následujících příkazů:

Konfigurační program se nejprve pokusí získat stávající konfiguraci z právě běžícího kernelu, poté z konfiguračního souboru .config a na konec přednastaví defaultní konfiguraci. Uživatel tak nemusí vyplňovat při každé konfiguraci to samé nastavení. Při opuštění konfigurace je nové nastavení uloženo do souboru .config.


Významné konfigurační volby

S vývojem hardwaru a jádra přibývají konfigurační volby a jejich umístění v nabídce menuconfigu se mění. Přehled základních voleb:

Zběžné vysvětlení k jednotlivým volbám nabízí konfigurátor, podrobnosti lze nalézt v dokumentaci kernelu v adresáři Documentation.


Jaderné moduly

Linuxové jádro je modulární. Některé funkce jádra mohou být staticky zakompilovány do jádra nebo ponechány jako samostatné jaderné moduly (LKMs), které lze za běhu nahrávat do paměti kernelu nebo odebírat.

Každý jaderný modul nese seznam poskytovaných a požadovaných symbolů, verzi jádra, autora, název licence, seznam parametrů. Po přeložení a instalaci modulů a jádra je nutné vygenerovat tabulku závislostí modulů (příkaz depmod). Modul lze zavést na vyžádání (modprobe modul) či jej uvolnit (rmmod modul). Seznam zavedených modulů zjistí příkaz lsmod. Pro automatické zavádění modulů je potřeba nastavit provázání blokových a znakových zařízení se správnými moduly (soubor /etc/modprobe.conf). Dále je nutné říci kernelu, kterým programem se moduly zavádí (echo "/sbin/modprobe" > /proc/sys/kernel/modprobe). Otevře-li pak nějaký proces zařízení /dev/ttyACM0, kernel zavolá program /sbin/modprobe, který prohledá soubor /etc/modprobe.conf. Ten najde řádek alias char-major-167 cdc-acm a zavede modul cdc-acm. Tento modul prohledá USB sběrnici a nalezne-li zařízení patřící do USB třídy ACM, zaregistruje zařízení s major číslem 167 a propojí jej s USB zařízením. Parametry modulu lze zadat na příkazovém řádku nebo uvést do souboru /etc/modprobe.conf.


Kompilace

Překlad jádra je kompletně řízen programem make. Požadujeme-li přeložení všech částí jádra od začátku, odstraníme staré objektové a dočasné soubory příkazem make clean. Samoutnou kompilaci v případě jádra řady 2.6 zahájíme příkazem make (pro řadu 2.4 spustíme make dep && make bzImage && make modules. Kompilace může trvat od několika minut až po několik hodin (záleží na zvolené konfiguraci, verzi jádra a výkonu počítače).


Instalace

Po úspěšném překladu nainstalujeme moduly jádra do adresáře /lib/modules/X.Y.Z příkazem make modules_install. Jádro překopírujeme z arch/i386/boot/bzImage do adresáře, kde jej předpokládá náš zavaděč operačního systému (např. /boot), dále zkopírujeme tabulku exportovaných symbolů jádra System.map a na konec aktualizujeme nastavení zavaděče OS (např. LILO, Grub, syslinux, loadlin).


Parametry jádra

Chování jádra lze ovlivnit pomocí parametrů, které se zadávají při nahrání modulu nebo před bootem. Oddělují se bílými znaky a většinou jsou tvaru nazev=hodnota. Například root=/dev/hda1 rw init=/bin/bash ether=0,0,0,1,eth0 znamená: kořenový souborový systém se nachází na /dev/hda1, bude připojen pro zápis, standardní init bude nahrazen programem /bin/bash a první síťová karta bude používat externí tranciever. Podrobný seznam lze najít v Documentation/kernel-parameters.txt.