Kernel - kompilace vanilla

Zechmeister Jiří (st19071@student.upce.cz)

1. Obsah

2. Vanilla Kernel

Vanilkové jádro je základní jádro linuxu. Aktuálně se nachází ve verzi 2.6. Na toho základní jádro existuje mnoho patchů, které přidávají nové funkcionality, opravují chyby nebo zvyšují stabilitu.

URL:http://wiki.ubuntu.cz/Kompilace kernelu#N.2BARs-co_m.2BAOE-lo_o_kernelu

URL:http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#SECTION-INTRO

3. Důvody kompilace

3.1. Proč kompilovat

Stávající verze jádra nepodporuje některé zařízení, které se nachází ve vašem pc.

Stávající jádro distribuce je příliš obecné. To znamená, že obsahuje velké množství ovladačů, které ani nevyužijete a proto je jádro moc velké.

Stávající jádro neobsahuje důležitou funkcionalitu, kterou potřebujete.

3.2. Proč nekompilovat

Stávající jádro obsahuje záplaty, o které přijede kompilací nového jádra

Systém perfektně běží a není nutné do něho zasahovat

Délka trvání kompilace na pomalejších strojích může trvat i hodiny

URL:http://wiki.ubuntu.cz/Kompilace kernelu#Pro.2BAQ0_kompilovat.3F

URL:http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#WHY-REBUILD

4. Získání jádra

Ke kompilaci je nutné získat zdrojové kódu jádra. Buď můžeme použít jádro přibalené k distribuci, které je již může být vybaveno sadou záplat, nebo můžeme použít čisté jádro.

Zdrojové kódy čistého jádra je možné získat na adrese http://www.kernel.org, nebo z některého z mirrorů. Mirrory jsou k dispozici na adrese http://kernel.org/mirrors/. Mirror pro Českou Republiku nalezneme na adrese http://www.cz.kernel.org.

URL:http://wiki.ubuntu.cz/Kompilace kernelu#Vanilla_kernel

4.1. Aktuální verze

Aktuální stabilní verze jádra ke dni 10.4.2009 je 2.6.29.1 2009-04-02 20:57 UTC

4.2. Číslování verzí

Význam jednotlivých čísel v označení verzí jádra.

První a druhá číslice

Dříve, pokud byla druhá číslice sudá, znamenalo to stabilní řadu.V případě lichého se jednalo o vývojovou řadu.

Nyní se od tohoto způsobu číslování ustoupilo a pokračuje se dále v řadě.

Třetí a čtvrtá číslice

Třetí číslice se mění pouze v případě, že do jádra byla přidána podpora nového zařízení nebo pokud byla přidána nová větší funkce jádra.

Čtvrtá číslice se mění v případě jednodušších úprav.

URL:http://wiki.ubuntu.cz/Kompilace%20kernelu#N.2BARs-co_m.2BAOE-lo_o_kernelu

5. Příprava kompilace

5.1. Zjištění minimální HW a SW nároků

HW nároky většiny distribucí se pohybují okolo 128MB RAM, 2GB místa na pevném disku a 200MHz Pentium nebo Pentium kompatibilní procesor.

I když velikost zdrojových kódů se pohybuje od 40 do 80MB, na samotnou kompilaci je nutné vyhradit až 400MB místa na pevném disku.

Kompilaci jádra je možné provést na silnějším stroji a instalovat na slabší.

Minimální SW a HW nároky se můžeme dozvědět ze souboru ./Documentation/Changes a souboru README v adresáři se zdrojovými kódy.

URL:http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#HARDWARE-REQUIREMENTS

URL:http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#SOFTWARE-REQUIREMENTS

5.1.1 Zjištění aktuálního hardwarového nastavení počítače

Před samotnou instalací si musíme ujasnit, pro který hardware bude jádro obsahovat ovladače.

$ /sbin/lspci

Utilita, která nám zobrazí informaci o HW

$ cat /proc/cpuinfo

Dále je také nutné znát přesně typ procesoru

5.2. Nástroje ke kompilaci (Ubuntu)

$ sudo apt-get install build-essential bin86 kernel-package gcc gcc-3.4 libncurses5 libncurses5-dev fakeroot

Nástroje pro samotnou kompilaci

$ sudo apt-get install libqt3-headers libqt3-mt-dev

Nástroj pro grafickou konfiguraci jádra xconfig (vhodné pro prostředí kde)

$ sudo apt-get install libglade2-dev

Nástroj pro grafickou konfiguraci jádra gconfig (vhodné pro prostředí gnome)

5.3. Rozbalení zdrojů

Vytvoříme si adresář pro zdroje

$ mkdir src

$ cd src

Pokud máme archiv ve formátu BZIP

$ sudo tar xfvj /path/to/linux-2.6.X.Y.tar.bz2

Pokud máme archiv ve formátu GZIP

$ sudo tar xfvz /path/to/linux-2.6.X.Y.tar.gz

5.4. Aplikace patchů

Stažené zdrojové kódy čistého jádra můžou být upraveny dle vlastních potřeb uživatele. Nejlepším způsobem jak toho dosáhnout, je aplikace patchů.

URL:http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#EXTRACT-PATCH

URL:http://wiki.ubuntu.cz/Kompilace kernelu#Aplikace_patch.2BAW8-

5.5. Konfigurace jádra

Konfiguraci můžeme provádět v různých režimech:

$ sudo make config

nejjednodušší - pouze textový režim

make_config.jpg
Obrázek 1.: Textové rozhraní konfigurace kernelu config, Autor: Zechmeister Jiří

$ sudo make menuconfig

pseudografika

make_menuconfig.jpg
Obrázek 2.: Zjednodušené grafické pseudorozhraní konfigurace kernelu menuconfig, Autor: Zechmeister Jiří

$ sudo make xconfig

Grafické prostředí vhodné pro KDE

$ sudo make gconfig

Grafické prostředí vhodné pro Gnome

make_gconfig.jpg
Obrázek 3.: Grafické rozhraní konfigurace kernelu GConfig, Autor: Zechmeister Jiří

$ sudo make oldconfig

Konfigurace dle staršího konfiguračního souboru .config

URL:http://wiki.ubuntu.cz/Kompilace kernelu#Konfigurace_j.2BAOE-dra

URL:http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#CONFIGURATION-2-6

6. Kompilace

6.1. Kernel 2.6.X a vyšší

$ sudo make clean

Uklidí po předchozích kompilacích

$ sudo make mrproper

Pečlivější úklid po předchozích kompilacích. Smaže vše tak, aby v adresáři zůstaly pouze soubory obsažené v původní distribuci zdrojových kódů. Z tohoto důvodu se doporučuje provádět ještě před konfigurací.

Pro přehlednost je doporučena editace souboru Makefile kde ihned na začátku nalezneme:

VERSION = 2

PATCHLEVEL = X

SUBLEVEL = Y

EXTRAVERSION =

Tady doplníme položku EXTRAVERSION podle aktuální verze jádra.

$ sudo make

Provede kompilaci kernelu a modulů

6.2. Kernel 2.4.X a nižší

$ sudo make clean

Uklidí po předchozích kompilacích

$ sudo make mrproper

Pečlivější úklid po předchozích kompilacích. Smaže vše tak, aby v adresáři zůstaly pouze soubory obsažené v původní distribuci zdrojových kódů. Z tohoto důvodu se doporučuje provádět ještě před konfigurací.

Pro přehlednost je doporučena editace souboru Makefile, kde hned na začátku nalezneme:

VERSION = 2

PATCHLEVEL = X

SUBLEVEL = Y

EXTRAVERSION =

Tady doplníme položku EXTRAVERSION podle aktuální verze jádra.

$ sudo make dep

Kontrola závislostí

$ sudo make bzImage

Kompilace kernelu

$ sudo make modules

Kompilace modulů

URL:http://wiki.ubuntu.cz/Kompilace kernelu#Kompilace_ala_Debian_.28Ubuntu.29

URL:http://wiki.ubuntu.cz/Kompilace kernelu#Kompilace_ala_Linux

6.3. Initial RamDisk

Dočasný souborový systém.

Zavádí se před samotným jádrem,. Obsahuje ovladače a moduly, které chce mít funkční ještě před spuštěním samotného jádra.

Například ovladač hlavního filesystému, kompilovaného jako modul.

Některé systémy nemusí být plně funkční bez initrd.

Ramdisk originálního jádra se nachází v /boot/initrd.img-2.X.Y-Z-architektura

URL:http://en.wikipedia.org/wiki/Initrd

7. Instalace jádra

7.1. Kernel 2.6.X a vyšší

$ sudo make modules_install

Provede instalaci modulů do adresáře /lib/modules

$ sudo mkinitramfs -o /boot/initrd-2.6.X.Y.EXTRAVERSION 2.6.X.Y.EXTRAVERSION

Vytvoří intrd na systémech kde není k dispozici příkaz mkinitrd

$ sudo mkinitrd /boot/initrd-2.6.X.Y.EXTRAVERSION 2.6.X.Y.EXTRAVERSION

Vytvoří intrd na systémech kde není k dispozici příkaz mkinitrd

$ sudo make install

Provedením tohoto příkazu dojde k instalaci jádra do adresáře /boot/ včetně vytvoření souborů Modules.dep a System.map a zavedení do zavaděče.

7.2. Kernel 2.4.X a nižší

URL:http://wiki.ubuntu.cz/Kompilace kernelu#Instalace_j.2BAOE-dra

URL:http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#MAKE-DEP-CLEAN

Instalace závislostí

URL:http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#INSTALLATION

Kopírování jádra a vytvoření System.map

URL:http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#GRUB-CONFIGURATION

Konfigurace zavaděce GrUB

URL:http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html#LILO-CONFIGURATION

Konfigurace zavaděce LiLO

7.3. System.map

Jedná se o soubor, které je umístěný v adresáři /boot/. Tento soubor definuje vztah symbolických identifikátorů a jejich adres v paměti.

Jelikož se při každé kompilaci kernelu může změnit adresa identifikátorů v paměti, je soubor generován po každé kompilaci.

Samotný System.map je pouze odkazem, který odkazuje na soubor aktuální verze jádra, například System.map-2.6.29.1

URL:http://en.wikipedia.org/wiki/System.map

7.4 Modules.dep

Soubor se seznamem závislostí jednotlivých modulů. Soubor je uložen v adresáři /lib/modules/verze/ a obsahuje závislosti modulů ze stejného adresáře.

8. Použité zdroje

Ubuntu. Kompilace kernelu[online]. 20 Březen 2009 [cit. 2009-04-10]. Dostupný z: http://wiki.ubuntu.cz/Kompilace%20kernelu

DigitalHermit. Kernel Rebuild Guide[online]. 15 December 2003 [cit. 2009-04-10]. Dostupný z: http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html

Kernel.org. The Linux Kernel Archives OpenPGP Signature [online]. 10 October 2000 [cit. 2009-04-10]. Dostupný z: http://www.kernel.org/signature.html

Kernel.org. The Linux Kernel Archives[online]. 31 December 2008 [cit. 2009-04-10]. Dostupný z: http://www.kernel.org/signature.html

Wikipedia. System.map[online]. 6 August 2008 [cit. 2009-04-10]. Dostupný z: http://en.wikipedia.org/wiki/System.map

Wikipedia. Initrd[online]. 6 March 2009 [cit. 2009-04-10]. Dostupný z: http://en.wikipedia.org/wiki/Initrd

Andrews, Jeremy. Návod k ugradu na kernel 2.6[online]. 15 Září 2003 [cit. 2009-04-10]. Dostupný z: http://www.abclinuxu.cz/clanky/navody/navod-k-upgradu-na-kernel-2.6

Russell, Rusty. Modules.dep - List of module dependencies[online]. 2002 [cit. 2009-04-10]. Dpstupný z: http://linux.die.net/man/5/modules.dep

Valid HTML 4.01 Transitional

Valid CSS!