/etc/sysctl.cong
popř. nastavit pomocí příkazu sysctl
.
První linuxové jádro spatřilo světlo světa v roce 1991. Mezitím uplynulo patnáct let - jádro dospělo do verze 2.6 a skládá se z více než 4.5 miliónů řádků (je napsáno převážně v jazyce C a část pak v assembleru). Ačkoliv se dnes pod pojmem Linux rozumí některá z distribucí, správně bychom tímto pojmem měli označovat právě jádro, které je základním kamenem každé distribuce.
Jádro zajišťuje komunikaci mezi aplikacemi a hardwarem. Aplikace komunikují s hardwarem nepřímo přes tzv. souborů zařízení, do/ze kterých zapisují/načítají data. Komunikaci mezi soubory zařízení a hardwarem pak obstarávají tzv. ovladače zařízení.
Ačkoliv defaulní nastavení jádra je pro většinu uživatelů naprosto dostačující, je možné jádro upravit podle Vašich představ. To je možné provést jednak překompilováním jádra, jednak editací souborů v adresáři /proc
. Druhá možnost tak představuje jakási zadní vrátka do systému1). Úpravy jádra vyžadují poměrně hluboké znalosti týkající se nejen samotného Linuxu ale také hardwaru.
Aktuální verze stabilního jádra v době psaní tohoto článku (říjen 2006) byla 2.6.18. Každé z částí čísleného označení jádra má svůj význam.
Číslo 2 je tzv. hlavní verze jádra a mění opravdu vyjímečně - jádro 2.0 bylo vydáno v roce 1996.
Číslo 6 označuje tzv. vedlejší verzi jádra a mění se jednou za několik roků. Souběžně existují vždy tzv. stabilní jádro, které má sudé číslo verze (aktuálně 2.6), a tzv. vývojové jádro, které má číslo liché (aktuálně 2.7). Stabilní jádro je určeno běžným uživatelům a těm, pro které je spolehlivost jádra rozhodující2). V rámci vývojového jádra je pak testována implementace nových vlastností jádra. Jsou-li na vývojovém jádře odstraněny všechny nedostatky, je prohlášeno za stabilní a čísla obou verzí se zvýší o jedna.
Číslo 18 označuje tzv. patch level. Pomocí patche, které jsou vydávány v řádu měsíců, lze provádět opravy/úpravy stávajícího jádra včetně přidání nových ovladačů. Aplikací patche tak lze provést aktualizaci jádra.
Jestliže na Vašem systému zadáte příkaz uname -r
získáte výstup ve tvaru 2.6.17-1.2187_FC5
. „Číslíček“ je tedy poněkud více. Vedle patch levelu, vedlejší a hlavní verze jádra figuruje ve výpisu také číslo 1.2187. To značí verzi patch levelu pro potřeby projektu Fedora Core. Označení FC5
pak znamená, že se jedná o jádro určené pro Fedora Core 5.
Jak již bylo zmíněno výše, ovladač zařízení zajišťuje komunikaci systému s konkrétním hardwarem. Jádro samotné obsahuje některé ovladače (např. ovladače pro systémy souborů), nicméně převažuje snaha vytvořit nad jádrem vrstvu s ovladači. Ovladač tak není integrální součástí jádra, ale má podobu modulu, který je v případě potřeby jádrem načten. To s sebou přináší několik výhod. První je, že ovladač musí být naprogramován „čistěji“ než kdyby byl „zabastlen“ přímo do jádra. Další výhodou je, že nové ovladače lze jednoduše do jádra připojit a není třeba znovu kompilovat jádro. Třetí výhodou je úspora operační paměti. Kdyby všechny ovladače musely být přímou součástí jádra, bylo by toto jádro při současném množství hardwaru neúměrně velké a zabíralo by zbytečně příliš mnoho operační paměti.
Každý hardware má svůj tzv. soubor zařízení. Přes tento soubor pak probíhá komunikace mezi aplikacemi a příslušným hardwarem. Soubory zařízení jsou umístěny v adresáři /dev
(s vyjímkou síťových zařízení). Každý soubor zařízení má tzv. hlavní a vedlejší číslo. Hlavní číslo definuje, jaký konkrétní ovladač má být pro daný hardware použit3). Vedlejší číslo, nazývané také číslo jednotky, je jakýmsi pořadovým číslem zařízení.
Existují dva typy souborů zařízení - blokové a znakové. Blokové umožňují čtení/zápis po tzv. blocích (skupina bajtů; obvykle násobek 512); znakové pak po bajtu. Typickým příkladem blokového zařízení je pevný disk; příkladem znakového zařízení pak klávesnice. To, zda-li je jedná o blokové nebo znakové zařízení, lze poznat podle prvního znaku rozšířeného výstupu příkazu ls
.
ls -l /dev/hda brw-r----- 1 root disk 3, 0 říj 9 18:28 /dev/hda
Písmeno b
značí, že IDE disk hda
je blokovým zařízení(Znakové soubory zařízení jsou označeny písmenem c
.)).
Samotný ovladač je možné do jádra přidat následujícími způsoby:
V této kapitole se budeme zabývat zavedením modulu ovladače do jádra. O přidání nových ovladačů do jádra pomocí tzv. patchů se můžete dočíst v této kapitole.
Nejvýhodnějším způsobem přidání ovladače do jádra je jeho zavedení ve formě tzv. modulu. Moduly distribuované společně s jádrem jsou uloženy adresáři /lib/modules/cislo_verze_jadra
4). Příslušný ovladač lze velice snadno zavést pomocí
/sbin/insmod /lib/modules/verze_jadra/kernel/drivers/typ_zarizeni/ovladac.ko
Jestliže jste při použití příkazu insmod
získali chybové hlášení symbols missing
, došlo k porušení závislostí zaváděných ovladačů. O potřebné závislosti se při zavádění modulů postará příkaz modprobe
.
/sbin/modprobe ovladac
Nejprve je však třeba vytvořit soubor, který obsahuje informace o vzájemných závislostech mezi jednotlivými moduly. Toho lze dosáhnout pomocí příkazu
/sbin/modprobe -c
který vytvoří soubor /etc/modprobe.conf
. Ten obsahuje závislosti všech aktuálně používáných modulů. Druhou možností je použít příkaz depmod
.
/sbin/depmod -a
Ten vygeneruje soubor /etc/modules.dep
obsahující všechny závislosti mezi moduly v adresáři /lib/modules/verze_jadra
.
Odstranění ovladače z jádra lze provést pomocí
/sbin/rmmod ovladac
nebo restartem počítače. Pro permanentní zavedení modulů je třeba zapsat příslušný příkaz pro natažení ovladače do souborů typu rc
- např. na konec souboru /etc/bashrc
.
Výpis všech aktuálně natažených modulů získáte pomocí
/sbin/lsmod
Poznámka: Některé moduly mohou vyžadovat zadání parametrů (např. obsluhu přerušení IRQ). Více informací by mělo být součástí návodu k použití příslušného ovladače.
Poznámka: Výše popsaný postup je aplikovatelný na tzv. vanila jádro. Fedora Core však používá jádro modifikované - proto by aplikace patchů výše popsaným způsobem pravděpodobně měla za následek nefunkčnost systému. Jednodušší (a v drtivé většině případů naprosto dostačující) je provést aktualizaci jádra pomocí příkazu yum -y update kernel
5). Nicméně Vám nic nebrání si stáhnout stáhnout vanila jádro z http://www.kernel.org, na něj následně aplikovat patche a následně jádro přeložit (viz. dále).
Patch je aktualizací jádra, která může mimojiné obsahovat také nové ovladače. Instalaci patche lze provést pomocí příkazu
gunzip -c cesta_k_patch_souboru/patch_cislo.gz | patch -p1
spuštěného z adresáře obsahujícího zdrojové kódy jádra (standardně se jedná o adresář /usr/src/kernels/cislo_verze_kernelu
).
Samotné jádro ovladače i jednotlivé patche naleznete na stránkách http://www.kernel.org (např. jádro 2.6 včetně patchů naleznete zde). Jestliže máte např. jádro 2.6.146) a chtěli byste provést jeho aktualizaci na verzi 2.6.17, musíte stáhnout patche 2.6.15, 2.6.16 a 2.6.17 a tyto pak postupně nainstalovat. Jestliže nebude pořadí instalace patchů dodrženo nebo bude některý patch aplikován vícekrát, skončí tato operace nezdarem.
gunzip -c cesta_k_patch_souboru/patch-2.6.15.gz | patch -p1 gunzip -c cesta_k_patch_souboru/patch-2.6.16.gz | patch -p1 gunzip -c cesta_k_patch_souboru/patch-2.6.17.gz | patch -p1
Samotný překlad jádra vyžaduje poměrně hluboké znalosti nejen z oblasti Linuxu ale také hardwaru. Jestliže Vám pojmy jako TCP/IP, PCI nebo x86 nic neříkají nebo nevíte, jaký má Váš počítač CPU a zvukový čip, překlad jádra se Vám nejspíše napoprvé nepodaří. Nicméně následující postup je relativně bezpečný a není jím co zkazit. Úspěšné zkompilování jádra je tedy otázkou Vaší trpělivosti a času, který máte k dispozici.
Pokud chcete provádět překlad jádra, musíte mít k dispozici zdrojové kódy jádra a nástroje potřebné pro samotný překlad7).
Nástroje potřebné pro překlad jádra jsou obsaženy v balíčku vývojových nástrojů. Tento balíček nainstalujete pomocí
yum -y groupinstall "Development Tools"
Poznámka: Níže uvedený postup byl převzat z www.mjmwired.net.
Pro překlad jádra můžete použít zdrojové kódy připravené v rámci projektu Fedora Core. Toto jádro je modifikované pro potřeby Fedora Core a obsahuje některé úpravy oproti tzv. vanila jádru. Překlad těchto zdrojových kódů je nesrovnatelně jednodušší než překlad vanila jádra.
Nejprve nainstalujte balíček rpm-build
. Tento balíček obsahuje skripty a programy, které se používají pro tvorbu balíčků.
yum -y install rpm-build
Proveďte aktualizaci jádra Vašeho systému.
yum -y update kernel
Restartujte počítač, abyste „natáhli“ nové jádro. Po té vytvořte adresář /opt/kernel
a nastavte ho jako pracovní.
mkdir /opt/kernel cd /opt/kernel
Do adresáře /opt/kernel
stáhněte soubor kernel-verze_jadra.src.rpm
, který obsahuje zdrojové kódy.
yum install yum-utils yumdownloader --source kernel --enablerepo updates-source
Tento soubor nainstalujete pomocí
rpm -ivh kernel-verze_jadra.src.rpm
Nyní je možné přistoupit k samotnému překladu jádra. Před samotným překladem je možné provést ruční editaci konfiguračního souboru kernel-verze_jadra-architektura.config
. Konfigurační soubor bohužel neobsahuje nápovědu pro jednotlivé položky, což činí případnou modifikaci souboru kernel-verze_jadra-architektura.config
poněkud problematickou.
gedit /usr/src/redhat/SOURCES/kernel-verze_jadra-architektura.config
Samotnou kompilaci zdrojových kódů jádra pak spustíte pomocí příkazů
cd /usr/src/redhat/SPECS rpmbuild -bb --target architektura kernel-2.6.spec
Výsledný rpm balíček pak naleznete v adresáři /usr/src/redhat/RPMS/architektura/
.
Poznámka: Architekturu Vašeho počítače zjistíte pomocí příkazu uname -m
.
Druhou možností je stáhnout zdrojové kódy vanila jádra ve formě '.gz' popř. '.bz2' souborů přímo na stránkách http://www.kernel.org. Tyto komprimované soubory mají velikost 40 - 50 MB v závislosti na použitém komprimačním formátu a verzi jádra.
Stáhněte příslušný soubor se zdrojovými kódy ze stránek http://www.kernel.org.
Přesuňte se do adresáře /usr/src/kernels
.
cd /usr/src/kernels
Nakopírujte do tohoto adresáře soubor se zdrojovými kódy vanila jádra pomocí příkazu
mv cesta_k_souboru_se_zdrojovými_kody/verze_jadra.tar.gz /usr/src/kernels/verze_jadra.tar.gz
popř.
mv cesta_k_souboru_se_zdrojovými_kody/verze_jadra.tar.bz2 /usr/src/kernels/verze_jadra.tar.bz2
v závislosti na typu komprimovaného souboru. Soubor pak rozbalte pomocí příkazů
gunzip verze_jadra.tar.gz
popř.
bunzip2 verze_jadra.tar.bz2
Původní soubor se zdrojovými kódy vanila jádra pak můžete smazat pomocí příkazu
rm -f verze_jadra.tar.*
Poznámka: Pokud budete chtít použít patche, aplikujte je pouze na vanila jádro. Jestliže používáte jádro upravené pro potřeby Fedora Core8), mohla by aplikace patchů vést k problémům. Obecně platí, že je jednodušší stáhnout nejakutálnější verzi jádra, která již obsahuje případné patche.
Nyní následuje samotný překlad jádra. Přesuňte se do adresáře /usr/src/kernels/verze_jadra
, který obsahuje zdrojové kódy jádra.
cd /usr/src/kernels/verze_jadra
Překlad spustíte pomocí příkazu
make config * * Linux Kernel Configuration * * * Code maturity level options * Prompt for development and/or incomplete code/drivers (EXPERIMENTAL) [Y/n/?]
Na jednotlivé otázky odpovídáte Y
(ano), n
(ne). Jestliže si odpovědí nejste jisti, zadejte ?
a u většiny položek se Vám zobrazí podrobnější popis. V řadě případů Vám bude nabídnuta ještě další možnost - m
. Pomocí této volby nebude odpovídající část kódu zapracována přímo do jádra, ale bude přeložena ve formě modulu.
Nastavení jádra pomocí config
je téměř nadlidský úkol - k jednotlivým otázkám se není možné vracet a každá chyba tak znamená, že je třeba celé martýrium opakovat od začátku. Navíc není možné odpovědět pouze na část otázek, odpovědi uložit a pokračovat později. Z tohoto důvodu je vhodnější použít grafické nádstavby menuconfig
nebo gconfig
.
Výše zmiňovanou volbu menuconfig
je možné použít i textovém režimu. Je třeba pouze nainstalovat knihovnu ncurses-devel pomocí příkazu yum -y ncurses-devel
. Rozhraní pro konfiguraci jádra se pak spouští z adresáře /usr/src/kernels/vezre_jadra
pomocí
make menuconfig
Chcete-li namísto menuconfig
používat gconfig
je třeba nainstalovat balík Gnome Software Development pomocí yum -y groupinstall „Gnome Software Development“
. Rozhraní pro konfiguraci jádra se pak opět spouští z adresáře /usr/src/kernels/vezre_jadra
pomocí
make gconfig
Pro konfiguraci jádra je třeba postupně procházet jednotlivé položky a u každé vybrat tu možnost, která nejlépe odpovídá Vašim požadavkům. Po té je třeba konfiguraci uložit a je možné přistoupit k samotnému překladu. Do příkazové řádky zadejte postupně následující příkazy
make dep make clean make bzImage make modules make modules_install
Zpracování těchto příkazů může trvat několik desítek minut až hodin v závislosti na konfiguraci Vašeho počítače.
Zkopírujte soubor /usr/src/kernels/verze_jadra/arch/i386/boot/bzImage
do souboru /boot/vm linuz
a soubor /usr/src/kernels/verze_jadra/arch/i386/boot/System.map
do souboru /boot/System.map
.
cp /usr/src/kernels/verze_jadra/arch/i386/boot/bzImage boot/vmlinuz cp /usr/src/kernels/verze_jadra/arch/i386/boot/System.map /boot/System.map
Posledním krokem je úprava zavaděče GRUB, kam je zapotřebí přidat záznam pro Vaše nové jádro. Předpokládejme, že se adresář /boot
nachází na disku hda1
. Otevřete konfigurační soubor menu.lst
zavaděče GRUB v textovém editoru
gedit /boot/grub/menu.lst
a přidejte na jeho konec řádky
title Kernel verze_jadra root (hd0,X) kernel /boot/vmlinuz ro root=LABEL=/ rhgb quiet
Po restartování počítače by se v nabídce zavaděče GRUB měl objevit řádek, který reprezentuje Vámi přeložené jádro.
/etc/sysctl.cong
popř. nastavit pomocí příkazu sysctl
.uname -r
.uname -r
.