Vytvoření vlastního jádra

Michal Prokes, xprokes3@fi.muni.cz


Objem


Duvod

Ke kompilaci jadra ze zdrojovych textu je hned nekolik duvodu:
Pridani ovladacu pro zarizeni, ktera nejsou ve standardnim jadre podporovana. Muzeme provest upravy k zajisteni pozadovane bezpecnosti systemu, ci pridat nove vlastnosti a vylepseni. V neposledni rade pak mame moznost z jadra odstranit nepotrebne ovladace, podporu slabsich procesoru a jine casti jadra, ktere nebudeme na danem stroji vyuzivat a ziskat tak mensi a vykonnejsi jadro.

Zdrojove texty

Nez zacneme kompilovat, potrebujeme samozrejme zdrojove texty. Zdrojove texty obsazene v distribucich Linuxu jsou upraveny, vetsinou znacne. Obsahuji mnoha vylepseni a zejmena velke mnozstvi ovladacu a prizpusobena potrebam dane distribuce. Vyvojari na nich stravili mnoho casu a odvedli poradny kus prace. Dalsi moznosti jsou zdrojaky tzv. Vanilla kernelu, tedy puvodniho cisteho jadra od vyvojaru kernelu, dostupne na www.kernel.org.

Jake texty tedy pouzit? Je dost obtizne dat nejakou obecnou radu. V pripade nestandardniho hardwaru je casto vhodnejsi distribucni jadro, ktere ho jiz implementuje. Pro aplikaci tzv. patchu, musime vyuzit Vanilla kernel, ci dany patch upravit. Zasahy do jadra distribucnimi vyvojari totiz vetsinou znemozni aplikaci patchu, ktere jsou psane pro Vanilla kernel. Dulezite take je, kteremu tymu vice duverujeme.


Vanilla kernel:
http://www.kernel.org
Distribucni jadra: z instalacnich zdroju dane distribuce

Cislovani

Format X.Y.Z.
X - hlavni verze, mezi jednotlivymi verzemi nemusi byt uplna kompatibilita
Y - podverze, sude jsou stabilni rady, liche vyvojove
Z - vydani (release)
Obcas se vyskytne X.Y.Z - A, A je bugfix, pripadne u distribucnich jader muze byt rozliseni nejake vlastnosti

V soucasnosti je aktualni stabilni 2.4.20 a vyvojove 2.5.63

Priprava

Stazene zdrojaky rozbalime do /usr/src/linux-verze. Je vhodne vytvorit symlink na tento adresar do /usr/src/linux.
tar xvjf linux-2.4.20.tar.bz2
ln -s linux-2.4.20 linux
Dale aplikujeme patche (ovladace, jina vylepseni).
patch -p0 < patch.diff


Konfigurace

Konfigurovat jadro muzeme nekolika zpusoby:
U nekterych polozek mame na vyber krome standardnich ano|ne take M - modul. Takto oznacene polozky se nezkompiluji primo do jadra, ale jako samostatne moduly, ktere lze zavadet dynamicky az jsou potreba na na ukor pameti a rezie pri zavadeni modulu.
Krom nespornych vyhod maji moduly i nevyhody. Zejmena potencialni nebezpeci zpusobene zavedenim binarniho modulu s kernelovskymi pravy. Na specializovanych servrech je tedy vhodne zvazit, zda neni vhodnejsi podporu modulu vubec nepovolovat.

Kompilace

Samotna kompilace je jiz velice jednoducha:

make dep - kontrola zavislosti konfigurace
make bzImage - vytvoreni obrazu jadra. Drive bylo "make zImage", bzImage = big zImage
make modules - prelozeni modulu
make modules_install - instalace modulu

Po kompilace je v adresari /usr/src/linux/arch/$ARCH/boot/bzImage, na PC $ARCH = "i386" Moduly se nahraji do /lib/modules/x.y.z-a , kde x.y.z-a je verze jadra Na zaver je potreba prehrat bzImage do boot oblasti a nakonfigurovat zavadec (lilo/grub), aby system bootoval is timto jadrem. Vzdy je dobre mit moznost nabootovat ze stareho, jeden nikdy nevi...

Shrnuti

cd /usr/src
wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2
tar xvjf linux-2.4.20.tar.bz2
ln -s linux-2.4.20 linux
cd linux
make (config|menuconfig|oldconfig|xconfig)
make dep 
make bzImage
make modules
make modules_install
uprava lilo/grub