System.map
Zdrojový text aktuálního linuxového jádra najdeme na adrese http://www.kernel.org/,
nachází se zde také archív starších verzí nebo můžeme použít některé z bližších zrcadel (ftp://ftp.linux.cz/pub/linux/kernel/).
Toto jádro se nazývá vanilla a jde o oficiální verzi.
Každá distribuce má pak svoje jádro, které obsahuje spoustu dodatečných patchů.
Pokud chceme kompilovat ze zdrojových kódů své distribuce,
tak například v Gentoo Linuxu lez získat zdrojový kód jádra řady 2.6 příkazem emerge gentoo-dev-sources
.
V tomto případě se nám soubory se zdrojovým kódem nainstalují do příslušných adresářů,
pokud použijeme vanilla kernel, musíme tyto soubory rozbalit do adresáře /usr/src/linux/
.
Poslední aktuální jádro je 2.6.8.1. 2 značí hlavní verzi jádra a mění se jen při velkých změnách, další číslo značí stabilní (sudé) nebo vývojovou (liché) verzi. Další čísla označují jen menší updaty a patche. Ke každému jádru je připojen také ChangeLog obsahující seznam změn oproti předchozí verzi. Dále je připojen patch, který nám ze zdrojových textů předcházející verze vyrobí verzi aktuální.
Konfigurací jádra rozumíme vybrání si vlastností, které chceme, aby jádro obsahovalo. Je dobré si zjistit, na jakém hardwaru jádro poběží a nezahrnovat zbytečně podporu pro hardware, který v počítači nemáme. U některých vlastností je možná volba zkompilovat jako modul, což sníží paměťové nároky jádra.
Můžeme si vybrat následujících způsobů konfigurace (ve všech případech modifikujeme soubor .config):
make config
Postupně se vypisují otázky, na které se odpovídá zahrnout vlastnost (Y), nezahrnout (n), případně zkompilovat jako modul.
make menuconfig
make xconfig
Konfigurace v grafickém režimu za použití knihovny Qt.
make gconfig
Konfigurace v grafickém režimu za použití knihovny GTK.
make oldconfig
Zobrazují se volby, které nejsou v souboru .config zodpovězeny.
I když v počítači není žádné hotplug zařízení, je nutné v kernelu (2.6) podporu pro hotplug zapnout, protože všechna zařízení zavádějí moduly právě přes hotplug request.
Moduly jádra jsou něco jako ovladače zařízení,
mohou být zaváděny a uvolňovány za běhu systému, což také usnadňuje aktualizaci ovladačů.
Moduly jsou uloženy v adresáři /lib/modules/verze-jadra/
a mohou být zaváděny v průběhu bootování prostřednictvím souboru rc.modules
.
Aktivní moduly lze vypsat příkazem lsmod(1)
.
K zavedení modulu se používá příkaz insmod(1)
nebo modprobe(1)
, který řeší i závislosti mezi moduly.
K odstranění modulu slouží příkaz rmmod(1)
.
O zavádění a odstraňování modulů není většinou potřeba se starat.
Slouží k tomu auto-zavaděč pro správu modulů jádra /sbin/kerneld(8)
.
Převezme péči o zavádění a vyjímání modulů tak, jak se objevují požadavky na ně.
System.map
Vlastní kompilaci jádra spustíme příkazem make
.
Vytvoří se image jádra v příslušném adresáři (arch/i386/boot/bzImage
) a soubor System.map.
Pomocí příkazu make modules_install
se nainstalují moduly do adresáře /lib/modules/verze-jadra/
.
Zkopírujeme image jádra a soubor Systém.map do adresáře /boot
a příslušně upravíme zavaděč systému.
System.map
je v podstatě tabulka symbolu pro toto jádro. Může vypadat nepřiklad takto:
... c0493d20 t alsa_sound_exit c0493ec0 T snd_minor_info_oss_done c0493e00 T snd_info_done c0493e70 t snd_info_version_done c0493fc0 t alsa_pcm_exit ...
Před zavedením jádra je mu možné předat parametry a ovlivnit tak jeho chování.
Parametry se oddělují bílými znaky a předávají se ve tvaru name[=value_1][,value_2]...[,value_n]
.
Výčet některých parametrů:
init=...
Určuje, jaký příkaz bude proveden jádrem jako první. Pokud není uvedeno, zkouší se postupně /etc/init
, /bin/init
, /sbin/init
, /bin/sh
root=...
Určuje zařízení, které bude použito jako kořenový filesystem.
ro
Říká jádru, že má kořenový filesystem připojit jen pro čtení, což umožní třeba použití nástrojů na kontrolu konzistence svazku.