Holeček Lukáš, 143108@fi.muni.cz
Jádro systému je software umožňující kontrolu nad hardware a běh programů (přidělování paměti a procesoru procesům).
V září 1991 Linus Torvalds vytváří první verzi jádra 0.01.
Jádro Linuxu je monolitické (jako většina UNIX jader) s vlastnostmi mikrokernel jader (Windows NT, Mach). Na disku představuje jediný soubor, který má po spuštění přiděleno speciální místo v paměti (tzv. kernel–space) a instrukce vykonává v tzv. režimu jádra. Aplikace může z uživatelského režimu přejít do režimu jádra pomocí:
systémových volání,
přerušení způsobeného plánovačem úloh,
výjimkou procesoru nebo
signálem přerušení z hardware.
Z mikrokernelu si jádro Linuxu propůjčuje modularitu, ale všechny moduly jsou dynamicky nahrávány přímo do jádra (na rozdíl od mikrokernelu).
Celé jádro je psáno v jazyce C (kromě několika částí psaných v assembleru). Na disku se zdrojové kódy většinou nachází v adresáři, na který odkazuje symbolický odkaz /usr/src/linux. Všechny verze jader lze najít na adrese ftp://ftp.kernel.org/pub/linux/kernel/.
Verze jader jsou obvykle ve formátu 2.6.22, kde první dvě čísla značí vývojovou větev a poslední označuje číslo revize. Pokud je druhé číslo sudé, znamená to, že jde o stabilní verzi. Naopak liché číslo určuje nestabilní verzi. V této době je ve vývoji jádro řady 2.6, do které se na rozdíl od předchozích stabilních větví dostanou i méně stabilní ovladače.
V kořenovém adresáři zdrojových kódů jádra Linuxu se nachází adresáře:
arch (kód závislý na architektuře),
crypto (kryptografické funkce),
Documentation,
drivers (ovladače zařízení),
fs (souborové systémy),
include (hlavičkové soubory),
init (bootování a inicializace jádra),
ipc (meziprocesorová komunikace),
kernel (plánovač, časovač, funkce printk, obsluha kernel panic a další důležité funkce jádra),
lib (pomocné funkce),
mm (správa paměti),
net (síťové prvky),
script (skripty pro sestavení jádra),
security (bezpečnostní modul),
sound (zvuk),
usr (initramfs)
a soubory:
COPYING (licence GNU GPL v2),
CREDITS (seznam programátorů, kteří vetší mírou přispěli do jádra),
MAINTAINERS (seznam lidí, kteří udržují části jádra) a
Makefile.
Konfigurace jádra se provádí pomocí příkazu make a příslušného parametru pro konfiguraci. Všechny změny provedené po nastavení jsou uloženy v souboru .config. Jednotlivé vlastnosti jsou v souboru uloženy jako CONFIG_VLASTNOST=y|m|“řetězec“|číslo, kde y u každé vlastnosti znamená, že bude zakompilovaná do jádra, a m značí, že bude zkompilována jako modul. Nápovědu je možné získat příkazem make help.
Důležité parametry pro make sloužící ke konfiguraci jsou:
config – nastavení pomocí příkazové řádky,
menuconfig – menu konfigurace s knihovnou ncurses,
xconfig – menu konfigurace s knihovnou QT,
gconfig – menu konfigurace s knihovnou GTK+,
oldconfig – nastavení částí nového jádra podle souboru .config,
defconfig – implicitní konfigurace založená na dané platformě (dobrý začátek).
Důležité volby konfigurace jádra jsou například (názvy podle položek v menu):
Code maturity level options/Prompt for development and/or incomplete code/drivers – zpřístupní více ovladačů,
General setup – základní nastavení (např. /proc/config.gz, initramfs/initrd),
Loadable module support – podpora modulů v jádře (náhrávání/rušení),
Processor type and features – nastavení procesoru/architektury (např. SMP, časovač, podpora více paměti),
Power management options – důležité nastavení pro bateriově poháněná zařízení,
Bus options – nastavení sběrnic,
Networking/Networking options – nastavení síťových prvků jako protokoly nebo netfilter,
Device Drivers – nejrozsáhlejší položka obsahující ovladače zařízení klávesnice, myši, zvuku, grafiky, USB, DMA pro disky apod.,
File Systems – souborové systémy.
Příkaz make (stejné jako make bzImage modules) sestaví nové jádro systému a moduly podle voleb v souboru .config. Ve verzích předcházejících verzi 2.6 bylo navíc nutné spustit příkaz make dep pro přidání závislostí.
Při sestavování jádra se vytváří soubor System.map, který obsahuje počáteční adresy jednotlivých symbolů (funkcí a proměnných) jádra a slouží pro ladění. Zkompilované jádro je uloženo v arch/i386/boot/bzImage (i386 je architektura, na které bylo jádro sestaveno).
Instalaci lze provést pomocí make install (závislé na distribuci; skript v /sbin/installkernel) nebo manuálně (tento krok je závislý na architektuře počítače a na systémovém zavaděči). Pro zkopírování modulů určených pro instalaci do příslušných adresářů (v /lib/modules) slouží příkaz make modules_install. Pro instalaci jádra a modulů je nutné, aby uživatel byl přihlášen jako root.
Jádro může být spuštěno s různými boot–time parametry, které jsou zapisovány ve tvaru parametr[=hodnota]. Mohou to být například:
root (harddisk nebo jeho část, která se použije jako kořenový adresář),
init (implicitně /sbin/init; pro nabootování systému bez hesla např. /bin/bash),
single (jednouživatelský režim),
ro (kořenový adresář pouze pro čtení),
rw (kořenový adresář pro čtení i zápis),
vga (nastavení režimu grafické karty) nebo
debug (režim ladění jádra).
Další informace o boot–time parametrech se nachází na manuálové stránce bootparam(7).
Ke změně parametrů za běhu systému je možné použít program sysctl(8) (-a pro výpis; -w pro změnu parametrů; samozřejmě je třeba mít práva uživatele root).
Jádro linuxu podporuje nahrávání a odebírání modulů za běhu systému. Zkompilované moduly mají příponu .ko nebo také .o u jádra řady 2.4. Aby vše fungovalo, tak jak má, musí být jádro správně zkompilováno (položka Loadable module support v konfiguračním menu jádra). K nahrávání resp. odebírání modulů z jádra slouží programy insmod(8) resp. rmmod(8) nebo „inteligentnější“ modprobe(8) a pro výpis nahraných modulů lsmod(8). Pro manipulaci s moduly jsou také nutná správcovská práva.
Aby uživatel věděl s jakými parametry a moduly má jádro zkompilovat, Linux systémy standardně nabízí programy, které pomohou rozpoznat většinu zařízení počítače. Těmi užitečnými programy jsou:
lspci(8) – výpis informací o zařízeních na PCI sběrnici (-v pro „upovídaný“ výpis),
lsusb(8) – podobné jako předchozí, ale na USB sběrnici,
dmesg(8) – lze použít k nalezení nově připojených zařízení nebo problému s hardware (často postačí příkaz dmesg | tail).
Pohodlný přístup k podrobnostem o hardware je ve virtuálním souborovém systému /proc (musí být zapnuto File systems/Pseudo Filesystems/ /proc file system support v jádře). Ke zobrazení podrobností o procesoru stačí zadat příkaz cat /proc/cpuinfo.
Interaktivní program sensors-detect(8) slouží k nalezení senzorů počítače a nahrání příslušných modulů. Před spuštěním je třeba nejprve zapnout v menu konfigurace jádra Device Drivers/I2C support a Device Drivers/Hardware Monitoring Support pokud možno všechny položky na m. Aplikace sensors(1) vytiskne informace z jednotlivých aktivních senzorů.
Daniel P. Bovet, Marco Cesati. Understanding the Linux Kernel. 3. vydání. O'Reilly, listopad 2005. 942 stran. ISBN 0-596-00565-2.
Love, Robert. Linux Kernel Development. 2. vydání. Sams Publishing, 12. leden 2005. 432 stran. ISBN 0-672-32720-1.
M. Tim Jones. Inside the Linux boot process. IBM http://www-128.ibm.com/developerworks/library/l-linuxboot/index.html 23.9.2007.