Konfigurace jádra

Pavel Kůžel, xkuzel@fi.muni.cz


Obsah


Zdroj

Primární server, odkud je možné jádro získat je ftp://ftp.kernel.org. Jádro se nachází v adresáři /pub/linux/kernel a dále podle verze od adresáře v1.0 až po v2.5. Pro nás bude asi nejrychlejší stáhnout jádro z fakultního ftp ftp://ftp.fi.muni.cz, kde je jádro uloženo v adresáři /pub/linux/kernel/. V adresáři s jádrem se vždy vyskytuje soubor LATEST-IS-x.x.xx, kde "x" v názvu udává číslo poslední verze jádra. Dokumentaci k jádru najdete v /usr/src/linux/Documentation/. Informace ohledně aplikací potřebných ke kompilaci jádra najdete v /usr/src/linux/Documentation/Changes.
Jádro si musíme stáhnout na náš počítac. Vhodný postup je následující:

cd /usr/src
ftp ftp.kernel.org
anonymous
Login@Pocitac.Domena.cz
cd /pub/linux/kernel/v2.5
binary
get linux-2.5.5.tar.gz
bye

Potom jádro rozbalíme

tar xvzf linux-2.5.5.tar.gz
Ještě před spuštěním kompilace zkontrolujeme, jestli jsou správně nastaveny symbolické odkazy v adresáři /usr/include:
ls -la asm linux net scsi
mělo by se zobrazit toto:
lrwxrwxrwx  1 root   root      26 Mar  5 01:51 asm -> /usr/src/linux/include/asm
lrwxrwxrwx  1 root   root      28 Mar  5 01:51 linux -> /usr/src/linux/include/linux
lrwxrwxrwx  1 root   root      26 Mar  5 01:44 net -> /usr/src/linux/include/net
lrwxrwxrwx  1 root   root      27 Mar  5 01:51 scsi -> /usr/src/linux/include/scsi
Pokud tyto odkazy neexistují, je potřeba odkazy v adresáři /usr/include vytvořit. Předtím je nutné stávající adresáře smazat(nebo lépe přejmenovat):
cd /usr/include
rm -rf asm linux net scsi
ln -s /usr/src/linux/include/asm asm
ln -s /usr/src/linux/include/linux linux
ln -s /usr/src/linux/include/net net
ln -s /usr/src/linux/include/scsi scsi
Dále se přesvědčíme, jestli v adresáři /usr/src existuje odkaz "linux" na adresář se zdrojovým kódem poslední verze jádra.
ls -la /usr/src
Měli bychom dostat přibližně takovýto výstup:
lrwxrwxrwx  1 root   root       12 Dec 14 13:14 linux -> linux-x.x.xx
Pokud takovýto odkaz neexistuje vytvoříme ho:
cd /usr/src
ln -s /usr/src/linux-x.x.xx linux
Poslední věcí před samotnou konfigurací je záloha starého jádra. Pro jistotu je lepší si staré(funkční) jádro nechat v záloze. Pro tento případ si můžeme vyeditovat /etc/lilo.conf a přidat si tam možnost bootovaní také starého jádra. Úprava lilo.conf viz. níže.
mv /boot/vmlinuz-x.x.x /boot/vmlinuz.old
Pokud chcete kompilovat jádro stejné verze jakou zrovna používáte, pak nezapomeňte přejmenovat adresář, kde jsou uloženy přeložené moduly. Ten se nachází v /lib/modules/číslo_verze_jádra.
mv /lib/modules/číslo_verze_jádra /lib/modules/číslo_verze_jádra.old

Číslování verzí

Číslo verze jádra se skládá ze tří čísel oddělených tečkami. První (major) číslo označuje hlavní verzi, tedy takovou, která je významnou změnou proti předchozím verzím. Druhé číslo kromě pořadí verze také prozrazuje, o jaké jádro jde. Sudá čísla jsou vyhrazena tzv. stabilním verzím a lichá označují vývojářská jádra.Výhodou vývojových verzí je obvykle podpora speciálního hardware, ale nejsou tolik vyzkoušené, a proto se nehodí pro kritické aplikace. V současné době jsou nejnovější stabilní jádra 2.4 a na jádrech 2.5 probíhá vývoj.

Způsoby konfigurace

Jádro máme tedy stažené a rozbalené v
/usr/src/linux-2.5.5/
Jádro můžeme konfigurovat 3 způsoby:
  • make xconfig - spustí konfiguraci v prostředí X Window
  • make menuconfig - spustí konfiguraci v textovém režimu v jakémsi "ASCII menu"
  • make config - spustí sérii otázek.
pozn.: třetí jmenovaná možnost má sice nevýhodu, že není možné se vracet k již zodpovezeným otázkám, ale měla by oproti ostatním způsobům fungovat vždy.

Pokud zvolíte jednu z prvních dvou možností, je způsob konfigurace intuitivní přes menu(textové či grafické). Při všech třech možnostech je zde možnost nápovědy. Při způsobu konfigurace otázkami můžete na kladené otázky odpovědět y, n a m. Význam prvních dvou je zřejmý, m znamená module.

Význam důležitých konfiguračních voleb

Předem chci uvést, že podrobný popis všech konfiguračních možností je možné nalézt v souboru Kernel-HOWTO. Konfigurace jádra umožňuje hromadu zajímavých nastavení, ať se to týká podpory všemožného hardwaru nebo ladění výkonu vašeho systému na maximum. Z těch důležitých jmenujme alespoň:

Loadable module support. Nastavení podpory modulů (modulární jádro), viz. níže.

Kernel math emulation. Emulace matematického koprocesoru (ano i majitelé letitých 386SX si mohou nainstalovat linux).

Kernel support. Podporovány mohou být dva formáty spustitelných souboru, a.out a ELF. Je možné používat obojí.

Processor type. Volba typu procesoru a věcí týkajících se procesoru(SMP, math emulation...).

Networking Options. Nastavení sítových protokolů a jejich vlastností.

SCSI Support. Podpora SCSI zařízení. Takzvané high level ovladače slouží k řízení jednotlivých tríd zarízení (disk, páska, CD-ROM). Potom je třeba zvolit low level ovladač pro váš konkrétní SCSI řadic. SCSI support je důležitý, i když nemáte žádné SCSI zařítení např. pro CD-R mechaniku EIDE.

Filesystems. Nastavení podporovaných souborových systémů. Z nejznámějších:

  • e2fs. Standardním linuxovým systémem souboru je second extended fs.
  • ext3,ReiserFS. Linux podporuje také journalovací souborové systémy.
  • FAT,VFAT. Umožňuje přimountování dosové/windowsové partition.
  • NFS. Podpora NFS a SMB (MS WINDOWS).
Sound. Volba zvukové karty.

Principy fungování modulů

Jednou z možností, jak zkompilovat, jádro je s podporou modulů. Modulární jádro má mnoho předností(modul můžeme kdykoliv zavést do paměti a kdykoliv ho odebrat), u jádra s podporou modulů by mělo být samotné jádro co nejmenší. Moduly jsou většinou uloženy v adresáři/lib/modules/číslo_verze_jádra. Modul lze do jádra vložit dvěma způsoby - manuálně, nebo si jej jádro pomocí démona, který se jmenuje kerneld, natáhne samo. Chování kerneld se řídí jeho konfiguračním souborem /etc/modules.conf. Něco podobného jako kerneld dělá i kmod. Kmod také volá modprobe, ale nevyžaduje k tomu žádný externí program. Kmod se stává náhradou kerneld. Více najdete v dokumentaci /usr/src/linux/Documentation/kmod.txt. Alias zpřístupňuje jádru modul pod dalším jménem. Jádro při potřebě ovladače síťové karty natahuje modul eth0, který neexistuje a proto je nutné pomocí aliasu "označit" ten správný. Řádek obsahující options definuje standardní parametry pro start modulu. Pokud je modul natahován z příkazové řádky, mají na ní uvedené parametry přednost.
Druhou možností je vložit modul do jádra ručně. K tomu lze použít dva příkazy, vhodnější je
modprobe název_modulu případné_parametry
Tento příkaz také využívá parametry nastavené v konfiguračním souboru /etc/modules.conf Umí si sám najít, které další moduly jsou případně pro činnost požadovaného modulu nutné a natáhne je. Pokud má korektně fungovat, je nutné před prvním použitím vytvořit zadáním příkazu
/sbin/depmod -a
seznam závislostí mezi moduly. Depmod vytváří soubor závislostí /lib/modules/x.x.xx/modules.dep. Tento soubor má podobnou strukturu jako Makefile, obsahuje závislosti modulů, které se nacházejí v aktuálním adresáři. Modprobe pak s tím to souborem pracuje, když ho voláme. Většina distribucí tento příkaz spouští při každém startu. Další možností je příkaz insmod, který dokáže vložit modul o něco "agresivněji" než modprobe. Modprobe tento příkaz volá pro natažení modulu po kontrole verze a závislostí.
Pokud není modul po nějakou dobu používán a byl natažen přes kerneld, je automaticky z jádra vyjmut. Většinou se tak stane po 1 minutě. Ručně natažený modul zůstává v jádře trvale. Odstraní se příkazem
rmmod jméno_modulu
Pokud jméno není známé, nebo chceme vědět jaké moduly jádro aktuálně používá, zadáme příkaz
lsmod

Instalace nového jádra

Po skončení konfigurace zadáme
make dep
(zjistí závislosti zdrojových souborů a stanoví pořadí kompilace) a
make clean
(odstranění veškerých dříve překompilovaných objektových souborů). Místo make clean můžeme také spustit
make mrproper
, který kromě předkompilovaných souborů smaže také nastavení konfigurace jádra. Samotná kompilace se spouští príkazem
make bzImage
"z" v názvu znamená, že jádro je kompresováno gzipem, "b" znamená, že jádro se "rozbaluje" do high memory, tzn. do oblastni >1MB(obyčejně se rozbaluje do low memory, tzn. >640kB). Toho využijeme např. při obzvlášt velkém jádru. Rozdíl v rychlosti u bzImage a zImage neexistuje. Make bzImage uloží výsledné jádro do souboru arch/i386/boot/bzImage.
bzImage zkopírujeme do /boot/. Pokud máme jádro s podporou modulu, musíme ještě zkompilovat moduly příkazem:
make modules
Následně moduly nainstalujeme příkazem:
make modules_install
Moduly se instalují do adresáře /lib/modules/verze_jádra. Upravíme soubor /etc/lilo.conf, konkrétne řádek "image = /cesta k jádru" musí ukazovat na správný soubor. Potom se spustí příkaz /sbin/lilo k updatování nastavení zavaděče lilo.