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.
- make config - starý způsob konfigurace, postupně se dotazuje na různé parametry a požadavky uživatele
- make menuconfig - pomocí systému menu umožňuje vybrat vše potřebné
- make xconfig - je nutné spouštět z běžícího X-serveru, tedy nejlépe z xtermu. Po chviličce překladu se objeví okno, ve kterém lze postupně vybrat všechny parametry a požadavky. V případě potřeby se ke každé volbě dá zobrazit nápověda. Tam kde uživatel neví co vybrat, lze doporučit nechat původní nastavení. U některých položek je možné kliknout do sloupce M a ovladač nebo něco jiného se přeloží jako modul.
- make oldconfig - zobrazí se jen otázky, které nejsou v .config zodpovězeny
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ů:
- make dep - vytvoří soubory závislé na parametrech nutné pro kompilaci
- 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.
- 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
- 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:
- Code maturity level options - aktivace režimu pro alfa vývojáře
- Prompt for development and/or incomplete code/drivers - při Yes se zapne režim pro alfa vývojáře, kterým se v tom případě nabídne více možností a ovladačů - doporučeno No
- General setup - obecná nastavení kompilace jádra
- Support for paging of anonymous memory - podpora swap - doporučeno Yes
- System V IPC - meziprocesová komunikace - doporučeno Yes
- BSD Process Accounting - účtování procesů jádro předává informace o procesu - doporučeno Yes
- Sysctl support - podpora dynamické změny parametrů jádra - doporučeno Yes
- Kernel .config support - podpora využívání konfiugračního souboru .config pro konfiguraci kompilace jádra, apod. - doporučeno Yes - při zapnutí se aktivuje volba Enable access to .config through /proc/config.gz (NEW), což umožňuje přístup ke konfiguračnímu souboru přes /proc/config.gz - doporučeno Yes
- Remove kernel features (for embedded systems) - umožňuje odbrat některé funkce z jádra - doporučeno No
- Loadable module support - nastavení podpory zavádění modulů - viz. Princip fungování modulů
- Enable loadable module support - zapíná podporu modulů - doporučeno Yes
- Module unloading - zapíná možnost uvolňování modulů z jádra - doporučeno Yes
- Automatic kernel module loading - zapíná možnost automatického zavádění modulů, pokud jsou potřeba - doporučeno Yes
- Processor type and features - zde se nastavuje typ používaného procesoru a další související volby
- Subarchitecture Type - architektura počítače - zvolíme (PC-compatible)
- Processor family (Pentium-4/Celeron(P4-based)/Xeon) - typ procesoru - zvolíme podle procesoru, pro který kompilujeme jádro. Pokud zvolíme nižší, bude fungovat i na lepším procesoru, ale ne efektivně. Pokud zvolíme vyšší, nemusí na nižším procesoru fungovat vůbec.
- Symmetric multi-processing support - zapíná podporu pro více procesorů - pokud máte jeden, dejte No
- Preemptible Kernel - redukuje odezvu na interaktivní úlohy - doporučeno Yes pro interaktivní úlohy
- Machine Check Exception - aktivuje reagování jádra na problémy - doporučeno Yes
- High Memory Support - podpora velké paměti - pokud máme méně jak 1 GB, zvolíme (off)
- Math emulation - emulace matematického koprocesoru - pokud má me koprocesor, zvolíme No
- MTRR (Memory Type Range Register) support - podpora MTRR registrů, rychlejší grafické operace přes PCI/AGP řeší některé problémy - doporučeno Yes
- Power management options (ACPI, APM) - v této sekci je možné zapnout podporu řízení spotřeby ACPI (Advanced Configuration and Power Interface) Support a APM (Advanced Power Management) BIOS Support, úsporný režim, ukládání na disk při režimu spánku a změnu frekvnece procesoru za chodu
- Bus options (PCI, PCMCIA, EISA, MCA, ISA) - v této sekci se aktivuje podpora sběrnice PCI, ISA, EISA, MCA, a podpora PCMCIA a hot-plug zařízení
- Executable file formats - zapínání podpory knihoven a binárních souborů v různých formátech
- Device Drivers - zde se zapíná podpora nejrůznějších vstupních a výstupních zařízení (paměťová, porty, podpora Plug and Play, disky, RAID, pásková zařízení, síťová zařízení a služby, ISDN, telefonní systémy, tiskárny, grafické karty, multimediální zařízení, zvukové karty, a podpora USB
- File systems - tato čast obsahuje podporu nejrůznějších souborových systémů (ext2, ext3, cd-rom, dvd, fat, vfat, ntfs, NFS, SMB), podpora quoty, ale také nastavení národního jazykového prostředí
- Kernel hacking - další sekce pro vývojáře....
- Security options - umožňuje nastavit neobvyklé bepečnostní modely
- Cryptographic options - umožnuje nastavit podporu nejrůznějších kryptografických algoritmů