Logika systému postavenom na jadre linux. 5 časť
Dnes sa pozrieme ako fungujú v linuxe ovládače hardvéru.
V Linuxe fungujú ovládače (drivery) úplne inak ako vo Windows.
Zatiaľ čo vo Windowse zvyčajne sťahujete inštalačné súbory .exe zo stránok výrobcov, v Linuxe je drvivá väčšina ovládačov zabudovaná priamo v jadre operačného systému (v Linuxovom kerneli).
To je dôvod, prečo Linux po inštalácii na 95 % hardvéru (zvuk, Wi-Fi, procesor, USB, webkamery) funguje okamžite bez toho, aby ste museli čokoľvek inštalovať.
Linux používa takzvané monolitické jadro. Znamená to, že ovládače bežia v najvyššom prioritnom režime priamo s jadrom. Aby však jadro nebolo obrovské a nezaberalo celú operačnú pamäť, ovládače sú napísané ako moduly (Loadable Kernel Modules - LKM).
Dynamické načítanie, keď do počítača zapojíte napríklad USB webkameru, systém (konkrétne podsystém udev) rozpozná ID hardvéru a automaticky za behu načíta príslušný modul (ovládač) do pamäte.
Dynamické uvoľnenie: keď webkameru odpojíte, jadro môže tento modul z pamäte vyhodiť, aby šetrilo miesto.
Súbory týchto modulov majú príponu .ko (kernel object) a globálne sa nachádzajú v adresári /lib/modules/[verzia_jadra]/
V linuxovom svete delíme ovládače do dvoch skupín:
1. Open-source (väčšinou sú súčasť jadra): Vývojári ich napísali s otvoreným kódom, sú schválené komunitou a integrované priamo v Linuxe. (Sem patria ovládače pre Intel grafiky, AMD grafiky, väčšinu sieťových kariet atd.).
2. Proprietárne (Uzavretý kód): Výrobcovia hardvéru nechcú zverejniť zdrojový kód. Tieto ovládače sa nemôžu legálne distribuovať priamo v jadre Linuxu.
RH: typický príklad: Grafické karty NVIDIA. Pre plný herný alebo AI výkon si musíte v systéme jedným klikom doinštalovať oficiálny "uzavretý" ovládač od NVIDIE (cez správcu dodatočných ovládačov vo vašej distribúcii).
Ak chcete vidieť, ako vaše jadro pracuje s ovládačmi, otvorte terminál a vyskúšajte tieto príkazy:
lsmod (List Modules) zobrazí zoznam všetkých ovládačov (modulov), ktoré sú v tejto sekunde aktívne načítané v pamäti RAM.
lspci a lsusb zobrazia všetok hardvér pripojený na základnú dosku (PCI zbernica) alebo cez USB. Ak k nim pridáte prepínač -k (napr. lspci -k), systém vám ukáže, ktorý konkrétny ovládač daný hardvér práve obsluhuje.
modinfo [názov_modulu] zobrazí podrobnosti o konkrétnom ovládači (kto ho napísal, akú verziu má a aké parametre podporuje).
modprobe [názov_modulu] ručne vynúti načítanie ovládača. (Ak ho chcete vypnúť, použijete sudo modprobe -r).
Keďže sme predtým rozoberali /etc, pre ovládače je tam dôležitý priečinok /etc/modprobe.d/. Do neho môžete vytvárať konfiguračné súbory, ak chcete nejakému ovládaču zmeniť predvolené správanie, alebo ho zakázať (tzv. blacklist – napríklad ak nechcete, aby sa načítaval problémový open-source ovládač pre NVIDIU s názvom nouveau).
Z teoretického hľadiska je ovládač (driver) v Linuxe vnímaný ako most alebo prekladateľ medzi softvérovým svetom (jadrom a aplikáciami) a fyzickým svetom (kremíkom, vodičmi a registrami hardvéru).
Bez ovládača je hardvér pre operačný systém len "mŕtvy" kus kovu, pretože procesor nevie, ako s ním komunikovať.
RH: Toto je teoretický rozbor toho, ako táto vrstva abstrakcie v Linuxe funguje.
Jednou z hlavných filozofických zásad Unixu a Linuxu je, že hardvérové zariadenia sa používateľovi a aplikáciám javia ako obyčajné súbory.
Tieto súbory nájdete v adresári /dev/ (zariadenia - devices).
Keď napríklad program na nahrávanie zvuku potrebuje mikrofón, nekomunikuje priamo so zvukovou kartou. Otvorí súbor (napr. /dev/snd/...) a začne z neho čítať dáta presne tak, ako keby čítal textovú knihu z disku.
Úlohou ovládača je premeniť toto "čítanie zo súboru" na reálne elektrické príkazy, ktoré putujú cez základnú dosku do zvukového čipu. Podobne to funguje aj vo Windows ale tam to majú na starosti knižnice (dll) v spolupráci s HAL (HHardware abstraction layer) a kernelom.
Z pohľadu teórie jadra Linux delí všetok hardvér do troch hlavných kategórií, pričom pre každú sa píše iný typ ovládača:
Znakové zariadenia (Character devices): Dáta prenášajú ako prúd bajtov, jeden znak (bajt) po druhom. Nedá sa v nich preskakovať (náhodný prístup).
Príklad: Sériové porty, klávesnice, myši, virtuálne terminály. Nájdete ich v /dev/ (napr. /dev/tty).
Blokové zariadenia (Block devices): Dáta neprenášajú po bajtoch, ale v ucelených blokoch (napr. 512 bajtov alebo 4 KB) a podporujú náhodný prístup (môžete skočiť na ľubovoľné miesto).
Príklady: Pevné disky, SSD, USB kľúče. V /dev/ ich reprezentujú napr. /dev/sda alebo /dev/nvme0n1.
Sieťové rozhrania (Network interfaces): Sú výnimkou z pravidla "všetko je súbor". Nekomunikuje sa s nimi cez adresár /dev, ale cez sieťové sockety a balíky. Starajú sa o smerovanie paketov.
Príklady: Ethernetová karta (eth0), Wi-Fi (wlan0).
Ak by sme sa pozreli do zdrojového kódu linuxového ovládača (napísaného v jazyku C), zistili by sme, že sa skladá z troch kľúčových mechanizmov.
1. Tabuľka operácií (file_operations), čo je zoznam funkcií, ktoré ovládač poskytuje jadru. Hovorí: "Ak niekto s mojím zariadením urobí akciu X, spusti moju funkciu Y."
2. Obsluha prerušení (Interrupt Service Routine - ISR), Bolo by neefektívne, keby CPU neustále kontroloval, či sieťová karta už neprijala nejaké dáta (tzv. polling). Instead, hardvér využíva prerušenia (interrupts).
3. Správa pamäte a DMA (Direct Memory Access). To znamená, že ovládač prikáže hardvéru (napr. disku), aby kopíroval dáta priamo do operačnej pamäte RAM bez toho, aby musel každý megabajt pretekať cez samotný procesor. CPU iba dostane oznámenie, keď je prenos hotový.
Vďaka tejto architektúre vývojári aplikácií nemusia vedieť, či zapisujú dáta na SSD, alebo na staré HDD.
Oni komunikujú s jadrom prostredníctvom univerzálnych príkazov a o unikátne vlastnosti konkrétneho zariadenia sa postará práve ovládač.
Neskôr sa môžeme pozrieť ako funguje izolácia pamäte, aby ovládač nezhodil celý systém, alebo ako sa líši beh ovládačov v používateľskom priestore (User space) oproti priestoru jadra (Kernel space).

Pre pridávanie komentárov sa musíte prihlásiť.