Úvod do vývoje ovladačů
Co asi tak může vést vývojáře aplikací k tomu, aby si zkusil napsat vlastní ovladač zařízení? Nuda? To možná, ale spíše je to touha poznat, jak funguje jádro systému Linux, co se ”tam vevnitř” vlastně děje. Nebo také prostě fakt, že mu na stole přistála nová počítačová periférie s tím, že je potřeba, aby pro ni napsal podporu do Linuxu. Vždyť je přece programátor.
Psát ovladače není žádná legrace. Vývojář ovladačů zařízení pro OS Linux musí znát spoustu detailů o principech fungování jádra a do detailu rozumět ovládání daného kusu HW. Na druhou stranu je to svět, kde se lze naučit spoustu zajímavého, a pro jednoduchá zařízení zvládne s trochou cviku napsat ovladač i průměrně zdatný programátor.
Následující text by měl přispět k tomu, aby váš vstup do světa vývoje ovladačů zařízení pro systém Linux byl snažší a snad i zábavný.
Dozvíte se, co to vlastně ovladače zařízení jsou, jak k nim přistupovat z aplikace, vymezíme jim jejich životní prostor mezi aplikací, jádrem a zařízením a naučíme se je kompilovat. Postupně s přibývajícími znalostmi si vybudujeme kostru ovladače, kterou pak budete moci využít jako šablonu pro ovladač konkrétního zařízení.
Krátce se zmíníme i problémech souvisejících s měřením času a časováním úloh v ovladači. Také se dotkneme problematiky souběhu více programů a kritických sekcí.
Co nás čeká ...
Ovladače zařízení
Úplně na začátku je bezesporu vhodné si samotný pojem ovladače zařízení (device drivers) nejprve srozumitelně definovat.
Zavádění ovladačů
V systému Linux je ovladač buď je přímo zakompilován do jádra jako jeho nedílná součást jádra nebo je zkompilován jako samostatný soubor nazývaný modul jádraPro účely tohoto textu budou pojmy modul jádra a ovladač zařízení zaměnitelné. Ve skutečnosti ovšem může jeden modul obsahovat kód více ovladačů nebo může do jádra přidávat kód, který s řízením zařízení vůbec nesouvisí - např. modul souborového systému. (kernel module).
Soubory zařízení
Nyní si něco řekneme o tom, jak aplikace v uživatelském prostoru (user space) přistupují k ovladači (modulu) nějakého zařízení.
Kostra ovladače
V této části si krok za krokem sestavíme základní kostru modulu jádra pro znaková zařízení, kterému budeme říkat dskel (= driver’s skeleton). Tento jednoduchý modul pak může sloužit jako šablona pro vývoj jakéhokoliv jiného modulu.
Výpisy z jádra
Výpisy z jádra slouží k informování uživatele o událostech probíhajících v jádře. Chovají se velmi podobně jako standardní výstup, byť s drobnými odlišnostmi. Díky tomu mohou být snadno využity i pro ladění kódu ovladačů.