Kompilace kernelu

Kompilace kernelu

Příspěvekod Human » sob 01. srp 2009 12:33:28

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.[pc] 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. [hehe3]

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 [goood]

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.
[tux]VAROVÁNÍ MICROSOFTU
Toto individuum je Linux pozitivní. Bezpečná komunikace možná pouze za použití aplikace Microsoft® Windows BrainWasher TM. Bezpečný, komunikace a Microsoft Windows BrainWasher jsou ochranné známky společnosti Microsoft Corporation.
Uživatelský avatar
Human
Moderátor
 
Příspěvky: 433
Registrován: čtv 01. led 2009 17:07:37
Bydliště: Dačice

Re: Kompilace kernelu

Příspěvekod casper » čtv 13. srp 2009 16:25:22

super peknej prehled jak na to :-)

Rad prihodim par bodu z vlastni zkusenosti:

1) existuje jeste moznost jak z konzole pomerne pohodlne konfigurovat kernel a tou je make menuconfig - mam ji celkem rad ne vzdycky ma clovek na Linuxovem stroji k dispozici X-ka (typicky na sitove servery se neinstaluji protoze predstavuji urcite bezpecnostni riziko)

2) kdyz chcete pouzit jako vychozi pro konfigurace noveho jadra predchozi konfigurace lze pouzit prikaz make oldconfig ktery vytahne konfiguraci aktualniho kernelu a nastavi vam ji pro vase aktualni zdrojaky. Funguje to i napric verzemi ty volby ktere v minulem jadru nebyli zustanou nenastaveny.

3) Urcite vsem doporucuji to delat pres balicek ;-) je to sice trocha prace navic, ale ma to sve vyhody muzete si balicek nekam pekne schovat a az budete nekdy v budoucnu re-instalovat system lze balicek pouzit a nainstalovat do nove instalace. Davam tomu osobne prednost nez si schovavat config file uz jen kvuli casu ktery sezere kompilace.

4) Osobne davam prednost zdrojakum jadra ktere byvaji v repozitarich dane distribuce nez z kernel.org. Priznam se ze v prvni rade je to asi proto abych se nemusel moc orientovat v tom ktera vetev je ktera (rozhodne vetsinou nestojim o to mit v systemu vyvojovou vetev jadra). V druhe rade je to i tim ze distributori dodavaji kernel s vlastnimi upravami pripadne otestovanymi vylepsenimi z vyvojove vetve. Plus mi prijde vyhodne vychazet z konfigurace dodavane distributorem

5) Jak rozhodnout co dat jako modul a co primo do jadra. V prvni rade vzdycky nechte v jadru podporu nacitani modulu, uz jen proto ze casem muze vzniknout potreba dodat nejaky ten driver do jadra, krom toho jsou i aplikace co bez teto podpory nefunguji. Jinak pro rozhodnuti jestli modul nebo primo zahrnout je dulezite vedet co od systemu budete potrebovat a ktere funkce jadra budou nejcasteji vyuzite (pro priklad treba podpora sifrovani kdyz pouzivate sifrovane disky, nebo komunikaci po Wi-Fi lince). U HW jsem se vzdy snazil uvazovat timto smerem => Kdyz je to pevne v pocitaci tak je dobry napad aby to bylo pevne i jadru, jinak duvod proc se snazit nacpat veci primo do jadra je zrejmy. Kdyz je to primo tam usetrite logiku s nacitanim modulu a pristupu k jeho funkcim => dana vec funguje rychleji :-)

zatim mne vic nenapada ale kdyz tak se urcite nebudu ostychat a neco pridam ;-)
In a world without fences and walls, who needs Gates and Windows?

:-DVite proc nejsou Windows ve StarTrecku?
Odpoved je snadna je to z budoucnosti :-D
casper
 
Příspěvky: 42
Registrován: sob 18. črc 2009 13:17:51


Zpět na Linux a vše okolo

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků

Tvj prohle nepodporuje flash. cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Český překlad – phpBB.cz