Produkty Novinky Články Návody Kontakty

Konfigurace jádra

V tomto kroku konečně odložíme nářadí, tabulky atd. a zkusíme nakonfigurovat jádro tak, aby nabootovalo a stabilně běželo na našem pokusném počítači. Ano je to slavnostní okamžik v životě každého embedďáka - první konfigurace jádra.
Postup:
  1. Stáhnout a rozbalit kompletní zdrojové kódy vybrané stabilní verze jádraInformationhttp://www.kernel.org. V dalším textu předpokládáme jádro verze 2.6.35.13 (longterm).
    1. Jádro stáhneme do aktuálního adresáře pomocí příkazu:
      $ wget http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.35/linux-2.6.35.13.tar.bz2
      
    2. Zdrojové kódy jádra rozbalíme v aktuálním adresáři příkazem:
      $ tar -xjf linux-2.6.35.13.tar.bz2
      
  2. Přepneme se do adresáře linux-2.6.35.13/ s rozbalenými zdrojovými kódy (tzv. strom jádra).
  3. Strom jádra pro jistotu uklidíme (i když nepředpokládám, že by vývojáři jádra uvolnili napůl sestavené zdrojové kódy).
    Povel k totálnímu úklidu:
    $ make distclean
    
    Upozornění! Příkaz make distclean kromě toho, že smaže všechny soubory vytvořené konfigurací či kompilací, smaže i soubor s konfigurací .config.
  4. Pak vytvoříme výchozí konfiguraci pro 32bitovou platformu:
    $ make i386_defconfig
    
  5. Následně výchozí konfiguraci upravíme v konfigurátoru jádra:
    $ make menuconfig
    
  6. Po doladění konfigurace zmáčkneme v hlavním menu 2x klávesu Esc. Tím vyvoláme dialog ukončující konfiguraci jádra, kde potvrdíme uložení upravené konfigurace do souboru .config.
  7. Pak už můžeme spustit samotné sestavení jádra (viz dále).
Protože konfigurace jádra může na první pohled vypadat velmi složitě až nepřekonatelně, tak si pojďme si projít ty části konfigurace, kde si musíme dávat obzvláště pozor.
Procesor
Typ procesoru jsme zjistili už dříve např. v BIOSu. V jádře je vhodné si pečlivě přečíst nápovědu k daným volbám týkajícím se typu procesoru. Obecně když si nejsme jistí, tak raději zvolíme nižší (rozuměj starší) typ. Přinejhorším prostě jen nevyužijeme plný potenciál CPU.
V tomto případě taky nezapomeneme zatrhnout volbu CONFIG_X86_GENERIC. Ta do jádra přidává obecnou podporu x86 procesorů. Pokud si naopak jsme jistí konfigurační volbou ohledně našeho CPU, můžeme zkusit obecnou podporu x86 procesorů vypnout. Jádro by pak mělo CPU využívat efektivněji.
Systémový časovač
Je velmi důležité jej zvolit správně. Pokud se systémový čas urychluje/zpožďuje nebo nefungují správně časovače v programech, tak je vhodné se na tento problém zaměřit a zkusit přepnout systém na jiný typ časovače. Proto je vhodné při konfiguraci jádra zvolit podporu pro více typů systémových časovačů a vybrat si daný pomocí parametru clocksource v příkazové řádce jádra.
Problémy s časovači často souvisejí také s nefungujícím ACPI/APM, tedy power managmentem. Popřípadě mohou souviset i s dynamickým snižováním taktu CPU podle vytížení nebo při vypínání CPU kvůli snížení spotřeby energie.
Zdroje času jsou:
  • HPET - velmi přesný časovač (clocksource=hpet).
  • tsc (time stamp counter) - není tak přesný jako hpet (clocksource=tsc).
  • pit - (clocksource=pit).
  • apci_pm - časovač používaný u PC podporující ACPI (clocksource=acpi_pm).
Při inspekci systému (třeba pomocí live CD distribuce) lze dostupné časovače a současně používaný časovač zjistit takto:
$ cd /sys/devices/system/clocksource/clocksource0
$ cat available_clocksource
$ cat current_clocksource
Power management
ACPI a APM jsou standardy na řízení spotřeby a přidělování systémových zdrojů jako IRQ apod. Je důležité zjistit, který z nich je podporován a podle toho nakonfigurovat jádro. Pokud se třeba snažíme provozovat ACPI na PC, kde není BIOSem podporováno, tak to může vést k nestabilitě celého systému. Někdy pomáhá podporu Power Managementu úplně vypnout nebo alespoň deaktivovat uspávání jednotlivých komponent počítače a přechod do úsporného režimu.
Správná konfigurace power managementu ovlivní i to, zda jde PC vypnout stiskem tlačítkem a zda příkaz shutdown -h skutečně vypne i zdroj PC.
Stejně jako systémový časovač, lze volbu používaného standardu power managmentu ovlivnit v příkazové řádce jádra (parametr acpi, volby force, off, atd.). Je proto vhodné ve sporných případech zkusit zakompilovat do jádra oba a zkoušet, který se chová stabilně.
Podpora HW
Podporu HW máme už vyřešenu - máme seznam modulů, resp. symbolických konstant CONFIG_NECO, které zajišťují jejich kompilaci. V konfigurátoru jádra pouze potřebujeme pomocí těchto konstant najít odpovídající konfigurační volby a zatrhnout je.
Postup je jednoduchý. Při spuštěném konfigurátoru zmáčkneme klávesu / a zadáme symbolickou konstantu bez CONFIG_. Např. AGP_INTEL. Potvrdíme klávesou Enter. Zobrazí se nám nápověda k této volbě, příslušná konfigurační volba a její umístění v menu konfigurátoru.
Hodnota konfigurační volby musí u modulů být * a nikoliv M. Hodnota M totiž znamená, že modul bude při kompilaci jádra zkompilován jako samostatný objektový soubor, který bychom museli pomocí udev a inicializačního RAM disku zavést při nabíhání systému ve vhodný moment do jádra. Zatímco hodnota * říká, že modul bude zkompilován jak součást monolitu jádra (rozuměj obrazu jádra) a tudíž se o nějaké zavádění starat nemusíme.
V rámci optimalizace můžeme vypnout kompilování modulů pro zařízení o kterých si jsme jisti, že v zařízení nejsou nebo je nebudeme používat.
Protože budeme pokusný počítač využívat pro hrátky s HW přípravkem připojeným přes paralelní port, je nutné, aby v jádře nebyl zakompilován žádný ovladač paralelního portu!
Souborové systémy
Obecně má smysl nechat zapnutou podporu pouze pro souborové systémy ext2 a ext3 pro harddisky, případně ISO9660 pro čtení dat z CD a DVD médií. Případně můžeme zapnout podporu souborových systémů MSDOS a VFAT kvůli možnosti přistupovat na data uložená pod MS Windows.
Obecné tipy
U voleb, kde si nejsme jistí, je vhodné si udělat poznámky. Pak se lze k těmto bodům vrátit pro případ, že by naše konfigurace byla nestabilní nebo nefungovala vůbec.
Dále je dobré si do jádra zakompilovat příponu k verzi jádra - viz volba General->Local version, např. -rc1. Při dotazu na verzi pak jádro vrátí např. toto 2.6.35.13-rc1. Přípona verze jádra pomáhá rozlišit různé pracovní verze jádra.
Každou konfiguraci (soubor .config), s kterou jsme spokojeni, je vhodné si zazálohovat, s tím že k názvu souboru přidáme i příponu verze jádra. Lze se tak snadno vracet k původní fungující konfiguraci, porovnávat konfigurace apod.

Sestavení jádra

Nakonfigurované jádro sestavíme příkazem:
$ make -j2
kde hodnota za parametrem -j by měla být dvojnásobkem počtu procesorů/jader počítače, na kterých budeme sestavovat jádro.
U hodnoty 2 a vyšší se aktivuje paralelní sestavování jádra, tzn. že celý proces sestavení jádra se rozloží do více úloh, které budou zpracovávány současně. Což může sestavení jádra značně urychlit.
Úspěšné sestavení jádra je indikováno hlášením, že obraz jádra je připraven (viz obrázek 1.7). Výsledkem je soubor s komprimovaným obrazem jádra arch/x86/boot/bzImage a soubor System.map, kde jsou umístěny vstupními body všech API funkcí jádra.
obrázek vysledek-sestaveni-jadra
Obrázek 1.7 Výsledek sestavení jádra
Je zvykem obraz jádra bzImage zkopírovat, pojmenovat jako vmlinuz a přidat k jeho názvu i verzi jádra a případně naši příponu k verzi jádra. Verzi jádra přidáme také ke kopiím souborů System.map a .config.
Výše uvedené zajistíme příkazy:
$ cp arch/x86/boot/bzImage vmlinuz-2.6.35.13-rc1
$ cp .config config-2.6.35.13-rc1
$ cp System.map System.map-2.6.35.13-rc
Všechny tyto soubory necháme zatím ve stromu jádra (adresář linux-2.6.35.13/). Později se se budou kopírovat do kořenového adresáře naší distribuce. Jejich názvy zároveň zajišťují, že je při úklidu stromu jádra příkazem make distclean nesmažeme.