Oznámkujte:
nebo 
Děvčátka, chlapci a hermafroditi,
byl jsem Otíkem požádán, abych napsal podrobnější návod, kterak zkompilovat jádro Linux.
Jeden návod, jehož autorem je kolega Spox, na tomto fóru již nějaký čas existuje, jenže pro spoustu uživatelů zdá se prý býti příliš stručným, proto se ho budu snažit rozšířit tak, aby jej pochopili i smrtelníci. Snad se mi to povede.
Rád bych dodal, že kompilace kernelu je procedura celkem zdlouhavá, na slabších strojích může trvat klidně i několik hodin, jeho konfigurace (pouze v angličtině; nepovinná) může být pro někoho poměrně náročná, ne-li přímo smrtelná, i ta se může prodloužit na pár hodinek.
Budete-li ovšem dostatečně trpěliví a pečliví, může se vám to sakra vyplatit.
Jenom menší poznámka: Po většinu času budete pracovat v Terminálu (to je ta ošklivá věc s písmenky a blikající kostičkou). Není to žádná hrůza. Jakmile ho spustíte, mějte ho až do konce tvorby kernelu stále otevřený.
Návod je platný jak pro starší jádra 2.6, tak i pro nová jádra 3.x
PřípravaZákladní ingrediencí je nepochybně zdrojový kód jádra Linux. Jedná se o poměrně mohutný archiv obsahující desetitisíce souborů, zpravidla textových, mající po rozbalení dohromady téměř 0.5 GiB.
Ten si stáhneme ze serveru
kernel.org, přičemž volíme raději stabilní jádro (v současnosti 3.2.2), s nestabilním občas mohou být nepříjemné problémy. Uložíme ho např. na plochu, do domovské složky, nebo rovnou do
/usr/src.
Můžete také experimentovat s "vytuněným" jádrem
Zen, více informací naleznete na
Rootu (návod platí i pro toto jádro).
Dále budeme potřebovat mít nainstalované balíky
build-essential, kernel-package, libncurses5, libncurses5-dev, gcc, cpp a fakeroot. Snad jsem na nic nezapomněl (když tak se ozvěte). Nainstalujeme je pomocí:
sudo apt-get install build-essential kernel-package libncurses5 libncurses5-dev cpp gcc fakerootPřijde-li na návštěvu vaše dívčina, je vhodné pochlubit se tím, že jste mocným správcem jádra. To se dá zařídit celkem snadno, když v
/etc/kernel-pkg.conf vyplníte vaše jméno, příjmení, kontakt, prioritu a číslo revize (cokoliv; v mém případě
$(version)-Sid1; doporučuji
$(version)-cokoliv). Pokud tento soubor neexistuje, vytvořte ho a vložte do něj něco jako:
maintainer := Jméno Příjmení
email := tvoje.mailovka@server.tld
priority := optional
debian = $(version)-Sid1To bude zobrazeno ve vlastnostech balíku:

Jdeme na to!1. Rozbalíme si stažený archiv s jádrem. Předpokládejme, že je
uložené na ploše (~/Desktop) a že je pro verzi
3.2.2, tedy že si nechá říkat
linux-3.2.2.tar.bz2.
Nejprve si otevřeme mnohými nenáviděný Terminál (gnome-terminal, xterm,...) a získáme práva Roota:
sudo -sPoté přejdeme do složky
/usr/src, v níž budeme pracovat, a rozbalíme do ní archiv se zdrojáky jádra. Tato operace bude pár minut trvat, musí se extrahovat několik desítek tisíc souborů:
cd /usr/src
tar jxf ~/Desktop/linux-3.2.2.tar.bz2Teď se pustíme do nejsložitější fáze, do konfigurace. Nejdříve přejdeme do složky s rozbaleným kernelem:
cd linux-3.2.2Použijeme konfiguraci jádra, na němž momentálně běžíme. Je to rozsáhlý textový soubor, bude pojmenován
.config:
cp /boot/config-`uname -r` .configNyní si maximalizujte okno Terminálu, přichází vaše noční můra, konfigurace

:
make menuconfigVaroval jsem vás. Pokud vám nic nechybí, v okně Terminálu uvidíte něco jako tohle:

... jinak, pokud by vám něco chybělo, měla by se zobrazit chybová hláška, podle níž by jste se měli řídit, pokud jí nerozumíte, máme tady fórum

.
TIP!
Při štelování vám pomohou tyto příkazy, lsmod (seznam běžících modulů), dále potom lspci, lsusb, lshw... (seznam HW)Ovládání pomocí kláves
↑/↓ Nahoru/dolu
Enter Zvolit
Y Povolit
N Zakázat
M Modul
Esc + Esc Konec
?, H Nápověda
/ Hledat
Stavy položek
[*] Napevno vestavěno
[M] Odnímatelný modul
[ ] Zakázáno
-?- Nelze změnit
[?] Pouze povoleno/zakázáno, nelze použít jako modul
<?> Povoleno, zakázáno i modul NEBO modul, zakázáno
{?} Pouze povoleno a modul
(ABC) Lze zadat hodnotu
---> SubmenuTIP!
Položky označené jako EXPERIMENTAL můžete klidně zakázatSeznámím vás s důležitými položkami:Pozn.: Pokud si s něčím nebudete jisti, nesahejte na to, nechte to jak to je. Téměř u každé položky je k dispozici nápověda, jinak UTFGGeneral setup (obecné nastavení): Tady si můžete nastavit třeba podporu pro swap, kompresní režim kernelu (doporučuji LZMA), podpora pro initramfs/initrd, optimalizace kernelu pro velikost, typ alokátoru (SLAB, SLUB, SLQB...) aj.
Enable loadable module support: Zda povolit přidávání/odebírání modulů jádra za chodu + pár dalších voleb s touto věcí souvisejících- doporučuji povolit
Enable the block layer: povolit blokovou vrstvu + volby s tím související. Raději nesahat.
Processor type and features: Typ procesoru, jeho vlastnosti. Tam se dá celkem slušně vyřádit, je možné zvolit si vhodnou rodinu procesorů, do níž váš křemíkový mozek spadá, podpora SMP (pro víceprocesorové systémy) i SMT (pro procesory s podporou hyperthreadingu), typ preempce, frekvence přerušení (100, 250, 300 a 1000Hz; čím vyšší frekvence, tím plynulejší chod a rychlejší reakce, ALE nižší vámi využitelný výpočetní výkon; pozn.: jádro Zen povoluje frekvence v rozmezí 100Hz až 10kHz!), podpora pro >3GiB RAM (až 64GiB RAM pro 32-bity), emulace matematického koprocesoru (pro archivní procesory nemající FPU) atd. Zde se dá jednak zmenšit kernel a jeho velikost v RAM, ale hlavně se takto dá optimalizovat pro výkon.
Power management and ACPI options: Nastavení správy napájení a ACPI, povolení/zakázání uspání a hibernace, nastavení změny frekvence CPU atd.
Bus options (PCI, etc.): Nastavení sběrnic PCI(e), ISA, PCMCIA...
Executable file formats / Emulations: Podpora pro ELF aj., nuda, nesahat
Networking support: Tady se dají poštelovat různá síťová zařízení. Už v prvním submenu je spousta zbytečností (CAN, IrDA, CAIF aj.), dají se beztrestně vypnout.
Device drivers: Jó, tak u tohohle se zapotíte, to si pište! Pokud někdo z vás stále tvrdí, že Linux podporuje málo železa, nechť si poctivě proleze tenhle chlívek a spočítá si ovladače. Je to přímo bludiště! A právě v tomhle bludišti se dá kernel opravdu dobře zmenšit. Stačí znát důkladně střeva svého stroje, ovladače na ně nechat a zbytek, stovky, ne-li tisíce nepotřebných ovladačů, jednoduše zahodit, zrušit, zlikvidovat. Ale bacha, u čeho si nejste jisti (třeba RTC hodiny), to raději ignorujte. Je dobré si k jednotlivým položkám číst nápovědu, jak je tam něco jako "if unsure, say N" a ta položka vám není nijak povědomá, můžete ji zakázat. Jestli tam ale bude "...just say Y", raději poslechněte.
Firmware drivers: Koukám, že už jste z bludiště venku, na ksichtě vrásky a šedej vous, oči barvy krve (cháchá, já vás varoval!), ale to nejhorší už máme za sebou. Nekecám. Třeba v tomhle chlívku nalezneme akorát pár speciálních ovladačů, zejména pro noteknihy.
File systems: Podpora různých souborových systémů. Doporučuju povypínat všelijaké ty rozšířené vlastnosti, pokud je nevyužíváte.
Kernel hacking: Koutek pr h4x0ry, různá dolaďování jádra
Security options: Většina uživatelů tato bezpečnostní udělátka pravděpodobně nepotřebuje
Cryptographic API: Různé šifrovací algoritmy
Virtualization: Virtualizace; kdo nevirtualizuje (KVM a spol.), toto nepotřebuje. Zahodit, spálit.
Library routines: Nechat radši na pokoji
Load an Alternate Configuration File: Načíst alternativní konfigurák (asi jen pokud se jmenuje jinak než
.conf)
Save an Alternate Configuration File: Uložit nastavení
Až budete mít hotovo, uložte nastavení a zvolte dole položku
<Exit>Heh. Zapomněl jsem jaksi trošku dodat, že pokud chcete mít stejnou konfiguraci jako u "továrního" kernelu, na kterém zrovna běžíte, není potřeba vůbec nic konfigurovat, stačí z něj akorát použít konfigurák
3. Teď budete odpočívat, zatímco váš stroj zažije peklo. Správně, jde se kompilovat, půjde-li vše podle plánu, v /usr/src očekávejte dva deb balíky-
linux-headers-blablabla.deb a
linux-image-blablabla.deb. Ale nepředbíhejme.
Pokud jste již ve složce /usr/src/linux-* kompilovali, je dobré ji vyčistit, není to ale nezbytně nutné:
fakeroot make-kpkg clean... a rovnou se pustíme do kompilace samotné:
fakeroot make-kpkg --append-to-version -X --us --uc --initrd kernel_image kernel_headers... kde
-X je číslo "pokusu", např. -1 (3.2.2
-1)
4. Hotovo? Vytvořily se balíky? Zbývá je pouze nainstalovat, pro jistotu oba (hlavičky jsou potřeba např. pro *.run instalátor ovladače nVidia). Někdo preferuje klikátko Gdebi, ale když už máme otevřený Terminál...
dpkg -i /usr/src/nazev_baliku.debNěkdy se stane, že se neaktualizuje GRUB, to se dá napravit snadno:
update-grubNo a máme hotovo, teď jen stačí pomodlit se ke sv. Tuxovi a sv. Rootovi, modlitbu ukončit slovem "Enter", a rebootovat. Poté, pokud to bude fungovat, ladit dle systémových logů k dokonalosti, jestli se to nepovede, nezoufejte, můj první pokusný králík mi v počátku bootování rozblikal klávesnici v rytmu Kernel panic.
Hodně štěstí!
Budete-li mít nějaké komplikace, něčemu nebudete rozumět, svěřte se s nimi, koušu jen mezi půlnoci a dvanáctou večer.
Návod může obsahovat chyby a nepřesnosti, proto přitom nepřestaňte používat vlastní mozek a jeho interní logiku.
Návrhy a připomínky jsou vítány, kritika ne
.