▶ Kompilace jádra - podrobný návod [Aktualizováno]

Založil Roman Horník, 21. 08. 2010, 00:53:05

Předchozí téma - Další téma

Roman Horník

Děvčátka a chlapci,

níže naleznete dostatečně podrobný návod, jak si zkompilovat vlastní jádro. Konfigurací a kompilací jádra lze do jisté míry měnit jeho vlastnosti, povolit funkce, které nejsou v distribučním jádru povoleny, upravit jejich chování a zakázat ty, které nepotřebujete, včetně stovek ovladačů, pro vás jistě zbytečných. Tak lze jádro výrazně zmenšit, aby mělo co nejmenší dopad na systémovou paměť, může mít například jen čtvrtinovou velikost oproti jádru distribučnímu, přičemž o nic nepřijdete, ba naopak, váš systém může být o něco svižnější. Navíc můžete mít nejnovější jádro, které se může dostat ve standardní konfiguraci do repozitáře systému až za dlouhé týdny, takže nemusíte čekat, až bude váš nový hardware podporován.
Nutno dodat, že se pravděpodobně málokomu může podařit korektně zkonfigurovat jádro napoprvé, zvláště, když je v něm provedena spousta zásahů, proto buďte velice trpěliví. Raději provádějte spoustu kompilací s malými a opatrnými modifikacemi, než jednu velkou, stačí jen malá chybička kvůli nepozornosti, jádro či systém pak nemusí fungovat správně.
Nainstalovaná jádra hned neodinstalovávejte, mějte v zásobě alespoň jedno funkční ze stejné verze, z nějž pak můžete nabootovat a použít jeho konfiguraci. To se hodí tehdy, když naposledy zkompilované jádro odmítá poslušnost, kdy vám nefunguje klávesnice, nebo když se vám rozblikají LEDky na klávesnici, znamenající tzv. kernel panic, nebo tehdy, když budete muset disk zapojit na jiném hardwaru, který osekané jádro podporovat téměř jistě nebude.
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), nebo v konzoli. Jakmile ho spustíte, mějte ho až do finální instalace stále otevřený.
Není to žádná hrůza, kdyby to bylo příliš složité, tak o tom nepíšu.





Příprava
Základní ingrediencí je nepochybně zdrojový kód jádra Linux. Jedná se (v případě verze 5.12.12) o 76227 souborů a složek (starší jádra mají zpravidla méně), především textových, úhledně zabalených v archívu, majících po rozbalení dohromady zhruba 800MiB a po zaneřádění kompilací kolem 4-5GiB, takže ujistěte se, že máte na konkrétním oddílu minimálně 5GiB volného místa.
Ten si stáhneme ze serveru kernel.org, přičemž volíme raději stabilní jádro (v současnosti 5.12.12), s nestabilním občas mohou být problémy, nicméně to vůbec neznamená, že vždy a všude, takže se ho nebojte. Uložíme ho například na plochu, do domovské složky, nebo rovnou do /usr/src.

Protože budeme pracovat s právy roota (česky kořena), v terminálu přijmeme jeho identitu:

su -

Dále budeme potřebovat mít nainstalované dodatečné balíky, nainstalujeme si je pomocí:

apt install build-essential libncurses6 libncurses-dev cpp gcc libssl-dev libelf-dev bison flex

místo apt můžete použít aptitude, nebo apt-get (syntaxe je totožná).



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 5.12.12, tedy že si nechá říkat linux-5.12.12.tar.xz.

Nejprve, jestliže jste tak dosud neučinili, si otevřeme terminál (gnome-terminal, xterm,...) a převtělíme se v roota:

su -

Poté přejdeme do složky, v níž chceme pracovat, například /usr/src (tam končí zdrojáky jádra stažené přes správce balíků), a rozbalíme do ní archív 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 xf ~/Desktop/linux-5.12.12.tar.xz


Nyní potřebujeme konfiguraci aktuálně běžícího jádra. Nejdříve přejdeme do složky s rozbaleným jádrem:

cd linux-5.12.12

Použijeme konfiguraci jádra, na němž momentálně běžíme. Je to rozsáhlý textový soubor, bude uložen ve složce se zdrojáky pod názvem .config:

cp /boot/config-`uname -r` .config

Pochopitelně místo config-`uname -r` můžete použít název konfiguráku z jiného jádra, například config-4.15.0-1-amd64

Teď se pustíme do nejsložitější fáze, do konfigurace, kterou je možné přeskočit tehdy, kdy na konfiguraci jádra nic měnit nechcete, pouze toužíte po novější verzi jádra.
Chcete-li konfigurovat, maximalizujte si raději okno terminálu, poté můžete začít:

make menuconfig

Pokud vám nic nechybí, v okně terminálu uvidíte takové krásné menu na modrém pozadí, jinak, jestliže by vám něco chybělo, měla by se zobrazit chybová hláška, podle níž byste se měli řídit, jestliže ji 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

--->       Submenu
---        Prázdné submenu


TIP!
Položky  označené jako EXPERIMENTAL, pakliže o některou z nich nestojíte, můžete klidně zakázat


Seznámím vás s důležitými položkami:
Pozn.: Pokud si s něčím nebudete jisti, nesahejte na to, nechte to tak, jak to je. Téměř u každé položky je k dispozici nápověda (H), jinak UTFG

General setup (obecné nastavení): Tady si můžete nastavit třeba podporu pro swap, kompresní režim kernelu (doporučuji XZ), podpora pro initramfs/initrd, optimalizace kernelu pro velikost, typ alokátoru (SLAB, SLUB, SLOB, 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, nebo raději nehrabat

Enable the block layer: povolit blokovou vrstvu + volby související především s disky (třeba volba I/O plánovače, typů oddílů aj.). 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 (kvůli příliš častým přerušením); dá se zvolit jiná frekvence, ale je potřeba upravit soubor kernel/Kconfig.hz), podpora pro <4GiB RAM (nebo až 64GiB RAM pro 32-bity s PAE), emulace matematického koprocesoru (pro archivní procesory nemající FPU) atd. Zde se dá jednak trochu zmenšit jádro 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á jádro 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, ale to nejhorší už máme opravdu 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, možnosti debuggingu.

Security options: Bezpečnostní udělátka - většina uživatelů nepotřebuje upravovat.

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, pokud nevíte, co činíte.

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>

TIP!
Pokud v tom umíte plavat a znáte svůj stroj dostatečně dobře, je tady ještě jedna fičura - připojte všechna vámi používaná zařízení a před konfigurací spusťte:
make localmodconfig
Tím na základě aktuálně použitých modulů deaktivujete většinu (nikoliv všechny) nepotřebných (ale bohužel někdy i potřebných) položek. Není to příliš dokonalé, takže si celou konfiguraci zkontrolujte.




3. Teď budete odpočívat, zatímco váš stroj zažije horoucí 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.

Rovnou se pustíme do kompilace samotné (nedoporučuje se mít přetaktovaný procesor, během kompilace se mnohem více zahřívá a hrozí zatuhnutí systému či nevratné poškození procesoru):

make -jY deb-pkg LOCALVERSION=-sid KDEB_PKGVERSION=$(make kernelversion)-X

... kde -X je číslo "pokusu", např. -1 (5.12.12-1) a -jY je počet procesů, které se mají při kompilaci vykonávat naráz- toto je vhodné spíše pro víceprocesorové stroje a/nebo stroje s funkčním hyperthreadingem (SMT).
Kdo má jednojádro, může tuto volbu vynechat.


4. Hotovo? Vytvořily se balíky? Zbývá je pouze nainstalovat, pro jistotu oba (hlavičky jsou potřeba např. pro ovladače nVidia). Někdo preferuje klikátko Gdebi, ale když už máme otevřený terminál...

dpkg -i /usr/src/nazev_baliku.deb

Někdy se stane, že se neaktualizuje GRUB, to se dá napravit snadno:

update-grub


No 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í!
Aktualizováno 19. 6. 2021
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Ota Trkola

Romane, díky moc! Až budu mít chvilku, hned vyzkouším.. :)

Roman Horník

Fajn, pak podej hlášení, abych to doladil ;)
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Ota Trkola

Tak jsem zkoušel 2x kompilovat 2.6.35.3 a ani jednou jsem neuspěl. Nenaběhla mi grafika. Nicméně abych mohl zkusit další kompilaci, musím nějak vyčistit systém, páč mi za ty dvě kompilace narostl o 2,5GB a to jsem kernel odinstaloval a odstranil položky v /usr/src. Kam se teda ještě cosi ukládá při kompilaci a instalaci kernelu?

Roman Horník

#4
Co máš za grafiku? Jakej ovladač k ní používáš a odkud? Nejde mi ovladač z balíku nvidia-glx, ale ovladač 256.44 mi funguje normálně.

2.5GiB? Kde jsi to pro Satana splašil ;D? Vždyť i zdrojáky kernelu mají sotva 400MiB. Jinak seznam souborů, který se při instalaci balíku rozbalej a posléze rozutečou po disku, jsou vidět ve vlastnostech balíku např. v Gdebi nebo v Synapticu.
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Ota Trkola

Já mám Ati HD2600XT a používám otevřený ovladač radeon. Ale to zabrané místo je docela problém, páč mi jaksi došlo...:-\ Jinak těžko už to zjistím, když jsem balíky odstranil...

Roman Horník

#6
Můžeš někam pastnout konfigurák svýho kernelu? (bacha, je docela velkej)

S tím místem Ti moc neporadím, ale jestli máš GNOME, koukni se na Baobab- ten Ti ukáže takovej koláč, v němž uvidíš, jak je která složka velká ;).
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Ota Trkola

Konfigurák, kterej jsem použil je tady. Jiank to místo jsem samozřejmě zkoumal přes baobab, ale na nic jsem nepřišel. Ale budu s tím muset cosi učinit, nemám už skoro žádné prázdné místo.

Roman Horník

Co trochu pročistit disk BleachBitem? Jak velkej disk vlastně máš?
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Roman Horník

Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Ota Trkola

BleachBit byl dobrej tip. Uvolnil mi místa víc než bych čekal. / mi slezlo z 5.2GB na 2.6GB, doufám, že mi tam ještě něco  systémových souborů zbylo.. ;D Jinak hlavní problém v místě byl ve složce /root/.local/share/Trash/files, kde byly schovaný hromady pozůstatků po kompilaci.

Roman Horník

Takže jsi to měl nalámaný v koši Roota :)

Já špatný nápady nemám, nebyl jsem k tomu naprogramován  8) :P
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Ota Trkola


Roman Horník

Upravoval, něco jsem tam snad našel, ale radši to zkus, ATInu nemám. Vysekal jsem z toho pár exotických ovladačů, který s největší pravděpodobností nepotřebuješ. Ten předchozí konfigurák jsi nějak u ovladačů modifikoval?
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Ota Trkola

Ne je to tovární konfigurák ze současnýho jádra 2.6.32-5.