Jádro systému
Jiří Kortus, 255719@mail.muni[NOSPAM].cz
Obsah
O jádru
Linuxové jádro (kernel) je projekt iniciovaný Linusem Torvaldsem v roce 1991, jehož cílem bylo poskytnout
opensource alternativu ke komerčním UNIXovým systémům. Je napsáno v jazyce C a je volně dostupné pod licencí GPL. Jádro je typu makrokernel,
a umožňuje zavádění a odebírání jaderných modulů za běhu. Na vývoji jádra se podílí
komunita vývojářů sestávající jak z velkého množství jednotlivců, tak i firem podporujících Linux (RedHat, IBM, Novell a další). V čele vývoje jádra
stále stojí Linus Torvalds.
Verze a číslování
Historicky první verzí byla verze 0.01 vydaná v roce 1991, v současné době jsou aktuální verze řady 2.6.x a nově 3.x. (poslední verze je aktuálně 3.0.4).
Verze jsou od v1.0 číslovány typicky podle schématu A.B.C nebo A.B.C.D, kde
- A.B představuje vývojovou řadu kernelu (2.4, 2.6, 3.0 atd.)
- C značí dílčí revizi kernelu (minor version)
- V případě, že je třeba vydat novou verzi, která opravuje kritickou nebo bezpečnostní chybu, ale změny
nejsou dostatečně rozsáhlé pro zvýšení čísla minor verze, je tato skutečnost reflektována v označení D.
Za číselným označením verze může být ještě dodatek (např. -rc1) popisující, že jde o release-candidate verzi nebo
o specifickou vývojovou větev.
Stažení jádra
Zdrojové kódy jádra lze získat z www.kernel.org, případně z některého ze zrcadel, např.
ftp.linux.cz (jedná se o tzv. vanilla jádro). Pokud potřebujeme
vanilla jádro rozšířit o další funkce, je potřeba stáhnout patřičný patch a aplikovat jej na zdrojové kódy.
Konfigurace
Distribuční jádra jsou konfigurována tak, aby fungovala na co nejširším spektru hardwarových konfigurací,
tzn. musí podporovat i mnoho hardwaru nebo vlastností, které často nejsou potřeba. Konfigurací lze jádro optimalizovat
pro lepší fungování na daném HW, odstranit nepotřebné funkce a zmenšit místo zabrané jádrem (a moduly).
Před konfigurací je třeba znát parametry systému, na kterém jádro poběží, zejména
- architekturu (typicky x86) - lze zjistit z výpisu příkazu cat /proc/cpuinfo
nebo uname -a
- zařízení, pro která je třeba podpora v jádře, lze zjistit pomocí
- lspci, lsusb - informace o zařízeních na sběrnicích PCI, resp. USB
- dmesg - výpis zpráv jádra
- použité souborové systémy
- další potřebné funkce (např. podpora sítě)
Pro boot jádra je nezbytné, aby obsahovalo podporu pro zařízení, ze kterého se bude bootovat (např. podpora SATA)
a souborového systému použitého v kořenovém oddílu (případně může být tato podpora obsažena v initramdisku).
Konfiguraci, kompilaci a instalaci jádra lze shrnout do následujících kroků:
- Stáhnutí a rozbalení jádra (většinou do /usr/src/linux-verze_jádra, v /usr/src
by měl být symlink linux ukazující na aktuální verzi zdrojových kódů)
- Zazálohování konfiguračního souboru (.config) funkční verze jádra - zcat /proc/config.gz > .config.backup
nebo cp /boot/config-verze_jádra .config.backup
- Konfigurace parametrů a součástí jádra (podpora zařízení, sběrnic, sítě, šifrování, ...) - pomocí make a jednoho z následujících parametrů
- config - jsou kladeny otázky na konfiguraci jednotlivých položek, ne zrovna uživatelsky přívětivé :)
- menuconfig - konzolové rozhraní, procházení dílčích nabídek a konfigurace položek
- xconfig, gconfig - konfigurace pomocí GUI založeného na Qt, resp. GTK
U jednotlivých položek lze zadávat volbu, zda danou položku chceme zakompilovat do jádra (Y) či nikoliv (N) nebo jestli
má být zkompilována jako modul (M).
- Poté, co jsme provedli konfiguraci a její uložení, můžeme přikročit ke kompilaci jádra příkazem make.
- Dále nainstalujeme moduly: make modules_install - dojde k jejich nakopírování do /lib/modules/linux-verze_zkompilovaného_jádra
- Po zkompilování bude jádro (většinou soubor bzImage) v arch/xyz/boot (xyz = námi požadovaná architektura). Provedeme
nakopírování jádra z arch/xyz/boot, konfiguračního souboru .config a souboru System.map do /boot (a jejich patřičné přejmenování na config-verze_jádra a System.map-verze_jádra).
Případně je možné použít příkaz make install (použije LILO, pokud je dostupné).
- Upravíme nastavení zavaděče (GRUBu), aby bylo možné po restartu nabootovat s novým jádrem.
Případné vytvoření initramdisku se provede nástrojem mkinitramfs.
Uživatelské nástroje
Některé nástroje pro práci s jádrem z uživatelského prostoru:
- modprobe - zavedení nebo odstranění modulu
- lsmod - výpis informací o zavedených modulech
- dmesg - výpis hlášení jádra
Prostřednictvím souborů v /proc a /sys lze za běhu nastavovat parametry
jádra nebo z nich číst informace poskytované jádrem.
Parametry předávané jádru při startu
Při zavádění jádra mu mohou být zavaděčem předány konfigurační nebo ladicí parametry, například:
- root=/dev/sda1 - kořenový oddíl je /dev/sda1
- ro - kořenový oddíl bude připojen pouze pro čtení
- single - boot do jednouživatelského režimu
- memtest=X - spuštění nástroje pro kontrolu operační paměti a provedení X průchodů testovacích procedur
- noinitrd - jádro nepoužije initramdisk
Kompletní seznam parametrů lze najít na
http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt
System.map
System.map je soubor, který obsahuje tabulku jmen symbolů (jmen proměnných nebo funkcí) používaných jádrem a jejich umístění v paměti.
Je generován při každé kompilaci jádra a slouží k překladu jmen symbolů na jejich adresy a naopak.
Literatura