Ne každý uživatel operačního systému Linux musí být zákonitě programátorem, administrátorem či jinak světem IT poznamenaným jedincem. Spousta lidí počítač používá k plné spokojenosti „jen“ jako nástroj pro běžnou práci s poštou, internetem, kancelářským softwarem, apod. Co se děje kdesi v útrobách jejich systému, je obvykle nezajímá. Pokud jste se tedy až doposud při práci s operačním systémem Linux nesetkali s pojmem „modul“, patříte patrně právě k této skupině uživatelů a všechno ve vaší stávající distribuci funguje tzv. „out of the box“. K tomuto stavu vám nezbývá než pogratulovat a popřát vám mnoho dalších spokojených dní s vaším počítačem. Nicméně člověk je odjakživa tvor zkoumavý a dle hesla „kdo je připraven, není překvapen“ neuškodí občas systému „kouknout pod kapotu“.
Fráze out of the box se používá v případě softwaru či technologie, která funguje „sama od sebe“ ihned po zprovoznění či instalaci. Nevyžaduje tedy žádné dodatečné nastavování či ladění parametrů. Je to mnohdy ideální stav, který je obvykle žádoucí. Obrat má nastínit, že produkt nepotřebuje krabici (box) s manuálem či návodem, protože ten prostě není potřeba.
Všechna ta klikátka, hejblátka a blikátka, jejichž snímky se obvykle častují uživatelé v internetových diskuzích, jakýkoliv software, který používáme, to vše by bylo k ničemu, kdyby pod nablýskaným povrchem netepalo srdce reprezentované v našem případě jádrem operačního systému, které naleznete pod spoustou pseudonymů Linuxem počínaje, kernelem konče.
Připomínáme, že v LinuxEXPRESu zkracujeme název operačního systému GNU/Linux na Linux. Jsme si vědomi toho, že „Linux“ je název pouhého jádra (kernelu); ovšem označení „Linux“ pro celý operační systém je zažitější a srozumitelnější.
Jádra dělíme podle jejich struktury na nemodulární (veškeré ovladače potřebné pro příslušný stroj jsou součástí jádra) a modulární (jádro samotné obsahuje jen minimum potřebných ovladačů a zbytek je dostupný přes tzv. moduly). V souvislosti s neustále se rozšiřující databází podporovaného hardwaru, snahou ulehčit uživatelům soužití s Linuxem, jednoduchostí správy atd. se v současnosti postupně od jader nemodulárních přechází k jejich modulární variantě. Jádro pak tvoří jen nejnutnější množina podpůrných prostředků a veškeré zbývající ovladače potřebné pro běh systému si jádro nahraje ve formě zásuvných modulů v závislosti na přítomném hardwaru. Výhodou tohoto způsobu je značná volnost při práci s ovladači pro jednotlivá zařízení, odstranění nutnosti restartovat systém při přidání či odebrání zařízení apod.
V Linuxu se pro ovladače spíše používá pojem modul. Je to otázka konvence a zažité terminologie.
Naprostá většina uživatelů po instalaci Linuxu obvykle zůstane u tzv. distribučního jádra (generic) a s výjimkou automatických upgradů zůstává jejich jádro beze změn. Občas je ovšem třeba jádro systému vyladit, popř. upravit pro běh na nestandardním hardwaru. Pak přichází na řadu kolotoč laborování s konfigurací jádra, rekompilací a následným testováním funkčnosti. Na téma, co vše lze přidat či naopak ubrat z jádra Linuxu, se vedou „svaté války“ a jeho obsáhlost výrazně překračuje rozsah tohoto článku. Zájemcům o další informace ohledně kompilace jádra proto doporučuji odkazy v závěru tohoto článku. My zůstaneme u problematiky spojené s prací s moduly u běžných distribučních jader.
Vzhůru do boje – příkazů se nelekejme, na množství dostupných modulů nehleďme. Kde tedy začít? Nejprve zjistíme, zda vůbec nějaké jádro v systému máme. Troufám si tvrdit, že 5 ze 4 uživatelů Linuxu, kterým jejich systém nastartoval a zvesela na ně poblikává kurzorem v přihlašovací obrazovce, nějaké jádro určitě má. Jaké, to zjistíme v terminálu po zadání příkazu uname -a:
myshak@tinky:~$ uname -a Linux tinky 2.6.15-28-686 #1 SMP PREEMPT Thu Feb 1 16:14:07 UTC 2007 i686 GNU/Linux
Ten nám sdělí vyčerpávající informace o jádru, nad nímž je vysochán náš operační systém. Výpis, který vidíte před sebou, vás informuje o názvu jádra (Linux), jménu vašeho počítače (tinky), release (vydání) jádra (2.6.15-28-686), verzi jádra (#1 SMP PREEMPT Thu Feb 1 16:14:07 UTC 2007), verzi hardware (i686) a operačním systému (GNU/Linux).
Poté, co jsme se dopátrali k informaci o jádru, můžeme přistoupit ke zkoumání modulů, které si naše jádro zavedlo s sebou. Opět využijeme služeb příkazového řádku a pomocí příkazu lsmod zjistíme kýženou informaci:
myshak@tinky:~$ lsmod Module Size Used by isofs 38496 0 udf 94756 0 vfat 14496 0 fat 55548 1 vfat
Mimo to, že nám příkaz lsmod zobrazí seznam všech modulů zavedených v jádru, je užitečný i tím, že vypisuje vzájemné závislosti mezi jednotlivými moduly. Ve sloupci se záhlavím Used by v předchozím výpisu vidíme, že např. modul vfat využívá služeb modulu fat a tudíž je na jeho přítomnosti závislý. K čemu tuto informaci potřebujeme, si ukážeme za chvíli v souvislosti s příkazy insmod a rmmod.
Představme si, že řešíme problém s nefunkčností některého z kusů hardwaru přítomného v našem PC a právě jsme zjistili pomocí příkazu lsmod, že v jádru není zaveden příslušný modul. Nepodléháme panice – máme totiž k dispozici příkaz modprobe, jehož parametr -l nám poskytne podrobné informace o tom, které moduly jsme schopni do jádra zavést, a příkaz modinfo, který nám podá podrobnější informace o modulu, který nás zajímá. Druhý ze zmíněných příkazů využijeme, pokud si nejsme jistí, zda modul, který jsme nalezli, je skutečně tím, po kterém pátráme. Výsledkem tohoto příkazu je podrobný popis hledaného modulu:
myshak@tinky:~$ modinfo pl2303 filename: /lib/modules/.../pl2303.ko description: Profilic PL2303 USB driver licence: GPL vermagic: 2.6.15-28-686 SMP gcc-4.0 depends: usbcore,usbserial
Pokud máme štěstí a v záplavě informací, které na nás vychrlí příkaz modprobe -l, nalezneme kýžený ovladač, přistoupíme k vlastnímu zavedení modulu. V případě, že hledaný modul nenajdeme, začneme se pídit po informacích o našem kusu hardwaru, popř. po zdrojových kódech k ovladači a po zkompilování potřebného modulu se taktéž vrhneme na zavedení modulu do jádra.
Jaderné moduly lze zavést dvojím způsobem. Buďto pomocí příkazu insmod, nebo sofistikovanějším způsobem pomocí již zmíněného příkazu modprobe. Ačkoliv se použití těchto dvou příkazů příliš neliší, jejich činnost je v mnohém rozdílná. Pokud zadáme v terminálu příkaz insmod sk98lin, systém se pokusí najít modul sk98lin.ko a zavést jej do jádra. Nic víc, nic míň. Na první pohled by se mohlo zdát, že je vše v pořádku. Bohužel v případě, že zavedený modul nemá splněné závislosti (viz předchozí případ s moduly fat a vfat), budeme muset postupně do jádra pomocí příkazu insmod zavádět i ostatní moduly, které nám pro splnění zmíněných závislostí chybí. Vzhledem k pracnosti spojené s vyhledáváním vzájemných závislostí a posloupnosti, ve které je jednotlivé moduly nutné do jádra zavádět, se obecně místo příkazu ismod používá jeho sofistikovanější varianta modprobe.
Pokud analogicky s předchozím případem použijeme pro zavedení modulu sk98lin.ko příkaz modprobe sk98lin, dojde nejprve k prohledání souborů modprobe.conf a modules.dep a teprve poté se podle parametrů v těchto souborech automaticky zavádějí všechny potřebné moduly. Jak je patrné, příkaz modprobe nám tedy ušetří spoustu práce při řešení závislostí mezi moduly.
Občas dojde při detekci některého z kusů hardwaru k situaci, kdy systém do jádra zavede ovladač, který my ovšem chceme nahradit jiným, popř. jej z jakéhokoliv důvodu z jádra zcela vypustit. V tom případě je třeba najít v našem systému soubor /etc/modprobe.d/blacklist a vložit do něj řádky, pomocí nichž nežádoucím modulům zakážeme zavádění do jádra:
myshak@tinky~$: cat /etc/modprobe.d/blacklist #zakážeme Ipv6 protokol blacklist net-pf-10 blacklist ipv6
Po uložení souboru a restartu počítače bychom ve výše uvedeném případě dvěma řádky v blacklistu vypnuli podporu pro IPv6 protokol.
Vzhledem k tomu, že jsme si ukázali, jak moduly do jádra zavést, měli bychom si ukázat i jak dostat modul zase z jádra pryč. Pro tento účel máme k dispozici další z nástrojů modutils, příkaz rmmod. Jeho funkce je velmi prostá – po zadání příkazu rmmod se jménem modulu jako parametrem se příslušný modul (pakliže na něm není závislý žádný jiný modul zavedený v jádře) odstraní z jádra. V případě, že na modulu, který se snažíme odstranit z jádra, je závislý jiný modul, musíme nejprve vyřešit závislosti (tzn. odstranit závislé moduly) a až poté můžeme modul odstranit.
Problematika práce s moduly a jádrem operačního systému je samozřejmě podstatně obsáhlejší a není v možnostech tohoto krátkého přehledu postihnout všechny informace, které se těchto témat týkají. Proto pro podrobnější studium doporučuji prozkoumat manuálové stránky ke zmíněným příkazům, popř. se poohlédnout po nepřeberném množství informací na internetu.
Poznámky uvedl šéfredaktor.