Jádro systému Linux
Ondřej Kozina, 120781(zvnč)mail(tčk)muni(tčk)cz
Obsah
Úvod a historie Linuxu
Jádro je program napsaný v jazyce C. Linux patří mezi monolitická jádra s podporou modulů, kde komunikace mezi jádrem a ovladači (moduly) probíhá prostřednictvím volání funkcí. Ačkoliv to patrně nebyl záměr, Linux postupně dominuje na pozici jádra operačního systému projektu GNU
- 1991 - Linus Torvalds zveřejňuje první verzi jádra
- 1993 - Linux má přes 100 vývojářů. První distribuce
- 1995 - první porty na jinou architekturu než i386
- 1996 - verze 2.0
- 1999 - verze 2.2
- 2001 - verze 2.4
- 2003 - verze 2.6
Instalace
Zdrojové kódy jádra jsou dostupné na kernel.org. Většina distribucí obsahuje vlastní předkompilované jádro mnohdy doplněné o sadu patchů. Přesto je vhodné znát postup instalace ze zdrojových kódů:
- make menuconfig - (terminálové) grafické prostředí pro konfiguraci parametrů jádra před kompilací.
- make - (pokud je uvedena cesta za příkazem make, kompiluje se pouze část podstromu)
- make modules_install - skript pro instalaci zkompilovaných modulů
- arch/<označení_architektury>/bzImage - binární podoba jádra volaná zavaděčem - obvykle se kopíruje do adresáře /boot
Alternativní možnosti pro konfiguraci jádra jsou např.:
- make xconfig - konfigurace jádra v prosředí X
- make config - "interaktivní" konfigurace jádra. Script se ptá individuálně na každou konfigurační proměnou
Nové jádro se aktivuje klasickým restartováním systému nebo pomocí kexec. Tato vlastnost umožňuje zavedeního nového jádra do systému bez nutnosti projít zavaděčem první úrovně (MBR).
- kexec -l /boot/kernel-2.6.13+ -append="root=/dev/sda1" - výběr jádra pro načtení po "rebootu"
- kexec -e - dojde k záměně jádra v paměti a inicializaci. Tento příkaz neukončí korektně stávající systém
Konfigurační rozhraní
Jádro má několik konfiguračních rozhraní pro komunikaci mezi user space aplikacemi a komponentami jádra. Poměrně bohatý výběr rozhraní je daný různými charakteristikami požadavků na rozhraní:
- ioctl - systémové volání. Předáva se v podstatě libovolný binární parametr z userspace do jádra, což způsobovalo problémy s portabilitou ovladačů (compat_ioctl.c)
- procfs - export informací o procesech a konfiguračních parametrů jádra prostřednictvím souborového systému. Původem ze systému Plan 9
- sysfs - obdoba procfs, ale přehlednější a zejména informace o zařízeních odpovídají hierarchii zařízení v systému
- Netlink - rozhraní komunikuje prostřednictvím standardního síťového spojení. Umožňuje odebírat informace o změnách systému prostřednictvím multicast vysílání (dbus)
Většina konfiguračních parametrů jádra z procfs je zahrnuta i do sysfs, ale z důvodu zpětné kompatibility se v jádře udržují obě rozhraní. Obdobné jsou snahy utlumit ioctl, které bývá kritizováno pro nedostatečnou bezpečnost (volnost rozhraní znemožňuje efektivně auditovat). Navíc obsluha volání ioctl běží v režimu jádra a přebírá parametr z userspace (potenciální bezpečnostní díra).
Některé userspace nástroje
module-init-tools
- modprobe - nástroj pro přidávání/odebírání modulů z jádra
- lsmod - výpis modulů přítomných v jádře včetně závislostí (v podstatě učesaná verze souboru /proc/modules)
- depmod - vygeneruje strom závislostí z exportovaných symbolů v modulech
util-linux
- blockdev - utilita pro ioctl volání nad blokovými zařízeními
- dmesg - nástroj pro čtení a konfiguraci bufferu se zprávamy z jádra
- (u)mount - připojení/odpojení souborových systémů
- swapon/swapoff - odpojední připojení swap partition
Informace o hardwaru - lspci
Tento nástroj se hodí k přesné identifikaci HW v počítači. Často slouží k dohledání chybějících ovladačů, která nebyla zkompilována do jádra. V případě nového HW lze updatovat databázi ID zařízení příkazem /usr/sbin/update-pciids.
Literatura