kernel 2.4.20

Tech tech na spinea.sk
Středa Prosinec 11 11:33:59 CET 2002


Prave som sa vratil z Linuxu spat do mojho Mrkvosoftu a pozeram ze diskusia
sa pekne rozbehla.
Jadro som skompiloval podla Vasich rad a vsetko je ok.Chyba bol naozaj v tom
ze treba
spustit LILO.Nestaci len prepisat stare jadro aj ked je v LILO odkaz.
Uz som zapol aj sietovku(RealTek).Staci naozaj len pozorne citat help.
Ale kazdy raz zacinal a nikomu(cest vynimkam) sa asi nepodarilo spravne na
prvy raz
skompilovat jadro tak aby pri bootovani nezahlasilo ze nieco chyba.
Ja som postupoval podla navodu, ktory uvadzam dolu nizsie.
L.
P.S.: Ak niekomu vadi, ze sa pytam na taku primitivnu vec ako je kompilacia
jadra,tak
potom neviem na co sluzi tento mailing list.Zeby iba pre jedi a guru?

> Zdravim.
> Mam nainstalovany mandrake s jadrom 2.4.19
> Vcera som prvykrat v zivote kompiloval nove jadro 2.4.20.
>  Jadro som skompiloval uspesne a system s nim nabootoval, ale bez podpory
> qos a smb sluzieb a ani eth0 mi nejde.
> Tak som isiel znovu ku zdrojakom a zapol podporu tych sluzieb(okrem
> sietovky tu som tam nenasiel)
> potom som to ulozil urobil: make dep make clean make bzImage vsetko
> prebehlo uspesne.Novy bzImage som prekopiroval do /boot a prepisal som nim
> ten stary na ktory bol odkaz v lilo.
> Potom som restartoval system.System  nabootoval ale zase bez podpory tych
> sluzieb ktore som zapol v kerneli.Neviete kde robim chybu?
> Lubos.
..................................................
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 na 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.

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).
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.
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.
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.
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
http://www.kernel.org/ - server s mnoha informacemi o jádře a dalších
důležitých věcech
Co si počít s OpenPGP signaturou souborů
Zdrojové texty jádra
ftp.kernel.org
zrcadlo na muni v Brně
zrcadlo na cuni v Praze
Kernel-HOWTO
Článek o internetových informačních zdrojích o Linuxu
lkml - Linux kernel mailing list. Pouze pro vývojáře a velmi zvědavé.
Jaderný navigátor
Linux Headquarters - maximum informací o jádře
Signál 11 při překladu
memtest86 - program pro komplexní test paměti
cpuburn - program pro zátěžový test procesoru a chipsetu
Zdroj: Linuxzone.cz
Autor: Zdeněk Pytela, 04. 11. 2002, 00:00
Sekce: Začínáme, Komentářů: 7
Průměrné hodnocení: 1





Další informace o konferenci Linux