LINUXZONE






 >> Hlavní stránka

(1751/28.09.2010)


 >> Administrace

(161/05.08.2010)


 >> Literatura

(312/14.09.2010)


 >> Bezpečnost

(347/17.09.2010)


 >> Programování

(307/19.04.2010)


 >> Distribuce

(98/16.09.2010)


 >> Síťování

(86/03.06.2010)


 >> Lokalizace

(10/15.09.2004)


 >> Aplikace

(176/12.08.2010)


 >> Multimedia

(32/31.03.2006)


 >> Hardware

(45/02.03.2007)


 >> Začínáme

(229/09.09.2010)


 >> Aktuálně

(564/20.09.2010)


 >> RELAX

(213/28.09.2010)


 >> Jinde vyšlo

přehled ostatních serverů




 Coolhousing




Coolhousing - Vas poskytovatel dedikovanych serveru




 Přihlášení




Login:
Heslo:
 uložit v prohlížeči


Nejste-li ješte zaregistrováni, můžete tak učinit zde.





 Vyhledávání




Hledaný výraz:
v klíčových slovech
v titulku
v anotaci
v textu








 Reklama









 Servis




*   Vaše náměty a připomínky
Máte k Linuxzone.cz nějaké připomínky nebo náměty? Našli jste na stránkách chybu? Dejte nám o tom vědět pomocí formuláře nebo v diskuzi.
Komentářů: 60
*   Podpořte Linuxzone.cz
Chcete podpořit náš server umístěním odkazu nebo zveřejněním backendu? Zde najdete vše potřebné.
*   Pište pro Linuxzone.cz
Máte zájem podílet se na obsahu Linuxzone.cz ať už jako redaktoři nebo i jinak? Dejte nám o sobě vědět!





 Aktuálně z bezpečnosti




-- 
6.12.2005, 19:01
Na serveru informit.com vyšla ukázková kapitola týkající se práce s řetězci z knihy Secure Coding in C and C++. (lz)

-- 
3.12.2005, 12:34
Bugtraq: Format String Vulnerabilities in Perl Programs. (lz)

-- 
3.12.2005, 12:32
Linux Advisory Watch December 2nd 2005. (lz)

-- 
23.10.2005, 13:28
Rozhovor na téma klasické zálohování versus CDP. (lz)

-- 
23.10.2005, 13:24
Linux Advisory Watch October 21st 2005. (lz)

další >>





 Aktuálně o software




-- 
6.12.2005, 19:07
Potřebujete-li pod linuxem rozchodit bezdrát založený na čipsetech Broadcom 43xx, konečně existuje linuxový ovladač. (lz)

-- 
6.12.2005, 19:04
Byla uvolněna verze Xen 3.0.0 virtualizační technologie XEN. (lz)

-- 
6.12.2005, 18:59
Byla uvolněna verze X11R6.9/X11R7 RC 3 grafickérho rozhraní X Window System. (lz)

-- 
3.12.2005, 12:45
Co je nového okolo projektu Amanda (open source zálohovací software)? Více na osnews.com. (lz)

-- 
3.12.2005, 12:40
Jak to akuálně v linuxu vypadá s podporou SATA.. (lz)

další >>





 Aktuálně z IT




-- 
3.12.2005, 12:51
Novellu se daří prodej linuxových produktů, oproti loňskému roku se Novell dočkal výrazného nárůstu. (lz)

-- 
3.12.2005, 12:48
Třetí verzi licence GPL by měla být publikována během jara 2007. (lz)

-- 
23.10.2005, 13:20
V Peru nyní mají zákon, který umožňuje nasazení open source software ve vládní správě. (lz)

-- 
23.10.2005, 13:14
Proč se Microsoft bojí Google? (lz)

-- 
27.9.2005, 22:01
Peru má zákon podporující free software. (lz)

další >>





 Nejčtenější články









 Nejlepší články









 Anketa




Používáte nějaké rozšíření bezpečnostního modelu linuxového jádra?

Openwall (17%)

LIDS (11%)

Pax/Grsecurity (3%)

SELinux (6%)

RSBAC (1%)

jiné (1%)

používám standardní jádro (62%)







Linuxzone.cz - server o Linuxu pro programátory, administrátory a fanoušky.
Provozuje společnost Impossible.
ISSN: 1213-8738





Překládáme jádro

Většina začínajících linuxáků pokládá překlad jádra za jakousi samozřejmou činnost, bez které se pořádný správce neobejde a dělá ji aspoň pětkrát týdně. Málokdo si uvědomí, že vlastní jádro má v běžných situacích tak malý vliv na výkon systému, že kvůli němu rozhodně nestojí za to jádro překládat. Někdy je ale člověk k překladu jádra donucen kvůli svému hardwaru nebo kvůli nějaké ještě experimentální vlastnosti, navíc je to také určitá škola Linuxu a praktická zkouška znalostí o počítači. Nesmí se ovšem nechat odradit množstvím problémů, na které jistě narazí.

Předpoklady

Mezi základní předpoklady patří obecná znalost hardwaru osobních počítačů, tj. např. která komponenta je za co odpovědná, dobrá znalost konfigurace počítače, pro který se jádro překládá, v ideálním případě typové označení hlavních čipů na základní desce a na všech přídavných kartách, znalost principů operačního systému Linux a nainstalovaný software, který je k překladu potřeba. Některé části jsou společné pro překlad každého programu:

  • překladač jazyka C, ve kterém je napsána naprostá většina kódu všech distribuovaných programů
  • program make pro koordinaci závislostí
  • všechny vývojové prostředky, tj. statické knihovny a hlavičkové soubory, které program využívá
  • program patch pro případné záplatování - dodatečné změny ve zdrojových kódech
  • program tar a gzip nebo bzip2 pro rozbalení a dekomprimaci archívu
  • další komponenty, které jsou potřebné pro překlad nebo úvodní konfiguraci podmínek překladu (speciální knihovny, autoconf, xmkmf)

a samozřejmě zdrojové texty toho, co se překládá.

U překladu jádra jde jmenovitě o tyto části - v závorce je jméno balíčku, ve kterém je v balíčkovaných distribucích najdete:

  • zdrojové texty jádra (kernel-source nebo také přímo z distribučních míst, ze zrcadel ftp serveru ftp.kernel.org, viz odkazy na konci článku)
  • překladač gcc (v balíčku gcc, u starších distribucí však podle okolností egcs, gcc3, gcc2.96 nebo ještě navíc k některému z nich kgcc - ajaj, nějak se nám to komplikuje)
  • překladače assembleru: as (balík binutils), as86 (dev86, příp. bin86)
  • program pro koordinaci závislostí: make (make)
  • hlavičkové soubory a knihovny pro jádro a hlavní knihovny potřebné k překladu: glibc-devel, glibc-kernheaders (dříve kernel-headers; samotné glibc musíte mít v systému tak jako tak, takže ty ani neuvádíme)
  • program tar pro rozbalení zdrojových textů (tar)
  • program bzip2 pro dekomprimaci archívu (bzip2)
  • pro terminálovou celoobrazovkovou konfiguraci pomocí menuconfig: ncurses, ncurses-devel
  • pro konfiguraci pomocí xconfig: správně nainstalované a nakonfigurované prostředí X window
  • pro patchování - úpravu standardního jádra nebo nahrazení novou verzí: patch

Nepřítomnost některé komponenty bude důvodem k předčasnému ukončení překladu, toho by ale v balíčkovaných distribucích nemělo být snadné dosáhnout, pokud vám zrovna nechybí úplně všechno ze skupiny Vývojové prostředí. Jenom chybějící ncurses-devel se ohlásí snad ne zcela jasným chybovým hlášením:

make[1]: Entering directory \
`/home/login/linux/linux-2.4.19/scripts/lxdialog'
/usr/bin/ld: cannot find -lncurses
collect2: ld returned 1 exit status

>> Unable to find the Ncurses libraries.
>>
>> You must have Ncurses installed in order
>> to use 'make menuconfig'

make[1]: *** [ncurses] Error 1
make[1]: Leaving directory \
`/home/login/linux/linux-2.4.19/scripts/lxdialog'
make: *** [menuconfig] Error 2

protože samotné ncurses vyžaduje každý terminálový program a jsou tedy prakticky jistě nainstalovány, v tomto případě chybí již zmíněný vývojový balíček ncurses-devel obsahující statickou verzi knihovny ncurses.

Kromě toho je u každé verze jádra nutné splnit jisté minimální požadavky na verzi jednotlivých komponent (u překladače gcc pak může být určena přesná verze, se kterým jde jádro vůbec přeložit!), vše je popsáno v souboru Documentation/Changes v rozbaleném stromu jádra, kde jsou navíc i požadavky na další systémové programy.

Podívejme se teď na postup překladu jádra od samotného začátku. Soustředíme se na zatím poslední verzi produkční řady jádra, 2.4.19 (vydání 2.4.20 se ale již blíží!).

1. fáze - získání zdrojů

Nejprve se přesvědčte, zda jádro již někde na svém disku, na distribučních médiích nebo jinde v okolí nemáte - z předchozích pokusů o překlad, jako součást balíčku kernel-source nebo jen tak přibalené k distribuci: k tomu vám může posloužit příkaz locate nebo find, hledejte řetězec linux-2.4.19.tar. Patříte-li totiž mezi nešťastníky-plátce internetové daně svému telekomunikačnímu operátorovi, budete jinak muset podstoupit anabázi stažení zdrojových kódů, které jsou u aktuálního jádra velké 25 MiB. Pokud najdete aspoň verzi o něco málo menší (linux-2.4.18), můžete si ušetřit hodně z přenosového pásma a přetáhnout pouze mnohem kratší rozdílové soubory (patch-2.4.19.bz2).

Pusťte si ftp klienta a zadejte mu svůj oblíbený server obsahující aspoň částečné zrcadlo ftp.kernel.org, buďto ten, který máte topologicky nejblíž, nebo takový, se kterým dosahujete přijatelné rychlosti stahování. Přepněte se do adresáře, ve kterém jsou zdrojové kódy jádra Linuxu větve 2.4, tj. /pub/linux/kernel/v2.4/. V něm najdete tyto soubory:

  • linux-VERZE.tar.bz2, na některých místech ještě i linux-VERZE.tar.gz
    to jsou komprimované archívy s plnými zdrojovými texty Linuxu pro každou verzi jádra
  • patch-VERZE.bz2, ev. patch-VERZE.gz
    to jsou soubory obsahující pouze změny mezi jednotlivými verzemi jádra, rovněž zkomprimované (i tak jsou pořád dost velké)
  • *.sign
    gpg podpis archívů - důležité obzvláště tehdy, pokud jádro stahujete z místa, ke kterému nemáte stoprocentní důvěru
  • Changelog-VERZE
    textový soubor s popisem změn od předchozí vydané verze jádra
  • LATEST-IS-2.4.19
    název souboru říká vše, soubor sám je prázdný, jeho jméno slouží hlavně k rychlé kontrole, zda nevyšlo nové jádro
  • a některé další soubory vztahující se přímo k jádru

Z adresářů je zajímavý snad jen adresář testing, kde jsou patche pro poslední vývojová, tzv. pre- jádra, ze kterých časem vzejde oficiálně vydané jádro nové verze; ve chvíli, kdy se řetězec pre změní na rc (release candidate), je již vydání nového jádra opravdu blízko.

Použít jako výchozí právě jádro od vašeho distributora se může ukázat jako dobrý nápad, pokud jste příliš závislí na změnách, které v distribučním jádře dělá a na které pak mohou spoléhat další balíky. V jádrech 2.4.18 a vyšších by ale již moc nekompatibilních změn nemělo být.

Kontrola signatury

Před další prací s archívem si ověřte, zda v něm nikdo nepovolaný nedělal dodatečné změny nebo dokonce nepředložil něco úplně jiného. K tomu slouží soubory s příponou .sign, přímo v nich je obsažen odkaz na další informace. K ověření použijeme program gpg. Do něj je nutné nejprve importovat klíč, který používá Linux Kernel Archives, a to jedním z těchto způsobů:

gpg --import soubor-s-uloženým-klíčem
gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E

Po naimportování klíče proveďte samotnou kontrolu správnosti:

gpg --verify linux-2.4.19.tar.gz.sign linux-2.4.19.tar.gz

Pokud bude na výstupu příkazu přítomna věta gpg: Good signature from "Linux Kernel Archives Verification Key <ftpadmin@kernel.org>", proběhla kontrola úspěšně. Navzdory tomu, že takřka jistě máte na obrazovce také varování

gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
gpg: Fingerprint: C75D C40A 11D7 AF88 9981  ED5B C86B A06A 517D 0F0E

- je to důsledek tradičního problému bezpečného přenosu klíče, sami autoři na stránce uvedené v souboru se signaturou tvrdí, že se tím nemáte znepokojovat.

2. fáze - rozbalení zdrojů

(Předem ještě upozornění pro majitele malých nebo věčně nestačících disků: jenom k rozbalení jádra verze 2.4.19 potřebujete 159 MiB místa na disku, pro překlad ještě dalších asi 30, no a pokud si budete chtít pěkně zformátovat dokumentaci, počítejte s dalšími 3 až 6 MiB na každou z verzí. Takže nemáte-li místo této velikosti, na překlad rovnou zapomeňte.)

Soubor se zdrojovými texty jádra je tedy stažený nebo jsme ho štastně našli. Umístíme ho na nějaké srozumitelné místo - může to být /usr/src, pak pozor na symbolický odkaz linux, který již v tomto adresáři obvykle je a ukazuje na linux-VERZE. Může to také být místo v našem domovském adresáři, což je obecně vhodnější a budeme se toho proto v tomto textu držet.

Přepneme se do tohoto adresáře a použijeme příkaz tar s přepínači pro dekomprimaci a rozbalení:

cd ~/linux
tar xjvf linux-2.4.19.tar.bz2

Podle výpisů na obrazovce je vidět, že všechny soubory se zapisují do nově vzniklého adresáře linux-2.4.19. Přepneme se do něj a podle starého linuxového obyčeje se podíváme nejprve do souboru README.

README

Zde se můžete dozvědět něco málo o Linuxu. Hlavní informací v tomto souboru jsou ale odkazy na další dokumentaci: nejvíce jí najdete v adresáři Documentation a jeho dalších podadresářích, Docbook pak dokonce obsahuje dokumentaci i v jiných formátech vhodnějších k prohlížení na obrazovce nebo k tisku (html, pdf, ps). Je k tomu nutné znovu se přepnout do hlavního adresáře s rozbaleným jádrem a v něm zadat příslušný příkaz popsaný v tomto dokumentu, např.

cd ~/linux/linux-2.4.19
make pdfdocs

Poté v adresáři Documentation/Docbook vzniknou příručky v žádaném formátu, v souborech nebo adresářích pojmenovaných podle jména příručky.

V tomto souboru je také stručný návod ke konfiguraci a překladu jádra, ale k podrobnějšímu výkladu jsou lepší zdroje, např. Kernel-HOWTO. Je zde také popsáno, co dělat v případě, že "je něco špatně", například když to jádro vzdá a před posledním vydechnutím ještě vypíše obsah registrů s malou omluvou (oops) - blíže viz Documentation/oops-tracing.txt. To se může stát velmi snadno, jádro sice obvykle je obvykle otestováno, ale některé kombinace hardwaru mohou opravdu dělat potíže takové, že jádro bude považovat za bezpečnější raději neběžet.

Pokud překládáte jádro novější, než jste dosud ve své distribuci měli, nebo jádro z experimentální řady (2.5), musíte překontrolovat své vývojové prostředí. Spusťte skript ver_linux z adresáře scripts, skript předpokládá, že všechny nutné programy máte v cestě:

cd ~/linux/linux-2.4.19
$ sh scripts/ver_linux
If some fields are empty or look unusual you may have an old version.
Compare to the current minimal requirements in Documentation/Changes.

Linux zavazadlo 2.4.18-10 #1 Wed Aug 7 11:17:48 EDT 2002 i686 unknown

Gnu C                  2.96
Gnu make               3.79.1
util-linux             2.11n
mount                  2.11n
modutils               2.4.14
e2fsprogs              1.27
PPP                    2.4.1
Linux C Library        2.2.5
Dynamic linker (ldd)   2.2.5
Procps                 2.0.7
Net-tools              1.60
Console-tools          0.3.3
Sh-utils               2.0.11
Modules Loaded         ide-cd cdrom nfs lockd sunrpc binfmt_misc 
autofs e1000 ipt_REJECT iptable_filter ip_tables mousedev keybdev 
hid input usb-uhci ehci-hcd usbcore ext3 jbd

Minimální požadavky jsou v balíčkovaných distribucích ošetřeny pomocí závislostí mezi balíčky, to ale platí jen pro ty verze jádra, které distribuce přímo nabízí v sekci s aktualizovanými balíčky, jinak si musíte pomoci aktuálními balíčky z vývojové větve distribuce (u Red Hatu se jmenuje rawhide) nebo balíčky tvořenými jinde.

Další důležité informace můžete získat z instalačních médií své distribuce, obvykle shromážděných v souboru RELEASE-NOTES. Nejvíce informací je ovšem v adresáři Documentation, a zdaleka ne všechny najdete ve formátu docbooku, spíše naopak, ale většinou to nevadí. Výjimečně se nějaké užitečné informace najdou také v těsném sousedství ovládačů v podadresářích adresáře drivers.

3. fáze - make mrproper

Toto je vlastně ta nejjednodušší část - vyčistit strom se zdrojovými kódy od nepotřebných nebo přímo škodlivých součástí. Je zde uvedena jako samostatný krok, protože jde zároveň o nejčastěji opomíjenou součást překladu, což vede k sadě nesrozumitelných varování a chybových hlášek a neúspěšnému ukončení celého překladu. Tento krok rozhodně nikdy nevynechávejte, pokud si nejste naprosto jisti, co děláte.

cd ~/linux/linux-2.4.19
make mrproper

Možná vám to zvláštní slovo něco připomíná, pak vězte, že některé produkty známé z reklam jsou na celém světě stejné. Mějte také na paměti, že strom bude vyčištěn opravdu důkladně a obětí čištění se stane například také soubor .config s konfigurací nutnou pro překlad. Pokud jste nějaký takový soubor měli, rozhodně si ho předem zazálohujte na bezpečné místo, tedy mimo strom právě překládaného jádra.

4. fáze - patch

Vždy, když potřebujete udělat drobnější změnu v nastavení parametrů jádra nebo přidat nějakou samostatnou součást, se problém obvykle nejjednodušeji vyřeší formou poloautomatických záplat, patchů. Patch je soubor, kde je stručně, ale jednoznačně a také pro člověka čitelně zapsáno, jak se musí změnit strom původních zdrojových souborů, abychom dostali výsledný. U každé změny je zopakován společný kontext 3 řádků před i za měněným řádkem. Při patchování se mohou také vytvářet nové soubory nebo naopak staré odstraňovat. Patche produkuje program diff se správnými přepínači, které jsou zopakovány u každého měněného souboru.

diff -urN linux-2.4.18/scripts/kernel-doc \
     linux-2.4.19/scripts/kernel-doc
--- linux-2.4.18/scripts/kernel-doc     Fri Oct  5 12:06:51 2001
+++ linux-2.4.19/scripts/kernel-doc     Fri Aug  2 17:39:46 2002
@@ -233,9 +233,17 @@
 # CAVEAT EMPTOR!  Some of the others I localised may not want 
 # to be which could cause "use of undefined value" or other bugs.
 my ($function, %function_table,%parametertypes,$declaration_purpose);
-my ($type,$file,$declaration_name,$return_type);
+my ($type,$declaration_name,$return_type);
 my 
...

Říká se zde, že soubor linux-2.4.19/scripts/kernel-doc se proti minulé verzi změnil v úseku začínajícím na řádku 233, přičemž z původních 9 řádků se stalo 17, některé se změnily a jiné přibyly nově.

Všechny podobné úseky jsou za sebou v jednom souboru. Při patchování se tento soubor dekomprimuje a následně předloží programu patch, buďto jméno souboru jako argument v příkazovém řádku nebo na standardní vstup, tj. patch soubor-s-patchem -p0 nebo bunzip2 soubor.bz2 | patch -p0. Na obrazovce se objeví seznam souborů, které právě prochází procesem patchování. Pokud některé z údajů uvedených v souboru nesouhlasí, například proto, že byl aplikován ještě jiný patch, který změnil číslování řádků, patch se zamítne a záznam se uloží do souboru s příponou .rej (rejected). Dále už pak je na uživateli, zda posoudí změny jako neškodné a provede je sám, nebo je bude považovat za natolik zásadní, že je rovněž zavrhne a raději celou operaci ukončí.

Typické důvody k záplatování jsou přidání ovládače do jádra, povýšení jádra o jednu verzi nebo přechod na některou pre verzi jádra. K usnadnění patchování je v adresáři scripts další skript, patch-kernel, který se však dá beze změn použít pouze k přechodu na vyšší verzi jádra nebo na aplikování zvláštních patchů Alana Coxe (tzv. -ac patche).

5. fáze - konfigurace jádra

Tato část je nejkomplikovanější. Zde již musíte přesně vědět, čeho chcete dosáhnout, protože nápověda u jednotlivých nabídek je sice výstižná, ale pro poučení dost stručná a z pochopitelných důvodů neobsahuje vysvětlení principů, slouží pro orientaci. Ideální je vzít si konfigurační soubor vhodný pro váš počítač a jenom do něj promítnout změny. Kde ho najdete?

Získat z běžícího jádra konfigurační soubor, se kterým bylo jádro přeloženo, je obecně nemožné. Distribuce SuSE používá ve svých jádrech speciální patch, kdy se konfigurace objeví jako položka v adresáři /proc, konkrétně /proc/config.gz. Red Hat má u novějších jader takový soubor v adresáři /boot pod jménem config-VERZE. U starších verzí jader a u jiných distribucí ho najdete jedině v balíčku kernel-source, u Red Hatu pak v adresáři /usr/src/linux-VERZE/configs/, kde si můžete vybrat ze širší nabídky, například pro běžnou stanici s procesorem Athlon by to byl soubor kernel-VERZE-athlon.config. Zkopírujete ho do hlavního adresáře jádra pod jménem .config:

cd ~/linux/linux-2.4.19
cp /usr/src/linux-2.4.18-17.8.0/configs/kernel-2.4.18-athlon.config \
 .config

Tím je předpřipraven konfigurační soubor. Nyní je třeba změnit konfiguraci tak, aby se promítly změny, které máme v úmyslu provést. K tvorbě konfiguračního souboru je k dispozici nástroj se 3 rozhraními: řádkovým, celoobrazovkovým a grafickým.

make config

Tento příkaz vyvolá tradiční konfiguraci pomocí řádkových dotazů a odpovědí. Možné odpovědi jsou naznačeny v hranatých závorkách. y znamená ano, tedy zahrnout podporu přímo do jádra, n ne, m znamená, že podpora bude v samostatném modulu a ? vypíše stručnou nápovědu. Některé z možností mohou chybět, typicky m v případech, kdy danou vlastnost nelze vměstnat do modulu. To písmeno, které je uvedeno verzálkou, je přednastavená odpověď, která se uplatní tehdy, pokud jenom stisknete enter.

make oldconfig

Toto je speciální varianta předchozí řádkové konfigurace, kdy jste dotazováni pouze na věci, které přibyly proti minulému configu. Je velmi rychlá, pohodlná a velmi často používaná - žádné zbytečné otázky, žádné zdržování.

make menuconfig

Přehledná celoobrazovková konfigurace s využitím knihovny ncurses. Veškerá nápověda je na obrazovce. K ovládacím klávesám přibyl mezerník, kterým se cyklicky mění možnosti ano/ne/modul, escape k přechodu o úroveň menu výše, šipky pro posun mezi jednotlivými položkami nebo mezi režimy select/exit/help, plus a mínus pro rolování dolů a nahoru a nevyužitá písmena se dají použít pro rychlý skok na položku, která má toto písmeno, obvykle první, zvýrazněno. Různými závorkami jsou odlišené položky, které lze přeložit jako modul a které lze pouze zahrnout do jádra. Vůbec nevidíte možnosti, které jsou zablokovány jinou volbou, například pokud v části Network device support/Ethernet (10 or 100Mbit) nezvolíte 3COM cards, nedostanete se k výběru podpory jednotlivých typů karet.

make xconfig

Konfigurace v grafickém prostředí X window. Je náročnější na systémové prostředky a tudíž také pomalejší, ale není to nijak dramatické. Pokud se v tom množství položek a podpoložek neztratíte, je celkem přehledná. Možnosti, které nelze uplatnit, jsou jako neaktivní zašeděné, takže v případě popsaném v make menuconfig uvidíte v okně všechny typy karet 3COM, jenom nebudete moci (pochopitelně) žádnou z nich vybrat. Vše se vybírá výhradně pomocí myši, šipkami lze pouze rolovat aktuální okno.

Makefile

Po uložení změněné konfigurace je vám doporučeno zkontrolovat Makefile v hlavním adresáři a pak přejít k dalšímu kroku, k vygenerování závislostí. V souboru Makefile, kterým se řídí program make při překladu, je spousta důležitých informací, proto není dobré do něj moc zasahovat, ale hned na začátku je zajímavá položka, jejíž naplnění stojí přinejmenším za zvážení.

VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 19
EXTRAVERSION =

Jádro můžete kromě verze jeho zdrojových kódů (zde 2.4.19 - tyto údaje rozhodně neměňte) popsat ještě dalším parametrem v proměnné EXTRAVERSION. Často se totiž stává, zejména ve fázi experimentování, že si vytvoříte několik instancí jádra téže verze a tudíž také téhož čísla, každou přeloženou s jinými parametry. Výhodou pak je, že se nepletou moduly, System.map a podobné věci závislé na podmínkách překladu. V případě nejistoty, na kterém jádru právě běžíte, se můžete přesvědčit příkazem uname -a. Do proměnné EXTRAVERSION můžete napsat cokoliv, je dobré, když to bude začínat pomlčkou, a hlavně když to bude srozumitelný, třebaže delší název jako -bezusb (celý název 2.4.19-bezusb) apod. Všimněte si, že distributor tuto položku rovněž využívá - asi ví proč.

Ještě jedna důležitá věc: pokud použijete nějaký moc chytrý editor, přesvědčte se, že tabulátory na začátku některých řádků iniciativně nepředělává na sekvenci mezer, to byste se nestačili divit, protože v souborech Makefile jsou tabulátory součástí syntaxe pravidel.

6. fáze - překlad

Pokud jste neudělali nějakou velkou botu, projde následující sekvence bez problémů:

make dep
make clean
make bzImage
make modules modules_install

To je skutečný překlad, zde počítač pracuje za vás. Vy už do procesu nezasahujete, pouze napjatě čekáte a sledujete mezivýsledky. Nejprve se generuje přehled závislostí jednotlivých komponent, pak se jemně čistí strom od nepotřebných částí, překládá se samotné jádro a moduly a nakonec se moduly kopírují na místo, kde je bude hledat program insmod a vůbec všechny programy, které s moduly pracují.

7. fáze - instalace

Před vstupem do poslední fáze si najděte záchrannou disketu, kterou jste si jistě vytvořili při instalaci distribuce. Pokud ji náhodou nemáte, použijte například program mkbootdisk, kterému jako argument předáte verzi jádra, které chcete uložit na disketu - zde samozřejmě musíte použít nějaké staré, ověřené jádro, ne to právě vytvořené. To není přivolávání problémů, ale koncentrovaná zkušenost.

mkbootdisk 2.4.18-5

Nouzově může posloužit i instalační cédéčko, pokud z něj umíte nabootovat. Nyní je třeba jádro zkopírovat k ostatním jeho kamarádům, obvykle do adresáře /boot, říci o něm zavaděči operačního systému ať už je jím lilo nebo grub, rebootovat počítač a tiše sledovat, co se děje. Nezapomeneme zkopírovat také konfigurační soubor a další soubor jménem System.map.

cp arch/i386/boot/bzImage /boot/bzImage-2.4.19-bezusb
cp .config /boot/config-2.4.19-bezusb
cp System.map /boot/System.map-2.4.19-bezusb

Jaké jsou typické příčiny, kdy jádro nenastartuje:

  • Nedodrželi jste správný "technologický" postup.
  • Nesplnili jste požadavky na minimální verzi programů.
  • Jádro je přeloženo pro jiný (lepší) procesor, než ve skutečnosti máte k dispozici.
  • Máte nešťastnou kombinaci hardwaru, při které konkrétní jádro vůbec nepracuje.
  • Jádro nemůže nastartovat, protože podporu pro disk má uloženu v modulu, který je uložen na tomto disku, pro který chybí podpora...

initrd

Moduly jsou docela sympatická věc a za běhu systému se hojně používají ke spokojenosti uživatelů i jádra samotného, ale některé ovládače potřebujete mít k dispozici již v okamžiku startu jádra. Můžete je přeložit přímo do jádra a problém;m typu slepice-vejce předejít. Někdy se však bez modulů neobejdete, a pak se používá právě úvodní ramdisk (initial ramdisk, proto initrd), do kterého se nahrají potřebné moduly a pokračuje se dále. Obraz tohoto ramdisku se musí vytvořit předem, a to pomocí programu mkinitrd takto:

mkinitrd /boot/initrd-2.4.19-bezusb.img 2.4.19-bezusb

Typickými adepty, kteří na ramdisk patří, jsou ovládače periferií, ze kterých se startuje - disk, SCSI řadič, síťová karta, jsou ale další (ext3, jbd).

Zavaděč lilo

Pokud používáte jako zavaděč lilo, dopište do souboru /etc/lilo.conf tyto řádky:

image=/boot/bzImage-2.4.19-bezusb
        label=2.4.19-bezusb
        #initrd=/boot/initrd-2.4.19-bezusb
        read-only
        root=/dev/hda1

Podobné řádky by v tomto souboru již měly být, stačí tedy řádky zkopírovat a změnit jenom podstatné části týkající se popisu vašeho jádra. Řádek s initrd použijte v případě, že potřebujete úvodní ramdisk. Po provedení změn nezapomeňte spustit program lilo.

Zavaděč grub

Opět dopište do souboru /etc/grub.conf řádky podle vzorů, které v tomto souboru najdete.

title Linux (2.4.19-bezusb)
        root (hd0,1)
        kernel /boot/bzImage-2.4.19-bezusb ro root=LABEL=/
        #initrd /boot/initrd-2.4.19-bezusb

V tomto případě není nutné po každé změně konfiguračního souboru spouštět nějaký program, na druhé straně se případné překlepnutí dozvíte až po restartu.

System.map

Soubor System.map uvádí mapování adres v jádře na symboly. Pro každé jinak přeložené jádro je potřeba zvláštní soubor, po překladu zůstal v hlavním adresáři. Tento soubor používají programy, které využívají informace ze struktury /proc, jako např. ps s přepínačem l - ve sloupci WCHAN vypisuje jméno funkce volání jádra, ve které se program právě nachází. Nejjistější je soubor po překladu jádra zkopírovat do adresáře /boot pod jménem System.map-2.x.y, kde 2.x.y je číslo verze jádra. Více viz ps (1), top (1), klogd (8). Nezkopírujete-li tento soubor, nestane se vůbec nic, jenom se ochudíte o jednu možnost diagnostiky při problémech.

Několik tipů na závěr

Vlastní zkušenosti jsou obvykle nejužitečnější, každou chybu, jejíž náprava vás stála hodiny práce a samostudia (a čekání - jak ten stroj pomalu startuje...), si zapamatujete velmi dobře, někdy by však člověku úplně stačilo poučit se chybami druhých.

  1. Nově vytvořené jádro nesmí zůstat jediné, vždy si nechejte nejméně jedno funkční jádro z dřívějška, o kterém je známo, že funguje a funguje dlouhodobě správně. U balíčků to znamená nové jádro instalovat (rpm -i), nikoli upgradovat (rpm -U), jádra dobře v systému koexistují, protože jsou spolehlivě rozlišitelná (již víme, k čemu je EXTRAVERSION).
  2. Argumentů pro program make můžete zadat více, ale rozhodně ne všechny zároveň, při podstatných změnách v konfiguraci by se totiž překládalo podle podmínek konfigurace staré. Přece jenom bude lepší zadávat příkazy po jednom. On by se téměř celý postup dal zjednodušit do jednoho příkazu: make install, ale jednak ztratíte přehled, co se kdy vlastně dělá, jednak se mohou stát i věci, které jste v úmyslu neměli.
  3. Máte víc procesorů? Zapojte je do práce, lenochy! Použijte přepínač -j, kterým se zvyšuje počet samostatně spouštěných procesů při překladu, na dvouprocesorovém stroji tedy použijete make -j2 bzImage. Nemáte-li víc procesorů, můžete tento příkaz použít jenom k malému otestování hardwaru. Podstatné je, že jádro můžete překládat jinde, než na tom stroji, kde nakonec poběží, tedy např. na silném stroji v práci a ne na domácí šunce, jenom na to nesmíte zapomenout při konfiguraci.
  4. Překlad může skončit s hlášením o signálu 11. To prakticky vždy znamená hardwarové potíže - přetaktovaný procesor, vadné paměti.
  5. Všechny kroky kromě instalace můžete dělat jako běžný uživatel. A je to tak také lepší. Do superuživatelského režimu se přepněte až na make modules_install a kopírování do adresáře /boot.

Jedním z nejrozšířenějších mýtů o Linuxu je, že dvakrát týdně vychází nové jádro. To už dávno není pravda, jádra ze stabilní řady dokonce vychází jen několikrát do roka (letos zatím vyšla 2). Dávno už také není každý majitel linuxového počítače odkázán na vlastní překlad jádra, protože ta jádra, která jsou v každé moderní distribuci, vyhovují takřka za všech běžných situací a modulárnost všech ovládačů zajišťuje jejich rozumnou velikost.

Přesto mohou mít uživatelé (tedy spíše linuxoví správci) různě dobré důvody k tomu, proč si přeložit jádro přesně podle svých potřeb. Můžete mít hodně nový, exkluzívní nebo jinak podivný hardware. Můžete mít opravdu hodně málo paměti, kde se každý nepoužitý bajt hodí. Můžete se chtít něco naučit o vývoji programů (pak je ale o dost lepší nápad začít něčím jednodušším) nebo přímo o jádře. Pokud ale chcete jenom získat výkon, těžko splní samotný překlad vaše očekávání. Překlad jádra není zase tak velký problém, jak jsme viděli, každý používaný počítač však potřebuje trvalou správu a u všech vlastnoručně dělaných věcí je největším problémem právě dlouhodobá udržitelnost a včasné aktualizování při nalezených problémech. Proto jsou balíčky z vaší distribuce obvykle lepší, a to platí i o jádře. Je ale na vás, jak se k tomu postavíte.

Odkazy

Autor: Zdeněk Pytela, 04. 11. 2002, 00:00
Sekce Začínáme, Komentářů: 14
Průměrné hodnocení: 0,19

o Poslat e-mailem
o Tisk článku
o Uložit do profilu


 Přispějte nám




Líbil se Vám tento článek? Můžete ho ocenit zavoláním na tel. číslo 906 460 134.
Cena hovoru za 1 minutu je 46 Kč.





 Hodnocení článku




Článek hodnotím jako:  [1] výborný   [2] dobrý   [3] průměr   [4] špatný   [5] hrůza  





 Komentáře




--

Zdenek Pytela, 18. 02. 2004 08:05
Re: mkinitrd nefunguje












--

Ctibor, 15. 02. 2004 23:23
mkinitrd nefunguje












--

Peter, 25. 10. 2003 00:47
Problem so startom systemu












--

TNX, 31. 01. 2003 01:00
A co binarni ovladace do kernelu?












--

Martin Pozor, 12. 01. 2003 18:25
A co ak nemam ani GRUB ani LILO












--

martin, 08. 01. 2003 14:24
rada












--

Jiri Horak, 08. 11. 2002 19:12
Grub loader&novy kernel












--

Zdenek Kaminski, 04. 11. 2002 18:12
RE: Make clean












--

Zdeněk Pytela, 04. 11. 2002 17:14
Re: Make clean












--

Zdenek Kaminski, 04. 11. 2002 14:12
Re: Make clean












--

Zdeněk Pytela, 04. 11. 2002 11:09
make clean












--

Zdenek Kaminski, 04. 11. 2002 10:10
Povzdech nad "make clean"












--

Rudolf Wolf, 04. 11. 2002 09:11
Překlad na jiném stroji












--

Stefan, 04. 11. 2002 08:18
make xconfig jenom myší ??















PŘIDAT KOMENTÁŘ ZOBRAZ VŠE >>










2002 © Impossible, s.r.o.   >> Kontaktujte redakci >> Právní upozornění >> Reklama