Konfigurace jádra

Petr Svoboda,xsvobod7


Obsah


Co je jádro

Jádro je základní součást linuxu. Hned při startu systému se jádro natahuje do paměti a tvoří rozhraní mezi uživatelskými programy a hardware počítače V dalších částech referátu budu tiše předpokládát architekturu i386, i když linuxové jádro může fungovat i na procesorech mips,powerpc,sparc a dalších.

Kde najít jádro

Jádro můžeme použít buď předkompilované z nějaké distribuce linuxu anebo si přeložit vlastní. Dá se najít ve zdrojové podobě na různých ftp serverech včetně ftp.fi.muni.cz. Podle dohody se různé verze jádra označují takto:

První číslo označuje hlavné release.
Druhé čislo, pokud je sudé tak znači stabilní verzi jádra, pokud je liché, tak vývojovou verzi jádra.
Třetí číslo pak patchlevel jádra.
Např. Teď je poslední stabilní verze jádro 2.2.17 a posledni vývojová verze 2.4.0-test9. Aktuální informace o stavu jádra zjistíme např. příkazem

finger @ftp.kernel.org
[zeus.kernel.org]

    The latest stable version of the Linux kernel is:     2.2.17
    The latest beta version of the Linux kernel is:       2.4.0-test9
    The latest prepatch (alpha) version *appears* to be:  2.4.0-test9/pre9

Konfigurace jádra

Zdrojové kódy jádra jsou zpravidla komprimované v jednom souboru. Tento je třeba rozbalit např.
tar xvfz linux-2.2.16.tar.gz
  
Další možností je použít patch pro upgrade nižší verze na vyšší. Tj. pokud mame jádro verze 2.2.16 a chceme upgradovat na 2.2.17, stáhneme příslušný patch a použijeme jej
$ cd /usr/src/linux
$ patch -p1 < patch-2.2.17
	
Jádro je třeba před kompilací nejprve zkonfigurovat tj. vygenerovat soubor .config. Lze k tomu použít různé volby pro příkaz make jako např. Jádro se postupem času stále více a více rozrůstá, proto si popíšeme pouze nejdůležitější konfigurační volby,i když je velmi težké rozhodnout, která volba je "důležitá". Zobrazen je výstup příkazu make config pro jádro 2.2.17.

[Y/m/n/?] Označuje možné odpovědi - Yes - zakompilovat, Module - zakompilovat jako modul, No - nekompilovat , ? - Help


Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL)
- v další konfiguraci budeme upozorňováni na vývojové/neúplné součásti jádra (Vhodné použít,např. pokud máme velmi rozšířenou síťovou kartu s čipem Realtek 8139).
Enable loadable module support (CONFIG_MODULES) [Y/n/?]
- zapíná podporu modulů. Blíže viz. sekce Moduly.
Networking support (CONFIG_NET) [Y/n/?] Y
- zejména nutné, pokud chceme provozovat pod linuxem připojení k síti :)
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE) [Y/m/n/?]
- nutná volba, pokud chceme pristupovat na (E)IDE disky.
Generic PCI bus-master DMA support (CONFIG_BLK_DEV_IDEDMA) [Y/n/?]
- podpora (U)DMA pro při přístupu k diskům. Dále pak lze navolit typ našeho IDE chipsetu.
Packet socket (CONFIG_PACKET) [Y/m/n/?]
- pokud bude třeba přistupovat na síťovou kartu přímo (např. tcpdump).
SCSI emulation support (CONFIG_BLK_DEV_IDESCSI) [N/y/m/?]
- zapíná emulaci SCSI příkazů na IDE zařízení. Nutné alespoň jako modul pro IDE vypalovačky.
TCP/IP networking (CONFIG_INET) [Y/n/?]
- pro přístup k internetu.
Network firewalls (CONFIG_FIREWALL) [N/y/?]
- zapíná podporu filtrování paketů v jádře.
IP: kernel level autoconfiguration (CONFIG_IP_PNP) [N/y/?]
- např. pro bezdiskové stanice. Síť se zkonfiguruje podle DHCP,BOOTP protokolu v dobe startu jádra.
SCSI support (CONFIG_SCSI) [Y/m/n/?]
- pokud máme nějaké SCSI zařízení. Dále pak volíme druh SCSI řadiče atd.
Network device support (CONFIG_NETDEVICES) [Y/n/?]
- pokud máme nějaké síťové zařízení (např. ethernetovou kartu)
Second extended fs support (CONFIG_EXT2_FS) [Y/m/n/?]
- jeden z nejčastěji používaných systémů souborů v linuxu.
NFS filesystem support (CONFIG_NFS_FS) [Y/m/n/?]
- možnost připojené NFS svazků z jiných počítačů.
SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS) [N/y/m/?]
- možnost připojení sdílených složek z Win9x/NT,Samba serverů.
Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?]
- v případě "zatuhnutí" dává možnost provést zápis bufferů na disk, reboot počítače a další věci pomocí stisků různých kombinací kláves.

Moduly

Moduly jsou "ovladače", které lze vkládat do jádra za běhu, případně si jádro pomocí démonu kerneld natahuje moduly podle potřeby samo. Pokud modul již není potřeba, lze jej z jádra opět odebrat. Šetří se tak paměť, a jádro se stává flexibilnějším neboť lze nakompilovat mnoho modulů pro různá zařízení a natahovat je v případě potřeby.

Kompilace jádra

Po skončení konfigurace máme vygerenovaný soubor .config s naší konfigurací a můžeme přikročit ke kompilaci jádra. Bude třeba mít zkonfigurované prostředí pro překlad C-programů.

make dep - kontrola hlavičkových souborů, vyřešení závislostí
make clean - smaže zbytky po předchozích kompilacích
make bzImage (zImage)(zdisk) - bzImage nutno zadat pokud velikost jádra přesáhne 500 kB,
jinak zImage, případně zdisk, který vyrobí rovnou bootovací disketu.
make modules - zkompiluje moduly
make modules_install - instaluje moduly

Rychlost kompilace závisí na rychlosti počítače a množství součástí, které do jádra kompilujeme. V průměru trva okolo 5-10 minut na novějších strojích. Po skončení překladu máme v adresáři arch/i386/(b)zImage hotové jádro. Pokud použijeme moduly pak v /lib/modules/{číslo_jádra} jsou instalované nové moduly. Jádro pak překopírujeme na diskový oddíl, z něhož bootujeme (zpravidla připojený jako /boot). Pokud používáme zaváděcí program lilo, pak upravíme jeho konfigurační soubor (většinou je to /etc/lilo.conf), aby obsahoval novou sekci např:

	image=/boot/vmlinuz-2.2.17
	label=l17
	root=/dev/hda6
kde image je naše nové jádro, label je jeho označení a pro každou image musí být jiné, root označuje kořenový svazek ze kterého nové jádro bude dál startovat. Spustíme příkaz lilo. Lilo sídlí na disku v MBR (Master Boot Record). Problematika jeho koexistence s různými jinými zavaděči jiných operačních systémů je popsána v různých HOWTO dokumentech dostupných např.
zde. Zbývá restartovat počítač, a v lilo promptu zvolit label našeho nového jádra.

Zbývá dodat, že postup zde popsaný není jediný a existuje spousta dalších způsobů jak jádro nabootovat, použít jiné bootloadery apod.