Minule jsme si stáhli jádro a případně i nějaké patche. Než budete pokračovat, nalogujte se jako root. Jádro sice může zkompilovat i obyčejný uživatel, ale není to moc obvyklé. Proto tento případ ani nebudu řešit. Prvním krokem bude rozbalení jádra do adresáře /usr/src/linux. Pokud tento adresář existuje, nejdříve jej raději smažte. Nebylo by dobré, kdyby se soubory z různých verzí pomíchaly. Pokud chcete, můžete zdrojové kódy jádra umístit třeba do adresáře /usr/src/linux-2.X.X, ale já budu předpokládat, že zdrojáky jsou v obvyklém adresáři /usr/src/linux.
Jak rozbalit zdrojáky do zvoleného adresáře? Postupů je několik. Nejjednodušším (ale nejpomalejším) způsobem je použití Midnight Commanderu. Otevřete si archiv v jednom panelu, v druhém vejdete do adresáře /usr/src a začnete kopírovat. Rychlejším způsobem je použití příkazové řádky, přesněji příkazu tar. Kompresí jsem se detailněji zabýval na LinuxWorldu, proto jen stručně. Otevřete si v shellu adresář /usr/src a spusťte příkaz tar xzf linux-2.4.0-test11.tar.gz (za předpokladu, že je tento soubor v aktuálním adresáři. Pokud je jádro zabaleno bzipem2 (koncovka je bz2), nahradíte masku xzf touto verzí: xIf. Zvídavější najdou dostatek informací v manuálové stránce příkazu tar.
Pokud jste si stáhli patch pro novější jádro, je třeba jej aplikovat. Patch je třeba aplikovat vždy proti správnému jádru. To znamená, že pokud je určen třeba pro 2.2.17 a vy jej použijete na jádro 2.4.0-test5 nebo 2.2.13, máte smůlu a nejspíš se dočkáte záplavy rejectů (odmítnutí). Nejsnadnější cestou k aplikaci patche je skript patch-kernel. Postup je následovný: stáhněte si patch (všechny patche) do adresáře /usr/src a pak v tomto adresáři spusťte příkaz linux/scripts/patch-kernel. Skript automaticky zjistí aktuální verzi jádra a aplikuje všechny dostupné patche. Bohužel skript funguje pouze tehdy, pokud se mezi jednotlivými verzemi jádra mění číslo verze. Například skript funguje pro patch mezi jádry 2.2.17 a 2.2.18. Nefunguje však pro meziverze typu 2.4.0-test8 a 2.4.0-test9. V takovém případě musíme patch aplikovat ručně příkazem gzip -cd patch-2.4.0-test9.gz | patch -p0.
Měl bych ještě zmínit, že kromě oficiálních patchů, které vydává Linus Torvalds a které obsahují rozdíly mezi dvěma verzemi jádra, existuje spousta neoficiálních patchů, které nějak rozšiřují schopnosti kernelu. Příkladem budiž žurnálovací systémy ext3 či ReiserFS anebo třeba crypto patche. Někdy se v této podobě šíří i ovladače hardwaru, než jsou začleněny do oficiálního jádra. Typickým příkladem je zvuková karta Sound Blaster Live, jejíž ovladač byl nejdříve dostupný jako patch pro jádro a o několik měsíců později se stal integrální součástí oficiálního kernelu. Než začnete stahovat nějaký cizí patch, přesvědčete se, že je určen pro vaše jádro. Pokud se verze liší jen o několik čísel, je tu slušná šance, že se vám patch podaří aplikovat. Pokud však uvidíte hlášku od patche „rejecting“, máte smůlu. Tyto neoficiální patche se musí aplikovat ručně.
OK, jádro je rozbaleno, patche aplikovány. Nejdříve je třeba vytvořit symbolický odkaz asm v adresáři include (jsme v adresáři /usr/src/linux). V tomto adresáři je spousta podadresářů začínajících písmeny asm. Každý z nich je určen pro specifickou platformu. Symbolický link asm musí odkazovat na některý z nich, pro PC je to asm-i386. Linky se podrobně zabývá čtvrté číslo Triků. Nyní si přečtěte soubory README a Documentation/Changes. Druhý soubor obsahuje informace o tom, jaké verze překladačů, nástrojů a knihoven potřebujete pro správnou kompilaci. Takže se jim řiďte, ušetříte si problémy.
Malá poznámka pro uživatele RedHatu verze 7: Tento RedHat standardně obsahuje překladač gcc ve verzi, která neumí přeložit jádro. Nechce se mi tuto aféru komentovat, protože bych musel mluvit sprostě. Takže jak tuto vadu obejít? Nainstalujte si balík kgcc (přesný název neznám, já zůstal u verze 6.2), což je starší a hlavně funkční verze gcc. Pak budete muset ještě upravit soubor Makefile a změnit hodnotu proměnné CC z gcc na kgcc. Tento postup je bez záruky a vychází z dostupných údajů. Pokud jsem se netrefil, házejte prosím kameny do /dev/null.
V tuto chvíli spusťte příkaz make mrproper (Ti vývojáři mají ale zajímavý smysl pro humor, že? Pojmenovat příkaz na vyčištění zdrojáků od balastu podle reklamami propagovaného čistícího prostředku :-). Nyní musíme zkonfigurovat jádro. K dispozici máme několik programů. Klasickým, ale uživatelsky nepříjemným programem je make config. V textovém režimu odpovídáte na jednotlivé otázky, nemáte možnost se vrátit zpět a změnit některou hodnotu. Pokud se spletete, musíte celou proceduru projít znovu. O několik řádů výše (z hlediska jednoduchosti používání) leží make menuconfig a make xconfig. První z nich běží v textovém režimu a obsahuje přehledné menu, ve kterém se pohybujete pomocí šipek nahoru a dolů a enteru. Druhý běží v grafickém prostředí a ovládá se pomocí myši. Ovládání je poměrně intuitivní, proto přejděme k jednotlivým volbám.
První volbou jádra je Prompt for development and/or incomplete code or drivers. Pokud ji zvolíte, budete moci použít experimentální kód. Některé ovladače jsou experimentální, ale přesto již funkční. Takže pokud se nebojíte, můžete je vyzkoušet. Ovšem na vlastní nebezpečí. A právě první volba vás má ochránit před nedokonalými ovladači. Další sekce (menu) se jmenuje Loadable module support a obsahuje tři položky. Pokud nevytváříte úzce specializované jádro, zvolte yes u všech tří položek. Tyto položky určují, zda bude jádro modulární. Kdybych měl popisovat výhody modulů, musel bych se tu rozplývat nadšením a to se mi nechce. Takže mi věřte a zaškrtněte je.
Další menu je Processor type and features. Pokud u Processor family zvolíte 386, jádro poběží na všech počítačích PC. Ale nikoliv optimálně. Takže doporučuji zvolit si z menu váš procesor. Pozor na omyly, pokud máte například AMD K6 a zvolíte Pentium II, kernel se nerozběhne (nebo brzy spadne), protože sada instrukcí obou procesorů se liší. Teď je tu několik nezajímavých voleb. Nic se nestane, pokud je necháte v přednastaveném stavu. Pokud chcete experimentovat, přečtěte si k nim nápovědu a rozhodněte se sami. Toto platí pro všechny volby, které vynechám. Zajímavou volbou je High memory support. Zde si můžete nastavit podporu až 64 GB paměti RAM. Pokud ji ale v počítači nemáte, nezapínejte tuto volbu, protože znamená pár procent výkonu dolů. Můžete si také zapnout MTRR support. Tato vlastnost nových procesorů může urychlit grafické operace, bohužel nevím, zda existují XServery, které ji využijí. Dále můžete zapnout podporu více procesorů (Symmetric multiprocesing support), ale pokud máte jen jeden procesor, vypněte ji. Opět to může znamenat určité zpomalení.
Pokračování příště.