Kompilace kernelu

Já si teď trošku inspirován rozcházením linuxu na PDA, kde dotyčný rus (co to pro vlastní potěšení rozběhal), jen tak mimo řečí v návodu popisoval instalaci upravených věcí a jeho body návodu "zkompilujete si kernel dle svých požadavků" či "uděláte si z něj spustitelný image" atd. což jsou pro mě jako linuxového BFU trošku náročné kroky a hlavně navštívení stránky jakéhosi linuxového šílence, který na Celeronu 550MHz bootuje poslední verzi jádra do grafiky za 16 sekund díky optimalizacím, které udělal (osekal ho na kost), mě dostaly před situaci, kdy jsem zatoužil tyto kroky také poznat a naučit se jim, protože se to může hodit. Nakonec, není to až tak složitá věc když se ví co a jak.
Na internetu kolují spousty návodů jak na to, namátkou třeba http://www.abclinuxu.cz/clanky/navody/c ... ce-jadra-1 či http://d-i.alioth.debian.org/manual/cs. ... 08s06.html .
Upozornění:Instalací kernelu se dá hodně přidat ale i hodně zkazit, není to hraní si s rozlišením monitoru a výsledkem může být i nefunkční systém - sahá se teď doslova na jádro pudla éé tedy tučňáka a chyby se špatně opravují když moc nevíte co děláte. Jsou v principu 2 cesty jak dosáhnout svého. 1. klasická cesta a 2. vytvoření balíčku, což je pohodlnější a bezpečnější z hlediska instalace i deinstalace daného jádra v případě problémů.
1. Klasická cesta
Stáhnete si zdrojové kódy jádra z http://www.kernel.org. Na úvodní stránce je vystaven pouze patch z předchozí na následující poslední verzi, takže je třeba vlézt do http://www.kernel.org/pub/linux/kernel/v2.6/ pokud chcete kompletní zdrojové kódy jádra (hádám že asi ano) a je nutno si vybrat verzi, která odpovídá vaším požadavkům.
Dalším krokem je rozbalení daného archivu, např. linux-2.6.30.tar.bz2. Buď v konzoli příkazem tar -xvjf linux-2.6.30.tar.bz2 či v grafice přes Krusader, Ark nebo kýho výra který archivační program používáte.
Obvykle se jádro rozbaluje do /usr/src/ ale je možné jeho adresář nahrát kamkoliv, třeba do /home/uživatel/linux-2.6.30.
Následuje příkaz pro vyčištění takříkajíc kompilačních cest od balastu co tam zbyl od minula - make mrproper (ano, správně, TEN Mr. Proper pracuje i v linuxové kompilatoři).
Pak nastupuje vyšší dívčí škola - pokud jste fanatičtí zastánci konzole, lze všechny volby zadat z ní pomocí příkazu make config ( momentálně cca 1600 takže 9 z 10 masochistů doporučuje). V dnešní době GUI klikátek jde zvolit i druhou cestu za pomoci make xconfig - vyskočí grafické rozhraní pro nastavení parametrů jádra myší. Když nevyskočí je potřeba doinstalovat qt3, on si to instalátor napíše do konzole, po čem touží. V této chvíli má člověk moc nad tím, jaké vlastnosti jádru dá do vínku a jaký typ jádra z kompilace vypadne. Lze vyprodukovat obrovské monolitické jádro, které má všechny ovladače v sobě a nepotřebuje žádné moduly či naopak maličké jádro bez ničeho a řešící vše formou modulů. Zlatá střední cesta existuje a záleží čistě na požadavcích dotyčného. Také lze určit pro jakou architekturu se bude překládat, jestli spíš pro Intel či pro AMD nebo nějakou jinou, non-x86 architekturu. Je potřeba zmínit, že měnit defaultní nastavení by měl jen ten kdo opravdu ví co dělá, jinak v lepším případě jádro nabobtná nepotřebnými funkcemi a v horším bude nějaká funkce scházet.
Výstup z této bohulibé činnosti se uloží v adresáři jako soubor ".conf" takže je možné ho přejmenovat, zazálohovat a použít třeba příště.
Nyní nastoupí fáze, při které se protáhnou tranzistory CPU - kompilace. Funguje na starém dobrém make, přičemž (pro majitele vícejaderných CPU) existuje přepínač, kterým lze určit, kolik jader vašeho miláčka bude na této operaci otročit. V případě, že máte dualcore, napište make -j2. Ti šťastnější napíší make -j3 eventuelně make -j4 a pokud vlastníte core i7 nebo nějaký 8jádrový server, můžete zkusit -j8 atd. Urychlení procesu kompilace je skutečně velice dobře pozorovatelné a kompilace na čtyřjádru se 4 vlákny je skutečně svižná v porovnání s defaultním jednovláknovým procesem.
V případě že jste některé vlastnosti jádra nechtěli přímo do jádra a zvolili je jako moduly (víceméně 100% případů), je po dokončení kompilace jádra jako takového třeba zkompilovat i tyto moduly, příkazem make modules_install. Výsledek se objeví v /lib/modules/linux-2.6.30
Poté co kompilace skončí, následuje ruční instalace zkompilovaného jádra a k ní 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 /home/user/linux-2.6.30/linux/System.map /boot/2.6.30
cp /home/user/linux-2.6.30/linux/vmlinux /boot/2.6.30
cp /home/user/linux-2.6.30/linux/arch/i386/boot/bzImage /boot/2.6.30
cp /home/user/linux-2.6.30/linux/.config /boot/2.6.30 - zálohujeme .config
Závěrečným krokem je nastavení zavaděče LILO nebo GRUB:
LILO:
image = /boot/2.6.30/bzImage
label = linux-2.6.30
root = /dev/hda1 # oddíl, na kterém je kořenový adresář /
Nezapomeneme nainstalovat LILO do MBR příkazem lilo (bez něj se změny neuloží).
GRUB:
title Linux-2.6.30
root (hd0,0)
kernel /boot/2.6.30/bzImage ro root=/dev/hda1
(Grub se dá editovat např. z Uživatelského centra či specializovanou utilitkou pokud chcete GUI a nebo z konzole /to je řádově náročnější pro člověka co to nikdy nedělal, nesmí se udělat chyba pokud chcete aby to fungovalo/. Výhodou grubu je ale to, že v případě neúspěchu při bootu lze manuálně editovat zápisy a opravit je a zkusit bootovat znovu, což např. lilo neumožňuje a taková chyba je v jeho případě pro běžného uživatele konečná ).
That's all - nyní stačí restartovat a vybrat si při zavádění systému nové jádro
2. Cesta menšího odporu
Protože mám Debian 5, vyzkoušel jsem více automatizovanou i bezpečnější cestu spojenou s vytvořením .deb balíčku, který se dobře instaluje i odinstaluje a většinu práce s nastavováním za vás udělá jeho instalátor (pro Ubuntu by měl fungovat stejně, jsou to příbuzné distribuce).
V tomto případě je příkaz pro vyčištění kompilačních složek k make mrproper a k tomu přidán make-kpkg clean. Návod se pak až do bodu konfigurace jádra shoduje s verzí 1, pak ovšem dojde u kompilace samotné ke změnám.
Kompilaci zařizuje make, ale také je tu utilitka kpkg (což je debianí vytvářeč balíčků) pro vytvoření balíčku. Proto je tu příkaz fakeroot make-dpkg --initrd --revision=2.6.30 kernel_image. A to je vše. Jediná nevýhoda je, že zatím nevím, jaký přepínač se chová jako -j u klasického make, takže kompilace probíhá jednovláknově.
Výsledkem je balíček s linuxovým kernelem dle zvolené architektury tj. v tomto případě linux-image-2.6.30_amd64.deb. Trošku zmatečné může být, že balíček se vytváří o adresář výš, takže ho najdete v /home/user/. Ten už je dobře přenositelný i na jiné počítače a není problém s jeho konfigurací.
Instalace probíhá klasicky za pomoci příkazu dpkg -i linux-image-2.6.30_amd64.deb . A to je vše, balíček se automaticky nakonfiguruje a nyní už stačí jen restartovat systém a při novém zavádění zvolit 2.6.30
.
Stali jste se majiteli vlastního uživatelského jádra.
![.. můj život u pc.. [pc]](./images/smilies/type.gif)
Upozornění:Instalací kernelu se dá hodně přidat ale i hodně zkazit, není to hraní si s rozlišením monitoru a výsledkem může být i nefunkční systém - sahá se teď doslova na jádro pudla éé tedy tučňáka a chyby se špatně opravují když moc nevíte co děláte. Jsou v principu 2 cesty jak dosáhnout svého. 1. klasická cesta a 2. vytvoření balíčku, což je pohodlnější a bezpečnější z hlediska instalace i deinstalace daného jádra v případě problémů.
1. Klasická cesta
Stáhnete si zdrojové kódy jádra z http://www.kernel.org. Na úvodní stránce je vystaven pouze patch z předchozí na následující poslední verzi, takže je třeba vlézt do http://www.kernel.org/pub/linux/kernel/v2.6/ pokud chcete kompletní zdrojové kódy jádra (hádám že asi ano) a je nutno si vybrat verzi, která odpovídá vaším požadavkům.
Dalším krokem je rozbalení daného archivu, např. linux-2.6.30.tar.bz2. Buď v konzoli příkazem tar -xvjf linux-2.6.30.tar.bz2 či v grafice přes Krusader, Ark nebo kýho výra který archivační program používáte.
![.. to je bžunda [hehe3]](./images/smilies/smile2.gif)
Obvykle se jádro rozbaluje do /usr/src/ ale je možné jeho adresář nahrát kamkoliv, třeba do /home/uživatel/linux-2.6.30.
Následuje příkaz pro vyčištění takříkajíc kompilačních cest od balastu co tam zbyl od minula - make mrproper (ano, správně, TEN Mr. Proper pracuje i v linuxové kompilatoři).
Pak nastupuje vyšší dívčí škola - pokud jste fanatičtí zastánci konzole, lze všechny volby zadat z ní pomocí příkazu make config ( momentálně cca 1600 takže 9 z 10 masochistů doporučuje). V dnešní době GUI klikátek jde zvolit i druhou cestu za pomoci make xconfig - vyskočí grafické rozhraní pro nastavení parametrů jádra myší. Když nevyskočí je potřeba doinstalovat qt3, on si to instalátor napíše do konzole, po čem touží. V této chvíli má člověk moc nad tím, jaké vlastnosti jádru dá do vínku a jaký typ jádra z kompilace vypadne. Lze vyprodukovat obrovské monolitické jádro, které má všechny ovladače v sobě a nepotřebuje žádné moduly či naopak maličké jádro bez ničeho a řešící vše formou modulů. Zlatá střední cesta existuje a záleží čistě na požadavcích dotyčného. Také lze určit pro jakou architekturu se bude překládat, jestli spíš pro Intel či pro AMD nebo nějakou jinou, non-x86 architekturu. Je potřeba zmínit, že měnit defaultní nastavení by měl jen ten kdo opravdu ví co dělá, jinak v lepším případě jádro nabobtná nepotřebnými funkcemi a v horším bude nějaká funkce scházet.
Výstup z této bohulibé činnosti se uloží v adresáři jako soubor ".conf" takže je možné ho přejmenovat, zazálohovat a použít třeba příště.
Nyní nastoupí fáze, při které se protáhnou tranzistory CPU - kompilace. Funguje na starém dobrém make, přičemž (pro majitele vícejaderných CPU) existuje přepínač, kterým lze určit, kolik jader vašeho miláčka bude na této operaci otročit. V případě, že máte dualcore, napište make -j2. Ti šťastnější napíší make -j3 eventuelně make -j4 a pokud vlastníte core i7 nebo nějaký 8jádrový server, můžete zkusit -j8 atd. Urychlení procesu kompilace je skutečně velice dobře pozorovatelné a kompilace na čtyřjádru se 4 vlákny je skutečně svižná v porovnání s defaultním jednovláknovým procesem.
V případě že jste některé vlastnosti jádra nechtěli přímo do jádra a zvolili je jako moduly (víceméně 100% případů), je po dokončení kompilace jádra jako takového třeba zkompilovat i tyto moduly, příkazem make modules_install. Výsledek se objeví v /lib/modules/linux-2.6.30
Poté co kompilace skončí, následuje ruční instalace zkompilovaného jádra a k ní 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 /home/user/linux-2.6.30/linux/System.map /boot/2.6.30
cp /home/user/linux-2.6.30/linux/vmlinux /boot/2.6.30
cp /home/user/linux-2.6.30/linux/arch/i386/boot/bzImage /boot/2.6.30
cp /home/user/linux-2.6.30/linux/.config /boot/2.6.30 - zálohujeme .config
Závěrečným krokem je nastavení zavaděče LILO nebo GRUB:
LILO:
image = /boot/2.6.30/bzImage
label = linux-2.6.30
root = /dev/hda1 # oddíl, na kterém je kořenový adresář /
Nezapomeneme nainstalovat LILO do MBR příkazem lilo (bez něj se změny neuloží).
GRUB:
title Linux-2.6.30
root (hd0,0)
kernel /boot/2.6.30/bzImage ro root=/dev/hda1
(Grub se dá editovat např. z Uživatelského centra či specializovanou utilitkou pokud chcete GUI a nebo z konzole /to je řádově náročnější pro člověka co to nikdy nedělal, nesmí se udělat chyba pokud chcete aby to fungovalo/. Výhodou grubu je ale to, že v případě neúspěchu při bootu lze manuálně editovat zápisy a opravit je a zkusit bootovat znovu, což např. lilo neumožňuje a taková chyba je v jeho případě pro běžného uživatele konečná ).
That's all - nyní stačí restartovat a vybrat si při zavádění systému nové jádro
![.. to je onooo.. [goood]](./images/smilies/thumb.gif)
2. Cesta menšího odporu
Protože mám Debian 5, vyzkoušel jsem více automatizovanou i bezpečnější cestu spojenou s vytvořením .deb balíčku, který se dobře instaluje i odinstaluje a většinu práce s nastavováním za vás udělá jeho instalátor (pro Ubuntu by měl fungovat stejně, jsou to příbuzné distribuce).
V tomto případě je příkaz pro vyčištění kompilačních složek k make mrproper a k tomu přidán make-kpkg clean. Návod se pak až do bodu konfigurace jádra shoduje s verzí 1, pak ovšem dojde u kompilace samotné ke změnám.
Kompilaci zařizuje make, ale také je tu utilitka kpkg (což je debianí vytvářeč balíčků) pro vytvoření balíčku. Proto je tu příkaz fakeroot make-dpkg --initrd --revision=2.6.30 kernel_image. A to je vše. Jediná nevýhoda je, že zatím nevím, jaký přepínač se chová jako -j u klasického make, takže kompilace probíhá jednovláknově.
Výsledkem je balíček s linuxovým kernelem dle zvolené architektury tj. v tomto případě linux-image-2.6.30_amd64.deb. Trošku zmatečné může být, že balíček se vytváří o adresář výš, takže ho najdete v /home/user/. Ten už je dobře přenositelný i na jiné počítače a není problém s jeho konfigurací.
Instalace probíhá klasicky za pomoci příkazu dpkg -i linux-image-2.6.30_amd64.deb . A to je vše, balíček se automaticky nakonfiguruje a nyní už stačí jen restartovat systém a při novém zavádění zvolit 2.6.30

Stali jste se majiteli vlastního uživatelského jádra.