Portál AbcLinuxu, 20. dubna 2024 06:43
Kompletace potřebného software. Kde vzít zdrojové kódy a které použít. Rozdíly kompilace jader 2.6 a 2.4.
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.
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
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.
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.
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
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
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
Nyní již následuje výber součástí jádra. Zde máme možnost použít několik režimů:
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.
Sestavení jádra a modulů se mírně liší u jader řad 2.4 a 2.6:
make dep
- kontrola závislostímake bzImage
- sestavení kernelumake modules
- sestavení modulůmake
- sestavení kernelu a modulůmake modules_install
- instalace modulů do
/lib/modules/linux-X.Y.Z
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:
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
.
title Linux-2.6.13
root (hd0,0)
kernel /boot/2.6.13/bzImage ro root=/dev/hda1
Ú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.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.