Kompilace jádra Linuxu (P090)

Aleš Berka, aberka@atlas.cz


Obsah


Úvod

Linuxové jádro se stále vyvíjí a tak je občas potřeba přejít na novou verzi. Nebo si koupíte nový hardware, který stávající konfigurace systému nepodporuje. Nebo... Důvodů může být mnoho.
Protože je ale Linuxové jádro monolitické, je potřeba si jej pro své potřeby sestavit na míru - skompilovat. Jen pro přehled, mikrokernelová jádra se skládají z různých částí, která zastávají jednotlivé úkoly. Jsou navzájem izolované, nicméně mohou mezi sebou komunikovat. Monolitické jádro tvoří jeden kus kódu, který se navenek nedělí, všechny části jádra mají stejné pravomoce. Zatímco v mikrokernelovém jádře lze jednotlivé součástí načítat a uvolňovat podle potřeby, monolitické jádro je potřeba překompilovat při změně hardwaru a podobných situacích. Proto se používá v dnešních jádrech modulární technologie, která umožňuje izolovat jednotlivé ovladače do tzv. modulů, které lze za běhu přilinkovat k jádru. Lze použít i automatické zavádění / uvolňování, které poskytuje kereneld démon. Moduly mají stejné možnosti jako přikompilované součásti, jejich výhodou je velikost a flexibilita výsledného jádra, nevýhodou může být zvýšená režie - pamět, využití CPU. Při použití modulů je vhodné používat verzi ideálně stejnou jako má jádro, případně o něco starší.


Jádro

Verze jádra se skládá hlavně z 3 čísel X.Y.Z, přičemž X. udává hlavní verzi, v současnosti a v blízke budoucnosti 2, Y. udává řadu (zde se používá rozlišení na vývojářské a na stabilní verze - vývojářské jsou liché řady, stabilní sudé), Z zjemňuje rozlišení verzí, jedná se vetšinou o menší úpravy.

Nejnovější jádro (zdrojové kódy v ANSI C s některými GCC rozšířeními) můžete najít zde:
http://www.kernel.org/mirrors
http://www.linux.cz/
ftp://ftp.cs.helsinki.fi/pub/Software/Linux/Kernel/
ftp://ftp.kernel.org/

Jádro je v posledních verzích už značně velké, je potřeba s tím počítat. Archiv má 22MB, na rozbalení a kompilaci bude vhodné počítat se 100 nebo i více MB. Záleží na verzi. Rozbalené 2.2.X jádro má 55MB. Pokud často stahujete jádra, může se vám hodit používat patche. Stačí mít nějakou starší verzi a patch převádějící tuto starší verzi na novou. Velikosti patch souboru je zanedbatelná v porovnání s celým archivem.

Použití patche:
cd /usr/src/linux
patch -p1 < patch-x.x.x
Pokud se patchování nepodaří, zejména config.in (z důvodu vašich manuálních úprav), vyeditujte si config.in.rej, kde zůstávají neprovedené úpravy, zkonfrontuje je s vaším config.in (zejména nastavení yes, no) s případnými opravami spusťte
patch -p0 < config.in.rej
Po úspěšném patchování můžete smazat *.orig (původní) a *.rej (odmítnuté změny) soubory.
Oficiální i neoficiální patche můžete najít na http://www.linuxhq.com/


Před kompilací

Jádro rozbalte do /usr/src/linux nebo alespoň vytvořte odkaz /usr/src/linux na adresář se zdrojovými kódy. Adresářová struktura zdrojových kódu má následující význam:

/arch architekturně závislý kód, např. /arch/i386
/include include soubory potřebné pro kompilaci, architekturně závislý kód je odlišen adresáři, např.: /include/asm-i386
/init incializační kód
/mm část starající se o paměťový management (architekturně závislý kód paměťového managementu je např. v /arch/i386/mm)
/drivers systémové ovladače zařízení - adresáře tvoří různé kategorie: char, block, pci, cdrom, sound, ...
/ipc meziprocesová komunikace
/modules sem se ukládají skompilované moduly
/fs ovladače souborových systémů
/kernel hlavní kód jádra, architekturně závislá část je opět v podadresáři /arch...
/net podpora síťování
/lib knihovny potřebné pro jádro (také /arch/i386/lib atd...)
/scripts skripty využívané při kompilaci (awk, tk, ...)

Požadavky

Jak už jsem zmínil, je potřeba dostatek volného místa. Kromě hardwaru je ale potřeba i nutné softwarové zázemí, které je popsáno v README každého jádra. Na kompilaci potřebujete přímo gcc a libc.


Příprava

Těsně před samotnou kompilací je potřeba vybrat, co se má kompilovat a jak má výsledné jádro vypadat. O to se starají konfigurační skripty, které můřete vyvolat pomocí příkazů:
make config
make menuconfig
make xconfig
make oldconfig
Liší se navzájem jen v uživatelském komfortu. Zatímco make config se postupně ptá YES, NO, MODULAR, make menuconfig vám zobrazuje textové menu s nabídkami. make xconfig dokonce využívá grafické prostředí X window system. make oldconfig se snaží rozpoznat vaše nastavení ze starého konfiguračního souboru a podle něj vyplnit nový.
Při konfiguraci (kromě make oldconfig) máte na výběr, zda součást přikompilovat (YES), ignorovat (NO), nebo ji připravit jako modul s možností dynamické přilinkovaní (MODULE). Středně a málo používané součástí je vhodné kompilovat jako modulární.

Konfigurace se ukládá do souboru .config

Pri konfiguraci se vás bude skript ptát zejména jaký typ procesoru máte (přesným zadáním muže využít optimalizace jemu šité na míru - pozor, poslední verze 2.4.X mají problémy s Athlon/Duron optimalizacemi. Setkáte-li se s hláškou kernel panic, snižte optimalizacní stupeň na i586), na bloková, SCSI, znaková zařízení (zda vůbec instalovat SCSI podporu, u IDE disků mužete zvolit old disk-only, které podporuje jen 2 zařízení na jednom rozhraní, nebo new IDE, které podporuje sekundární rozhraní a IDE/ATAPI CD-ROM mechaniky)), síťování (i když nepoužíváte síť, doporučuji zapnout - např. známý virtuální stroj VMware je při správné konfiguraci schopen pres TCP/IP komunikovat s hostitelským systémem), souborové systémy (výběr je na vás, podporované systémy jsou: FAT, FAT32, NTFS, ISO9660, ext2 (nezbytné), NFS, ReiserFS, OS/2 HPFS, /proc (nezbytné) ...), zvuková podpora (instalace různých zvukových karet, modulární), IrDA podpora, ISDN, TV, Joystick, ...

Nevynechejte ani matematickou emulaci, nepodporuje-li ji váš procesor, ISO9660 souborový systém používaný na CD...
Obecně se nedoporučuje zapínat Kernel hacking

Více o konkrétních volbách vám poskytne buď nápověda v konfiguračním skriptu nebo dokumenty v adresáři Documentation/ patřící ke každé distribuci zdrojových kódů.

Před instalací je rovněž vhodné zadat
make clean
resp.
make mrproper
zvláště pokud prekompilovávate již jednou skompilované jádro. Tyto makra se starají o odstranění starých souborů. make clean maže zejména binární soubory, závislosti (.depend) a konfiguraci (.config) zachovává, make mrproper (jak již název napovída je při své "práci" poctivější, maže vše tak, aby v adresáři zůstaly pouze soubory obsažené v původní distribuci zdrojových kódů). Příkaz
make dep
vyřeší závislosti.


Kompilace

Kompilace

Pro kompilaci zadejte
make zImage
make bzImage
make zdisk
přičemž zImage vytváři zazipovaný obraz jádra, bzImage zazipovaný velký obraz jádra (pokud zImage nestačí) (pozor, zde je potřeba mít novou verzi zavaděče LILO) a zdisk (alt. bzdisk) vytváří přímo image na disketu (podmínkou je vložení naformátované diskety do mechaniky).
make modules
kompiluje moduly, které nebyly vybrány při konfiguraci.
make modules_install
se stará o instalaci skompilovaných modulů

Skompilovaný čistý obraz jádra najdete v /usr/src/linux/vmlinux, komprimovaný obraz v adresáři /usr/src/linux/arch/i386/boot/.


Instalace

Jádro Linuxu se zavádí utilitou Linux Loader neboli LILO. Jeho konfigurace je uložena v /etc/lilo.conf nebo nověji v /etc/lilo/config. Po úpravě konfigurace je potřeba lilo zavést a to pomocí příkazu
lilo
nebo
/etc/lilo/lilo -C 
nebo také
/etc/lilo/install

Pokud máte velký disk, doporučuji používat nejnovější verzi LILA, s určitými verzemi vznikaly nemalé problémy v kombinaci s disky nad 6,5GB.

Historie

  • v2.0.x
    Toto jádro bylo v zásadě revoluční, přišlo s podporou mnoha platforem (kromě i386 také alphy, mips, ppc, sparc, amigy M68K, atari). Byla přidána podpora pro Intel Triton Busmaster DMA, výměnná zařízení, širší využití modulů vč. dynamického linkování modulů kerneld démonem, SMP s až 16 procesory, APM, IP tunelovani...

  • v2.2.x
    Zde se objevila podpora Intel StrongARM, Plug And Play na paralelnim portu, bus master DMA, framebuffer pro X (využíva XFree 4.X) nezávislé na grafické kartě, modularizace zvukové podpory, vylepšení /proc systému, podpora IrDA, BT 8x8 TV čipů, X.25 a mnoha dalšího. Vylepšení se rovněž dočkalo SMP.

  • v2.4.x
    V jádře 2.4.x podporuje SMP více než 16 procesorů, bylo zde přepsáno kompletně síťování, podpora 64bitové platformy i64, nová stabilní podpora ISA PNP. Podpora USB a PC Card byla vylepšena. Podporuje se NFS v3, UDF pro CD a DVD...



    Odkazy

    Další užitečné odkazy můžete najít zde:

    http://www.freeos.com/articles/2589/
    http://www.phil.muni.cz/~letty/os.html
    http://www.ibiblio.org/mdw/index.html
    http://www.math.muni.cz/linux/tlk-html/
    http://www.cpress.cz/knihy/linux/


    10. 10. 2001, Aleš Berka