GNU/Linux >> Znalost Linux >  >> Linux

Jak sestavit linuxové jádro v 21. století

V oblasti výpočetní techniky je jádro nízkoúrovňový software, který zajišťuje komunikaci s hardwarem a obecnou koordinaci systému. Kromě počátečního firmwaru zabudovaného do základní desky vašeho počítače, když počítač spustíte, jádro poskytuje povědomí o tom, že má pevný disk a obrazovku, klávesnici a síťovou kartu. Úkolem jádra je také zajistit, aby byl každé komponentě věnován stejný čas (více či méně), aby vaše grafika, zvuk a souborový systém a síť fungovaly hladce, i když běží souběžně.

Hledání hardwarové podpory však pokračuje, protože čím více hardwaru se uvolní, tím více věcí musí jádro do svého kódu přijmout, aby hardware fungoval podle očekávání. Je těžké získat přesná čísla, ale linuxové jádro rozhodně patří mezi nejlepší jádra z hlediska hardwarové kompatibility. Linux provozuje nespočet počítačů a mobilních telefonů, desky embedded system on a chip (SoC) pro amatérské a průmyslové použití, karty RAID, šicí stroje a mnoho dalšího.

Související obsah

Ve 20. století (a dokonce i v prvních letech 21. století) nebylo pro uživatele Linuxu nerozumné očekávat, že když si koupí zcela nový kus hardwaru, bude si muset stáhnout nejnovější zdrojový kód jádra, zkompilujte a nainstalujte, aby mohli získat podporu pro zařízení. V poslední době byste však jen těžko hledali uživatele Linuxu, který si kompiluje vlastní jádro kromě zábavy nebo zisku prostřednictvím vysoce specializovaného vlastního hardwaru. V dnešní době obecně není nutné kompilovat linuxové jádro sami.

Zde jsou důvody proč, plus rychlý návod, jak zkompilovat jádro, když to potřebujete.

Aktualizujte své stávající jádro

Ať už máte zbrusu nový notebook se skvělou novou grafickou kartou nebo WiFi čipovou sadou, nebo jste si právě přinesli domů novou tiskárnu, váš operační systém (nazývaný buď GNU+Linux nebo jen Linux, což je také název jádra ) potřebuje ovladač pro otevření komunikačních kanálů pro tuto novou komponentu (grafická karta, WiFi čip, tiskárna nebo cokoli jiného). Když připojíte nové zařízení a váš počítač se objeví, může to být někdy klamné uznat to. Ale nenechte se tím zmást. Někdy to je vše, co potřebujete, ale jindy váš operační systém používá pouze obecné protokoly k testování připojeného zařízení.

Váš počítač může být například schopen identifikovat vaši novou síťovou tiskárnu, ale někdy je to jen proto, že síťová karta v tiskárně je naprogramována tak, aby se identifikovala v síti, aby mohla získat adresu DHCP. Nemusí to nutně znamenat, že váš počítač ví, jaké pokyny má odeslat do tiskárny, aby vytvořila stránku vytištěného textu. Ve skutečnosti můžete namítnout, že počítač vlastně ani „neví“, že zařízení je tiskárna; může pouze zobrazovat, že se v síti nachází zařízení na konkrétní adrese a zařízení se identifikuje řadou znaků p-r-i-n-t-e-r . Konvence lidského jazyka jsou pro počítač bezvýznamné; potřebuje ovladač.

Vývojáři jádra, výrobci hardwaru, technici podpory a fandové všichni vědí, že se neustále uvolňuje nový hardware. Mnoho z nich přispívá ovladači, předloženými přímo vývojovému týmu jádra k zahrnutí do Linuxu. Například ovladače grafických karet Nvidia jsou často zapsány do modulu jádra Nouveau, a protože karty Nvidia jsou běžné, kód je obvykle součástí jakéhokoli jádra distribuovaného pro obecné použití (jako je jádro, které získáte, když si stáhnete Fedoru nebo Ubuntu. Kde Nvidia je méně běžná, například ve vestavěných systémech je modul Nouveau obvykle vyloučen. Podobné moduly existují pro mnoho dalších zařízení:tiskárny využívají Foomatic a CUPS, bezdrátové karty mají moduly b43, ath9k, wl a tak dále.

Distribuce mají tendenci zahrnout do sestavení linuxového jádra co nejvíce, protože chtějí, abyste mohli připojit zařízení a začít je používat okamžitě, bez nutnosti instalace ovladače. Z velké části se tak děje, zvláště nyní, když mnoho výrobců zařízení nyní financuje vývoj ovladačů pro Linux pro hardware, který prodávají, a odesílá tyto ovladače přímo týmu jádra ke všeobecné distribuci.

Někdy však používáte jádro, které jste nainstalovali před šesti měsíci, se vzrušujícím novým zařízením, které se právě před týdnem dostalo do obchodů. V takovém případě vaše jádro nemusí mít ovladač pro toto zařízení. Dobrou zprávou je, že velmi často může ovladač pro toto zařízení existovat ve velmi nedávné edici jádra, což znamená, že vše, co musíte udělat, je aktualizovat to, co používáte.

Obecně se to provádí prostřednictvím správce balíčků. Například na RHEL, CentOS a Fedora:

$ sudo dnf update kernel

Na Debianu a Ubuntu nejprve získejte aktuální verzi jádra:

$ uname -r
4.4.186

Hledat novější verze:

$ sudo apt update
$ sudo apt search linux-image

Nainstalujte nejnovější verzi, kterou najdete. V tomto příkladu je nejnovější dostupná verze 5.2.4:

$ sudo apt install linux-image-5.2.4

Po aktualizaci jádra musíte restartovat (pokud nepoužíváte kpatch nebo kgraft). Pak, pokud je ovladač zařízení, který potřebujete, v nejnovějším jádře, bude váš hardware fungovat podle očekávání.

Instalace modulu jádra

Někdy distribuce neočekává, že její uživatelé často používají zařízení (nebo alespoň ne natolik, aby ovladač zařízení musel být v linuxovém jádře). Linux využívá modulární přístup k ovladačům, takže distribuce mohou dodávat samostatné balíčky ovladačů, které lze načíst jádrem, i když ovladač není zkompilován do samotného jádra. To je užitečné, i když se to může zkomplikovat, když ovladač není součástí jádra, ale je potřeba během bootování, nebo když se jádro aktualizuje z modulárního ovladače. První problém je vyřešen pomocí initrd (počáteční RAM disk) a je mimo rozsah tohoto článku a druhý je řešen systémem zvaným kmod .

Systém kmod zajišťuje, že když se aktualizuje jádro, aktualizují se také všechny modulární ovladače nainstalované vedle něj. Pokud nainstalujete ovladač ručně, přijdete o automatizaci, kterou kmod poskytuje, takže byste se měli rozhodnout pro balíček kmod, kdykoli je k dispozici. Například, zatímco ovladače Nvidia jsou zabudovány do jádra jako ovladač Nouveau, oficiální ovladače Nvidia jsou distribuovány pouze společností Nvidia. Ovladače značky Nvidia můžete nainstalovat ručně tak, že přejdete na webovou stránku a stáhnete soubor .run a spustíte skript shellu, který poskytuje, ale stejný proces musíte zopakovat po instalaci nového jádra, protože správci balíčků nic neříká, že jste manuálně nainstalovali ovladač jádra. Protože Nvidia řídí vaši grafiku, ruční aktualizace ovladače Nvidia obvykle znamená, že musíte provést aktualizaci z terminálu, protože bez funkčního grafického ovladače nemáte žádnou grafiku.

Pokud však nainstalujete ovladače Nvidia jako balíček kmod, aktualizace jádra aktualizuje také ovladač Nvidia. Na Fedoře a souvisejících:

$ sudo dnf install kmod-nvidia

V Debianu a souvisejících:

$ sudo apt update
$ sudo apt install nvidia-kernel-common nvidia-kernel-dkms nvidia-glx nvidia-xconfig nvidia-settings nvidia-vdpau-driver vdpau-va-driver

Toto je pouze příklad, ale pokud instalujete ovladače Nvidia v reálném životě, musíte také zakázat ovladač Nouveau. Nejlepší kroky naleznete v dokumentaci vaší distribuce.

Stáhnout a nainstalovat ovladač

Ne vše je zahrnuto v jádře a ne vše ostatní je k dispozici jako modul jádra. V některých případech si musíte stáhnout speciální ovladač napsaný a přibalený dodavatelem hardwaru a jindy máte ke konfiguraci možností ovladače ovladač, ale ne rozhraní.

Dva běžné příklady jsou tiskárny HP a ilustrační tablety Wacom. Pokud si pořídíte tiskárnu HP, pravděpodobně máte obecné ovladače, které mohou s vaší tiskárnou komunikovat. Možná budete moci i tisknout. Obecný ovladač však nemusí být schopen poskytovat specializované možnosti specifické pro váš model, jako je oboustranný tisk, kompletace, výběr zásobníků papíru a tak dále. HPLIP (systém HP Linux Imaging and Printing) poskytuje možnosti pro správu úloh, úpravu možností tisku, výběr zásobníků papíru tam, kde je to možné, a tak dále.

HPLIP je obvykle součástí balíčků; stačí vyhledat "hplip."

Podobně jsou ovladače pro tablety Wacom, přední ilustrační tablet pro digitální umělce, obvykle součástí vašeho jádra, ale možnosti jemného doladění nastavení, jako je citlivost na tlak a funkčnost tlačítek, jsou dostupné pouze prostřednictvím grafického ovládacího panelu, který je standardně součástí GNOME, ale lze jej nainstalovat jako extra balíček kde-config-tablet v KDE.

Pravděpodobně existují některé okrajové případy, které nemají ovladače v jádře, ale nabízejí kmod verze modulů ovladačů jako soubor RPM nebo DEB, který si můžete stáhnout a nainstalovat prostřednictvím správce balíčků.

Oprava a kompilace vlastního jádra

Dokonce i ve futuristické utopii, kterou je 21. století, existují prodejci, kteří nerozumí open source natolik, aby poskytovali instalovatelné ovladače. Někdy takové společnosti poskytují zdrojový kód ovladače, ale očekávají, že si kód stáhnete, opravíte jádro, zkompilujete a nainstalujete ručně.

Tento druh distribučního modelu má stejné nevýhody jako instalace zabalených ovladačů mimo systém kmod:aktualizace vašeho jádra přeruší ovladač, protože musí být znovu integrován do vašeho jádra ručně pokaždé, když je jádro vyměněno za nové.

To se naštěstí stalo vzácností, protože tým linuxového jádra odvedl skvělou práci, když nahlas prosil společnosti, aby s nimi komunikovaly, a protože společnosti konečně akceptují, že open source v brzké době nezmizí. Stále však existují nová nebo hyperspecializovaná zařízení, která poskytují pouze záplaty jádra.

Oficiálně existují preference specifické pro distribuci, jak byste měli kompilovat jádro, aby se váš správce balíčků zapojil do upgradu tak důležité části vašeho systému. Existuje příliš mnoho správců balíčků na pokrytí každého; zde je příklad toho, co se děje v zákulisí, když používáte nástroje jako rpmdev na Fedoře nebo sestavení-základní a devscripts v Debianu.

Nejprve jako obvykle zjistěte, kterou verzi jádra používáte:

$ uname -r

Ve většině případů je bezpečné upgradovat jádro, pokud jste to ještě neudělali. Koneckonců je možné, že váš problém bude vyřešen v nejnovější verzi. Pokud jste to zkusili a nefungovalo to, měli byste si stáhnout zdrojový kód jádra, které používáte. Většina distribucí k tomu poskytuje speciální příkaz, ale chcete-li to provést ručně, můžete najít zdrojový kód na kernel.org.

Musíte si také stáhnout jakoukoli opravu, kterou potřebujete pro své jádro. Někdy jsou tyto záplaty specifické pro vydání jádra, takže vybírejte pečlivě.

Je tradiční, nebo alespoň to bylo v době, kdy lidé pravidelně kompilovali svá vlastní jádra, umisťovat zdrojový kód a záplaty do /usr/src/linux .

Podle potřeby zrušte archiv zdrojového kódu jádra a opravných souborů:

$ cd /usr/src/linux
$ bzip2 --decompress linux-5.2.4.tar.bz2
$ cd  linux-5.2.4
$ bzip2 -d ../patch*bz2

Soubor opravy může obsahovat pokyny, jak provést opravu, ale často jsou navrženy tak, aby byly spouštěny z nejvyšší úrovně vašeho stromu:

$ patch -p1 < patch*example.patch

Po záplatě kódu jádra můžete použít svou starou konfiguraci k přípravě záplatované konfigurace jádra:

$ make oldconfig

Nástroj make oldconfig Příkaz slouží ke dvěma účelům:zdědí konfiguraci vašeho aktuálního jádra a umožňuje vám konfigurovat nové možnosti zavedené záplatou.

Možná budete muset spustit make menuconfig příkaz, který spustí seznam možných voleb pro vaše nové jádro založený na ncurses. Nabídka může být ohromující, ale protože začíná vaší starou konfigurací jako základem, můžete se podívat do nabídky a zakázat moduly pro hardware, o kterém víte, že ho nemáte a neočekáváte, že jej budete potřebovat. Alternativně, pokud víte, že máte nějaký hardware a vidíte, že není součástí vaší aktuální konfigurace, můžete se rozhodnout jej zabudovat, buď jako modul, nebo přímo do jádra. Teoreticky to není nutné, protože vaše současné jádro se k vám pravděpodobně chovalo dobře, až na chybějící záplatu a záplata, kterou jste použili, pravděpodobně aktivovala všechny potřebné možnosti vyžadované jakýmkoli zařízením, které vás k záplatě jádra přimělo. .

Dále zkompilujte jádro a jeho moduly:

$ make bzImage
$ make modules

Zůstane vám soubor s názvem vmlinuz , což je komprimovaná verze vašeho zaváděcího jádra. Uložte starou verzi a vložte novou do /boot adresář:

$ sudo mv /boot/vmlinuz /boot/vmlinuz.nopatch
$ sudo cat arch/x86_64/boot/bzImage > /boot/vmlinuz
$ sudo mv /boot/System.map /boot/System.map.stock
$ sudo cp System.map /boot/System.map

Zatím jste opravili a postavili jádro a jeho moduly, nainstalovali jste jádro, ale nenainstalovali jste žádné moduly. To je poslední krok sestavení:

$ sudo make modules_install

Nové jádro je na místě a jeho moduly jsou nainstalovány.

Posledním krokem je aktualizace zavaděče, aby část vašeho počítače, která se načte před jádrem, věděla, kde má Linux najít. Zavaděč GRUB tento proces poměrně zjednodušuje:

$ sudo grub2-mkconfig

Kompilace v reálném světě

Samozřejmě, že tyto ruční příkazy nyní nikdo nespouští. Místo toho se podívejte do své distribuce, kde najdete pokyny k úpravě jádra pomocí sady nástrojů pro vývojáře, kterou používají správci vaší distribuce. Tato sada nástrojů pravděpodobně vytvoří nový instalovatelný balíček se všemi záplatami, upozorní správce balíčků na aktualizaci a aktualizuje za vás váš bootloader.

Jádra

Operační systémy a jádra jsou záhadné věci, ale k pochopení toho, na jakých komponentách jsou postaveny, není potřeba mnoho. Až příště získáte nějakou technologii, která na Linuxu zřejmě nefunguje, zhluboka se nadechněte, prozkoumejte dostupnost ovladačů a jděte cestou nejmenšího odporu. Linux je jednodušší než kdy jindy – a to včetně jádra.


Linux
  1. Jak vyčistit mezipaměti používané linuxovým jádrem

  2. Jak linuxové jádro určuje pořadí volání __init?

  3. Jak je do linuxového jádra přidána nová hardwarová podpora?

  1. Jak se Linux dostal k sálovému počítači

  2. Jak mohu rezervovat blok paměti z jádra Linuxu?

  3. Jak najdu model hardwaru v Linuxu?

  1. Životní cyklus testování linuxového jádra

  2. Jak upgradovat jádro na ploše Linuxu

  3. Linux – Jak najít implementace systémových volání jádra Linuxu?