Jádro systému, konfigurace jádra

Stanislav Jurnečka, xjurneck na serveru mail.muni.cz


Obsah


Princip fungování jádra

Jádro systému (kernel) je srdcem operačního systému. Poskytuje základní služby ostatním aplikacím, představuje jednotné rozhraní pro komunikaci s různými periferiemi, stará se o systém souborů, komunikaci mezi procesy, správu paměti, spouští programy, řídí jejich současný běh, přiděluje paměť a další technické prostředky různým procesům, přijímá a odesílá pakety z a do počítačové sítě atd. Jádro systému samotné toho dělá velmi málo, ale poskytuje základní služby různým nástrojům, pomocí kterých mohou být realizovány všechny ostatní služby. Jádro rovněž hlídá, aby nikdo nemohl přistupovat k zařízením přímo. Když chtějí uživatelé a procesy používat technické prostředky, musí používat nástroje, které nabízí jádro systému. Tímto způsobem je zabezpečená i vzájemná ochrana uživatelů.

Velikost jádra je závislá na množství hardwaru, se kterým umí pracovat, ale také na počtu služeb a funkcí, které poskytuje. V každé instalaci je obvykle jádro, které si rozumí s co největším počtem periferií, takže by mělo pracovat téměř vždy, a proto mnohdy začínající uživatelé nemají potřebu jádro systému nějak měnit. Je jasné, že takové jádro obsahuje mnoho kódu, který se nikdy nepoužije, protože daná periferie v počítači není. Vzhledem k tomu, že zdrojové texty jádra jsou volně dostupné, může si každý zkompilovat nové jádro přesně na míru pro svůj počítač. Stejným postupem je možné do jádra začlenit ovladače periferií, podporu zařízení, služeb a funkcí, které v původním jádru nebyly.


Princip fungování modulů

Snažíme se mít jádro co nejmenší a co nejlépe zoptimalizované pro náš počítač, bez ovladačů, které nepoužíváme. Pokud některá zařízení nepoužíváme tak často, je možné kód těchto ovladačů zařízení, který by byl jinak součástí jádra, začleněnit do takzvaného kernel loadable modulu, který se do paměti nezavádí při bootu, ale teprve tehdy, když je potřeba. Tím se zmenšuje velikost samotného jádra. Nekompilujeme (ani jako moduly) ovladače pro zařízení, která v našem systému nejsou, případně další subsystémy, které nikdy na daném počítači nepoužijeme. Urychlíme tak start systému a ušetříme paměť. Pro zavádění modulů do běžícího jádra se používá utilita insmod, pro uvolňování rmmod, pro výpis zavedených modulů lsmod. Dokonalejší prográmek modprobe zavádí i případně závislé moduly. Automatické spouštění modulů po restartu se nastavuje v souboru /etc/modules.conf a obstarává jej démon kerneld.


Kde lze jádro nalézt, číslování verzí

Primárním server, odkud je možné jádro získat je ftp://ftp.kernel.org/pub/linux/kernel, ale nám nejbližší je http://ftp.linux.cz/pub/linux/kernel, dále podle verze (poslední stabilní verze je 2.6.3, tj. http://ftp.linux.cz/pub/linux/kernel/v2.6/linux-2.6.3.tar.bz2). Verze, které mají na druhé pozici liché číslo jsou vývojové, pokud sudé, jsou tzv. stabilní. Výhodou vývojových verzí je obvykle širší podpora speciálního hardware, ale nejsou tolik vyzkoušené a proto se nehodí pro kritické aplikace a pro začátečníky. Verzi právě běžícího jádra je možné zjistit příkazem uname -a. Je vhodné přesunout starou verzi v adresáři /usr/src/linux a rozbalit do něj novou verzi např. příkazem bz2cat linux-x.y.z.tar.bz2 | tar xvf - a změnit symbolický odkaz /usr/src/linux tak, aby ukazoval na adresář s novou verzí. Poté se můžeme pustit do konfigurace, kterou provádíme v tom adresáři, do kterého jsme soubor rozbalili.


Způsoby konfigurace

V souboru README se nachází pokyny, které je vhodné si přečíst, protože konfigurace se může trochu lišit. Další informace jsou v adresáři Documentation, zejména mohou být vyžadovány novější verze balíčků (soubor Documentation/Changes).

Nyní si můžeme vybrat některý způsob konfigurace, a vytvořit tak soubor .config. Podle informací v něm se určí, co se do jádra zkompiluje.

Jakmile skonči konfigurační skript a jste si jisti že jste všechno zadali správně, můžete začít vlastní kompilaci. Provede se to v adresáři jádra pomocí následující posloupnosti příkazů:

  1. make dep - vytvoří soubory závislé na parametrech nutné pro kompilaci
  2. make clean ; make mrproper - velmi důkladné pročištění stromu /usr/src/linux nejen od předchozích objektových souborů - je bezpečnější to vždy před kompilací nového jádra udělat - odstraní všechny *.o soubory, což je produkt překladače před slinkováním dohromady, po kompilaci doporučuji provést protože odstraní několik MB zbytečných souborů z disku.
  3. make bzImage - začne se kompilovat a vytvářet komprimovaný binární obraz jádra do souboru /usr/src/linux/arch/i386/boot/bzImage nebo pomocí make bzdisk na disketu
  4. make modules; make modules_install - pokud je jádro zkompilováno s podporou modulů a některé ovladače jsou jako moduly nastaveny, dojde k jejich vytvoření a nainstalování do /lib/modules/_kernel_version_dir_/ kde _kernel_version_dir_ je číslo verze jádra (např. 2.6.3 v našem případě)

Na závěr je potřeba informovat zavaděč, aby používal naše nové jádro (např. pro LILO upravíme soubor /etc/lilo.conf a spustíme lilo). Je vhodné vytvořit novou položku pro nové jádro a starou ponechat a umožnit tak zavedení starého jádra pro případ problémů.


Význam některých konfiguračních voleb

V případě použití např. make menuconfig je pro každou položku nápověda, která vám pomůže rozhodnout se, zda-li danou volbu zakompilovat do jádra či ne. Při konfiguraci jádra je nutné znát velice přesně konfiguraci počítače.

Příklad konfigurace jádra poslední stabilní verze 2.6.3. Po zadání make menuconfig se objeví následující struktura, která má popsaný význam: