Portál AbcLinuxu, 20. dubna 2024 06:43

Cesta do hlubin kompilace jádra - 1

31. 8. 2005 | Antonín Kolísek
Články - Cesta do hlubin kompilace jádra - 1  

Kompletace potřebného software. Kde vzít zdrojové kódy a které použít. Rozdíly kompilace jader 2.6 a 2.4.

Na úvod

Kde kdo byl určitě již postaven před problém typu něco nefungovalo, něco nebylo podporováno. Nebo z čisté zvědavosti prostě stál před výzvou a někdy obávaným úkolem kompilovat vlastní kernel. Pro člověka v Linuxu ne moc zběhlého to může být docela zapeklitá situace. Kompilace sama o sobě je krok, který zvládne téměř každý, kdo pracuje s Linuxem pár týdnů. Mnohdy se ale stane, že i když je vlastní jádro dobře přeložené, je ještě více pomalé než to distribuční a nebo v něm nefunguje plno věcí, jak by mělo.

Zde jsem se zhostil úkolu popsat v několikadílném seriálu nejen samotnou kompilaci, ale především poukázat na to co, kdy a proč dát a nebo nedat do našeho jádra, a co vše je k tomu potřeba. Z obrovské rozsáhlosti jednotlivých subsystémů jádra se pokusím poukázat na ty důležité a nezbytné pro správnou činnost. U některých sekcí se zdržím více. U některých méně nebo téměř vůbec, především tehdy, jedná-li se o některý exotický hardware nebo funkci v normálních podmínkách nepotřebnou. Začátečník i pokročilý uživatel by si měli přijít na své. Právě pro ty je tento seriál směřován.

Zdrojové kódy

Pro kompilaci kernelu je potřeba obstarat si zdrojové kódy. Je možné použít ty, které jsou přibaleny v distribucích (u některých distribucí to doporučuji, pokud nechcete ztratit některé její funkce a vlastnosti), což není pravidlem. Je možné použít i zdrojové kódy jádra zcela čisté, bez přídavných záplat a doplňků, jimiž se liší různé distribuce. Osobně se přikláním k použití zdrojových kódů, jak se říká, přímo od výrobce tzv. vanilla kernel.

Vždy se nejprve podívejte na www.kernel.org, kde je vidět aktuální situace okolo verzí Linuxu. Tam je možné stáhnout čisté zdrojové kódy - vanilla karnel.

V článku Patchsety pro kernel jsou popisovány různé patchsety, tj. sady patchů připravené pro aplikaci na vanilla jádra.

Po stažení zdrojových kódů (např. linux-2.6.13.tar.bz2) budeme potřebovat pro jejich rozbalení programy GNU tar, bzip2 (pro .tar.bz2) nebo gzip (pro .tar.gz), které jsou součástí všech distribucí.

Má-li někdo starší verzi zdrojových kódů, má možnost je aktualizovat aplikováním záplat (tzv. patchů). Musí být však splněna podmínka: aktualizovat se musí postupně, takže pokud chci zdrojové kódy verze 2.6.10 aktualizovat na 2.6.12, musí se aplikovat nejprve patch na verzi 2.6.11 a následně patch na verzi 2.6.12. Pro patchování jádra je potřeba mít program patch. Pokud již systém obsahuje zdrojové kódy (nalézají se v /usr/src/) a chceme je záplatovat/aktualizovat, provedeme nakopírování patche na příslušné místo a aplikujeme jej:

cp patch-2.6.13.bz2 /usr/src/linux-2.6.12
bzip2 -dc patch-2.6.13.bz2 | patch -p1

nebo

gzip -cd patch-2.6.13.gz | patch -p1

V případě, kdy zdrojové kódy ještě v systému nemáme, rozbalíme patřičný balíček, např:

cp linux-2.6.13.tar.bz2 /usr/src
tar -xvjf linux-2.6.13.tar.bz2

nebo

tar -xvzf linux-2.6.13.tar.gz

Dále je vhodné vytvořit symbolický link na adresář se zdrojovými kódy.

cd /usr/src
ln -s linux-2.6.13 linux

Potřebný software

Po rozbalení je vhodné se podívat na soubor /usr/src/linux/Documentation/Changes, který obsahuje mimo jiného také souhrn programů a jejich verzí potřebných pro kompilaci a správný běh jádra. To se může čas od času měnit, proto je vhodné ověřit si, zda náš systém obsahuje požadované programy.

Kompilace jádra

I když nyní trochu předběhnu, popíši zde postup kompilace jádra. Nutný předpoklad je mít vybrané potřebné součásti kernelu před vlastní kompilací. Výběru komponent se budou týkat následující díly tohoto seriálu. Uvádím zde postup předčasně pro případné zájemce a pro ty, kdo chtějí experimentovat a zkusit si sestavit vlastní kernel ihned.

  1. V první fázi, pokud kompilujeme jádro ze stávajících zdrojových kódů poprvé, je nutné provést make mrproper, přeskočení tohoto kroku je častou příčinou neúspěšné kompilace nebo vytvoření chybně pracujícího jádra. Pokud jsme však již jádro kompilovali a provedeme make mrproper, pak dojde ke smazání také souboru .config, který ještě můžeme potřebovat.

    make mrproper
  2. Pokud budeme kompilovat ze zdrojových kódů, ze kterých se již jádro dříve kompilovalo, musíme smazat existující hlavičkové a binární soubory:

    make clean
  3. Jestliže jsme již jádro kompilovali (např. 2.6.12), a chceme použít existující konfiguraci i pro kompilaci jádra 2.6.13, použijeme existující .config:

    make oldconfig
  4. Nyní již následuje výber součástí jádra. Zde máme možnost použít několik režimů:

    make config
    příkazová řádka, postupné potvrzování, velmi zdlouhavé
    make menuconfig
    menu v textovém režimu

    menuconfig

    make xconfig
    menu v grafickém režimu, používá knihovny Qt

    xconfig

    make gconfig
    menu v grafickém režimu, používá knihovny GTK+2

    gconfig

  5. Výběru komponent jádra se budu věnovat v dalších dílech. Nyní následují další kroky po výběru komponent.

  6. Sestavení jádra a modulů se mírně liší u jader řad 2.4 a 2.6:

    Jádra 2.4 a nižší
    1. make dep - kontrola závislostí
    2. make bzImage - sestavení kernelu
    3. make modules - sestavení modulů
    Jádra 2.6
    1. make - sestavení kernelu a modulů
  7. make modules_install - instalace modulů do /lib/modules/linux-X.Y.Z

Instalace zkompilovaného jádra

Zatímco kompilaci je možné provádět jako běžný uživatel, pro instalaci jsou potřeba práva superuživatele.

Po kompilaci nakopírujeme obraz jádra + další soubory do adresáře /boot. Doporučuji vytvořit si pro přehlednost i příslušný podadresář:

mkdir /boot/2.6.13
cp /usr/src/linux/System.map /boot/2.6.13
cp /usr/src/linux/vmlinux /boot/2.6.13
cp /usr/src/linux/arch/i386/boot/bzImage /boot/2.6.13
cp /usr/src/linux/.config /boot/2.6.13 - zálohujeme .config

Závěrečným krokem je nastavení zavaděče LILO nebo GRUB:

LILO:
image = /boot/2.6.13/bzImage
label = linux-2.6.13
root = /dev/hda1 # oddíl, na kterém je kořenový adresář /

Nezapomeneme nainstalovat LILO do MBR příkazem lilo.

GRUB:
title Linux-2.6.13
root (hd0,0)
kernel /boot/2.6.13/bzImage ro root=/dev/hda1

Závěr

Úvodní díl nás seznámil s vlastní kompilací. V následujícím díle se zaměřím na zjišťování informací o našem hardware, které bude potřeba pro výběr jednotlivých komponent.

Seriál Cesta do hlubin kompilace jádra (dílů: 3)

První díl: Cesta do hlubin kompilace jádra - 1, poslední díl: Cesta do hlubin kompilace jádra - 3.
Následující díl: Cesta do hlubin kompilace jádra - 2 (Hardware)

Související články

Kompilovanie jadra - I
Kompilovanie jadra - II
Patchsety pro kernel
Na co se často ptáme
Seriál: Nebojíme se kompilace
Téma: kdy kompilovat jádro

Odkazy a zdroje

kernel.org

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.