Vlastní jádro v Debianu
Obsah
Úvod
Binární jádro dodávané přímo v Debianu je funkční a rychlé, ale člověk často potřebuje nějaký ovladač nebo vlastnost, která ve standardním jádře zakompilovaná není. Anebo jen chce mít jádro „šité na míru“, ať už pro lepší pocit, úsporu místa nebo trošku vyšší výkon. Tento návod by vám měl pomoci s překladem jádra řady 2.6.x v Debianu.
Návod je zaměřen na kompilaci originálního jádra z kernel.org pomocí nástrojů Debianu. Akce označené příkazem sudo je třeba provádět jako root. Ostatní příkazy doporučuji spouštět pod účtem uživatele. Zdrojové kódy umístíme do adresáře src v home adresáři uživatele a jádro budeme konfigurovat a překládat zde.
Požadované balíčky
Potřebovat budeme kompilátor gcc a základní utility jako wget, tar, bzip2, patch, make apod. Předpokládám, že jsou nainstalované.
Debianí nástroje pro práci s kernelem se nachází v balíčku kernel-package, potřebovat budeme také fakeroot.
Zprovoznění grafické konfigurace voleb jádra (příkaz make xconfig) vyžaduje vývojový balíček knihovny Qt3 – libqt3-mt-dev. Alternativou je příkaz make menuconfig, pak stačí libncurses5-dev.
sudo apt-get install kernel-package fakeroot libqt3-mt-dev
Získání zdrojových kódů jádra
Na webu kernel.org vybereme verzi jádra a stáhneme archív se zdrojovými kódy. Kompletní archív poslední stabilní verze jádra se ukrývá pod písmenem F na prvním řádku. Stáhneme jej a rozbalíme.
Jako pomůcku si zavedeme proměnnou kver s verzí jádra, kterou budeme používat.
export kver=2.6.28.3 cd ~/src wget "http://kernel.org/pub/linux/kernel/v2.6/linux-$kver.tar.bz2" tar xjf linux-$kver.tar.bz2
Patche
Podle potřeby můžeme na jádro aplikovat různé patche. Jako příklad uvedu patchset tp_smapi pro laptopy ThinkPad.
tar xzf tp_smapi-0.40.tgz cd tp_smapi-0.40 make patch KVER=$kver KSRC=~/src/linux-$kver KBUILD=~/src/linux-$kver patch -p1 -d ~/src/linux-$kver < tp_smapi-0.40-for-$kver.patch
Konfigurační volby
Nyní již můžeme jádro nakonfigurovat a přeložit. Napoprvé určitě nebude jádro fungovat tak, jak bychom chtěli, takže tento postup několikrát zopakujeme :-) Jako výchozí bod použijeme konfiguraci běžícího jádra.
cd ~/src/linux-$kver cp /boot/config-`uname -r` ./.config make-kpkg --config xconfig configure
Otevře se okno s volbami jádra. Vybereme vše, co potřebujeme. Zaškrtnuté políčko znamená, že součást bude zakompilována přímo do jádra, puntík označuje modul.
Chceme-li získat jádro bez zaváděcího ram disku (initrd), musíme přímo do jádra zakompilovat vše, co je potřeba k načtení souborů z hlavního oddílu disku. Tedy souborový systém, řadič disku apod. V tomto případě vynecháme volbu --initrd při spouštění překladu.
Překlad a instalace jádra
Následující příkaz spustí proces překladu jádra a jeho zabalíčkování pro Debian.
Volby --append-to-version a --revision si upravíme podle vlastních představ.
První volba přidá řetězec k verzi jádra, například 2.6.28.3-tp1.
Tím jednoznačně odlišíme naše jádro od jader distribučních a umožníme instalaci více jader zkompilovaných ze stejné verze zdrojových kódů. Druhá volba nastavuje revizi balíčku. Změníme-li později pouze revizi, bude možné dříve nainstalované jádro upgradovat na nové.
Proměnnou CONCURRENCY_LEVEL nastavíme podle počtu jader, na kterých má překlad probíhat.
make-kpkg -j2 --rootcmd fakeroot --append-to-version=-tp1 --revision=1 \ --initrd kernel_image modules_image kernel_headers
Pokud nedojde k chybě, vzniknou o adresář výše balíčky linux-image-(verze).deb a linux-headers-(verze).deb. Balíčky nainstalujeme.
sudo dpkg -i ~/src/linux-image-$kver-tp1_1_amd64.deb \ ~/src/linux-headers-$kver-tp1_1_amd64.deb
A to je vše. V zavaděči Grub se objeví nová položka a po restartu můžeme nabootovat s vlastnoručně vytvořeným jádrem. Nepotřebné jádro je možné odinstalovat jako každý jiný balíček.
Vyčištění zdrojového stromu jádra
Před opětovným překladem s novou konfigurací je vhodné vyčistit strom zdrojových kódů. To provedeme následujícím příkazem.
make-kpkg clean
Soubor .config s nastavením zůstane nedotčen, ostatní se uvede do původního stavu.