|
|
V tomto příspěvku uvedu základy nasazení jaderných modulů v Linuxu. Naznačím, proč se někdy vyplatí oželet zařízení než používat nesvobodné ovladače. Ale na úplný začátek zdůrazním význam dostupnosti zdrojových kódů.
API vs. ABI
Rozhraní API (application programming interface) je smluvená funkcionalita a konvence upravující označování této funkcionality v zdrojovém kódu. Rozhraní ABI (application binary interface) je úmluva, jakým způsobem se konkrétně realizuje API ne strojové/assemblerové úrovni. Binární spustitelné soubory vyžadují zakonzervované ABI ze strany podpůrného softwaru. Pro kompilaci potřebujume pouze dostupnust použitých API, možnost kompilace nových verzí nepodmiňuje zakonzervování ABI.
Příklad : Smyšlená aplikace FictionStat na zpracování změřených dat poskytuje API, kdy ve struktuře/třídě mereni uchovává zpracovane hodnoty a kdy v mereni.prumer uchovává průměr zmeřených hodnot. Podle API jsou jednotlivá mereni uspořádána podle času pořízení do pole vsechna_mereni. Váš program čte průměr druhého měření z pole všech měření (tj. vsechna_mereni[2].prumer). Kompilátor při překladu zjistí, že velikost typu mereni je čtyřicet bytů a že hodnota prumer je umístěna čtyři byty od začátku struktury mereni. Kompilátor adresu vsechna_mereni[2].prumer tedy natvrdo přeloží do binárního kódu jako “hodnota čtyřicetčtyři bytů od začátku pole vsechna_mereni“. S novou verzí FictionStat přibyla nová funkcionalita a velikost typu mereni se zvětší např. na sedmdesát bytů. Vaše zkomilovaná aplikace je pak nepoužitelná, protože čtyřicetčtyři bytů od začátku pole vsechna_mereni nyní leží např. nově do API přidaný čtvrtý statistický moment prvního měření. V případě dostupných zdrojových kódů vaší aplikace stačí získat ještě zdrojové kódy nové verze FictionStat a provést kompilaci. Při kompilaci se inkludují definice typů ze zdrojových kódů FictionStat a kompilátor zná správnou velikost typů. Postup bezproblémově funguje, protože se použitá část API nezměnila. (Zkompilovaná nová verze populárních aplikací však pravděpodobně bude již dostupná prostřednictvím repozitáře distribuce a balíčkovací systém pohlídá kompatibilitu veškerého instalovaného softwaru, takže uživatel nemusí složitě zjišťovat softwarové závislosti a kompilovat.)
Dalšími oblastmi ABI úprav jsou způsob volání funkcí a předávání hodnot, name mangling, endian, kódování řetězců znaků, číselné reprezentace pojmenovaných parametrů…
Příklady API a ABI
Známým API operačních systémů je POSIX (viz článek Historie UNIXu). Toto API více méně podporují všechny unix-like systémy. Proto zdrojový kód pracující s POSIX půjde přeložit stejně dobře na Linuxu, FreeBSD, Solarisu… Tyto platformy však nezaručují vzájemnou binární kompatibilitu (mají odlišná ABI) a proto zkompilované spustitelné soubory již nejsou přenositelné mezi zmíněnými systémy.
Linux standard base (LSB) definuje některá ABI pro linuxové distribuce.
Jádro poskytuje několik ustálených API např. pro psaní ovladačů a jiných jaderných modulů (viz níže). Vývojáři však neusilují o ustálené ABI jádra (tzv. kernel ABI, kABI).
Při známém ABI jiného operačního systému lze bez problémů problém na Linuxu toto jiné ABI poskytovat a spouštět aplikace bez emulace jako na jejich nativní platformě. Konkrétně Linux v kombinaci s Wine poskytuje binární rozhraní zvolené verze operačního systému MS Windows a umožňuje tím nativní běh aplikací pro Windows pod Linuxem. Dokonalému fungování Wine brání jen utajování podrobné dokumentace ABI Windows ze strany výrobce. (viz článek Kompatibilita Linuxu a Windows)
Technické řešení ovladačů
Linuxový desktop pracuje výhradně ve dvou dvou režimech procesoru. V privilegovaném režimu se vykonává veškerý kód jádra a ostatní softwarové vybavení (userland) disponuje pouze neprivilegovaným režimem procesoru. (Při některých velmi výjimečných způsobech nasazení jádra, jako jsou některá virtualizační řešení, toto neplatí.) Například běžné procesory x86 zvládají čtyři režimy (protection rings) značené RING0, RING1, RING2, RING3; jádro běží v RING0 a vše ostatní v RING3. Popsaná architektura operačního systému představuje vůbec nejprimitivnější verzi operačního systému s tzv. monolitickým jádrem.
V klasickém monolitickém jádře se přidání nových funkcí do jádra provádí pouze překompilováním zdrojového kódu jádra se začleněným novým kódem, dále musíme restartovat počítač a nechat zavést nové jádro. Toto řešení pro Linux absolutně nedostačuje. Proto jádro obsahuje speciální rozhraní pro zprovoznění nového kódu v jádře za běhu; pro první nepřesnou představu si lze situaci představit analogicky jako spouštění běžných procesů v RING0.
Upozornění : Pro plnění úkolů ovladače (ovládání hardwaru) nestačí možnosti režimu RING3 a proto ovladače vyžadují “jaderný” RING0. Režimy procesoru jsou stavem hardwaru nijak nesouvisejícím s root uživatelem a uživatelskými právy!
Jaderný kód lze stejně dobře zakompilovat natvrdo do jádra jako zkompilovat do samostatného jaderného modulu, který se nahrává podle potřeby do jádra. (Jediný principiální rozdíl je, že jaderný modul obsahuje kód pro své uvolnění (např. kvůli memory leaku).) V případě dynamického zavedení jaderného modulu musí dojít k “dynamickému linkování” s kódem jádra, za tímto účelem se exportují z jádra všechny důležité symboly. V praxi by mohly být jaderné moduly zneužity k obcházení licence jádra, protože nahráním modulu se de facto součástí jádra může stát kód “porušující” licenci jádra. Makra exportující symboly z jádra proto definují různé licence symbolů (např. makra EXPORT_SYMBOL, EXPORT_SYMBOL_GPL, EXPORT_SYMBOL_GPL_FUTURE), jaderný “dynamický linker” zjistí licenci jaderného modulu a v případě pokusu o porušení copyleftu symbol jednoduše nezpřístupní. Toto opatření svazuje ruce ovladačům s nevhodnou licencí. Další komplikace (závislosti modulů, aliasy…) si řeší distribuce automaticky.
Nedostatečná podpora
Výrobci hardwaru často “hrají na sebe” a cíleně brání komunitě v poskytování kvalitní podpory. Metody “znesvobodnění” ovladače jsou například :
Existují určitá pravidla identifikace připojeného hardwaru, proto jádro může obvykle přibližně určit typ zařízení. Místo chybějící podpory pak distribuce může zkusit použít ovladač pro podobné zařízení. U nestandardního zařízení (negenerické ovladače) s nezajištěnou podporu pro Linux musíme případnou funkčnost zařízení pod Linuxem pokládat za náhodu. V novější verzi téže distribuce toto zařízení může být nefunkční. Často toto zařízení bez podpory nejde nijak zprovoznit anebo naprogramovat ovladače (chybí dokumentace).
Štítky: Principy Linuxu
Čtyřicet bytů je už docela slušná bytovka.
Konečne rozumné slovo ![]()
proč by komerční firma podporovala systém ze kterého nemá profit? proto je open source na jiné lodi než komerční soft. to je dobře. do komerční sféry ideologie nepatří, navíc vývojáři linuxu jsou schopni vytvořit jakýkoli soft sami. takže ovladače taky. ti nejlepší dokáží napsat i oprační systém z čisté vody. ne tady není žádný problém. stav v oblasti it jak se vyvinul je výhodný. každý si může zvolit dle svých schopností a peněženky. navíc ten kdo zvolí linux o problémech s kompatibilitou ví, takže nekompatibilní hardware nekoupí nebo oželí.
re killer : Linux je de facto vysoce komerční produkt. (přečtěte si jeden z předchozích článků http://linuxzblizka.blog.zive.cz/2010/03/komerce-postavena-na-open-source/#comment-1199) Rozdíl je, že Microsoft především vydělává na prodeji licencí na unifikovaný trh pro BFU a linuxové společnosti vydělávají na navazujících službách (podpora, zakázkový vývoj, konzultace, integrace řešení…) pro high-endové trhy (bankovní systémy, velké servery, superpočítače, průmyslová zařízení…). Dělení svobodný/proprietární software nesouvisí s dělením nekomerční/komerční software.
>>takže ovladače taky
Nelze vytvořit ovladače bez zpřístupněné dokumentace zařízení…
Mimochodem Linux má pravděpodobně mezi operačními systémy vůbec nejširší podporu hardwaru. Problém je “jen” s politikou některých výrobců komponent pro osobní počítače.
pro uživate2: běžný linux (ubuntu/suse) není komerční produkt protože je zadarmo. jasně že se dá koupit ale né nezbytně. programátor linuxu je natolik sebevědomý že vytvoří ovladač na cokoli bez dokumentace. sám píšeš že uživatel windows je bfu, takže je logické že uživatel linuxu je génius. …a psal jsem o amatérském použití operačních systémů v domácnosti. supercomputing je všem běžným uživatelům natolik vzdálen že se o něm můžeme bavit jen v teoretické rovině. devadesát procent všech českých uživatelů žádný superkomp nikdy neuvidí.
“Výrobci hardwaru často “hrají na sebe” a cíleně brání komunitě v poskytování kvalitní podpory.” Já myslím, že výrobcům je “komunita” mastných vlasů šumafuk. Když si někdo sestaví na hraní vlastní bastl a předpokládá, že solidní profesionální firmy, zabývající se výrobou hardwaru na skutečnou práci a ne proto, aby na něm běžel amatérský “soft” vyprodukovaný jedincem v jeho volném čase kvůli neschopnosti si najít ženu a provozovat s ní běžné denní činnosti, se budou tetelit blahem aby mu poskytly informace, pak je naivní a hloupý. Za kvalitu a informace nutno platit a tak je to dobře.
re:killer
Tady nejde o to, ze bych firmu, od ktere si koupim hardware, nejak okradal tim, ze ho pouzivam pod Linuxem. Existuji samozrejme patentovane funkce, kterych se firma rada nevzda a radeji nabizi jenom zpackane binarni ovladace pro Windows.
Zarazi me treba postoj firem, vyrabejicich televizni karty: jeden a ten samy model ma nekolik revizi s odlisnym tunerem, firma vyda zabugovane ovladace pod Windows, ktere maji 10MB a problem je vyresen. Pokud chci pouzivat kartu pod Linuxem (kde je jiz mnoho ovladacu napsano), musim kartu vrazit do pocitace, pokud nejde tak ji vnutit jiny modul a doufat. Stacilo by, aby se vyrobce choval “minimalne slusne” a na krabici a v dokumentaci uvedl, jaky chipset a tuner je pouzit.
Popripade mohou firmy samy vydavat vlastni binarni ovladace pod Linux, jako treba Nvidia, ktera si tim urcite neuskodi. Pokud srovnam treba jeji ovladace s ovladaci, ktere nabizi ATI, tak jsou mnohem lepsi a tim si zajistuji vice zakazniku. Mam ATI rad, od doby co jsem presel na Linux (asi 8 let) jsem si koupil uz 2 jejich graficke karty, ale vzdy jsem splakal nad vydelkem, musel je vyhodit a koupit si Nvidii.
[5]: “není komerční produkt protože je zadarmo”, tahle implikace je uplne spatne postavena. Vyhledavani Google je taky komercni produkt a taky je zadarmo. Web zive.cz je taky komercni produkt a taky je zadarmo. Chce to trochu si rozsirit obzory, neco si o tom precist, vrele doporucuji
[6]: Mastne vlasy vetsinou nosi pubertaci (a taky asocialove), co nemaji nic jineho na praci, nez psat do diskusi plky, ktere nikoho nezajimaji.
Najdi si holku a neprud, stejne jses za blbecka ty, protoze tomu houby rozumis.
Linux zblízka využívá WordPress MU a běží na Blog.zive.cz. Vytvořte si svůj vlastní blog
Sledování přes RSS: články
a komentáře
Partnerská sekce pro IT profesionály:
Microsoft TechNet/MSDN