Aktualizácia ovládačov embedded grafiky mali400
V dnešnom blogu sa pozrieme na to ako fungujú binárne ovládače grafiky Mali 400 a ako je možné ich aktualizovať.
Výrobcovia grafických kariet sa rôznymi spôsobmi vyhýbajú povinnosti zverejniť zdrojové kódy ovládačov grafických kariet. U desktopových grafík je bežné zverejnenie malej časti kódu, ktorý zliepa jadro s binárnou časťou.
V prípade výrobcu Mali sa ovládač skladá z 2 častí. Kernelová časť je kompletne otvorená a je možné ju slobodne distribuovať a modifikovať ako je to uvedené v licencii. Kernelovú časť tvoria 2 moduly:
- ump
- Správa grafickej pamäte.
- mali
- Spracovanie príkazov pre GPU.
Druhou časťou sú knižnice lib(E?)GL*
, ktoré prekladajú OpenGL príkazy na ioctl
volania ovládača grafiky. Tie je možné buď pomocou debuggeru, alebo preloadovaním knižníc ľahko odchytiť. Týmto spôsobom sa snažia ľudia okolo lima vytvoriť kompletne otvorený ovládač.
Kompilácia open source časti
Platforma ARM je poriadne fragmentovaná. Na rozdiel od desktopov, kde jeden ovládač funguje pre tú istú grafiku na prakticky ľubovoľnom počítači u ARMov to vôbec nefunguje. U tejto platformy musí ovládač vedieť inicializovať grafiku a nastaviť správne základné fyzické adresy sám (žiaden BIOS tu nemáme). Inicializácia sa vykonáva zápisom na rôzne registre (prakticky u každého produktu sú iné). Preto sa musí ovládač skompilovať so správnymi adresami a správnym inicializačným kódom. V mojom prípade som kompiloval pre Olinuxino (Allwinner A13). Presné príkazy na kompiláciu ovládača vo verzii r3p0-04rel0 sú tu:
cd driver/src/devicedrv/ump export PATH=/cesta/k/x-tools/arm-unknown-linux-gnueabi/bin:$PATH export CROSS_COMPILE=arm-unknown-linux-gnueabi- export CC=arm-unknown-linux-gnueabi-gcc export KDIR=/cesta/k/linux-HEAD export USING_PROFILING=0 export BUILD=debug export TARGET_PLATFORM=mali400-pmu export CONFIG=ca8-virtex820-m400-1 export KBUILD_VERBOSE=1 make cd ../mali make
Zvýraznené premenné určujú konkrétnu platfomu, pre ktorú chceme kompilovať. Podporované platformy nie sú priamo súčasťou ovládačov. Získať by sa mali dať priamo od výrobcu SOC (v prípade olinuxina sú to súbory config.h a mali_platform.c). Ako môžte vidieť súbor config.h
určuje len mapovanie pamäte a mali_platform.c
obsahuje inicializačný kód.
Novšie ovládače pre Mali sú dostupné, ale nedajú sa skompilovať kvôli nekompatibilite inicializačného kódu. Nevyzerá to tak, že by allwinner chcel vydať upravený inicializačný kód, takže práca s aktualizáciami ovládačov zostáva na komunite.
Uzatvorená časť
Knižnice lib(E?)GL*
sú dostupné a ich inštalácia je pomerne jednoduchá - stačí ich skopírovať do adresára /usr/lib
. O open-source implementáciu tejto časti sa snaží projekt Lima driver.
Prílohy
- dsc_4795.jpg (927.2 kB)
- tmb_dsc_4795.jpg (65.1 kB)
Pre pridávanie komentárov sa musíte prihlásiť.
Ako pozerám, už aj tie čínske displeje majú celkom príjemné farby. "ARM svet" to je past vedle pasti :) Ma štve tá uzatvorenosť okolo, Mali by ešte ako tak šla, ale čo to všetko okolo? Máš telefón, foťák jeden blob, čo čidlo to ďalší blob, Wifi blob, GPS blob, Call blob. Nebiť toho už dávno tam mám Debian a kašlem na Android.
Nenechaj sa farbami zmiasť, cez deň to vyzerá fakt hnusne (teda nie že by toto bolo fotené v noci, ale keď priamo svieti slnko na display nie je moc kontrastný). Samotný TFT panel nie je zlý, ale jeho dotyková vrstva (inak dodávaná samostatne za 10€ pri objednávke 1 kusa) je trochu mliečna a je asi 2mm nad povrchom LCD, takže spôsobuje dosť veľký rozptyl svetla. Ale ako hovorím TFT panel nie je ani drahý ani nemá nejak zlé farby okrem toho som fotil z hrozného uhla. Zhoršuje to len touch vrstva.
Čo sa týka uzavrenosti ... toto zariadenie používa SoC allwinner, ktorý pekne zdrojáky kernelu zverejnil. Síce sa o ne nestará, ale komunita to postupne aktualizuje. Žiaden binárny blob okrem wifi tu nie je (tam je dávnejšie spomínaná rtl8192cu). Ale aj tá wifi má plne open source ovládač dodávaný výrobcom, binárny je len firmvér, ktorý ju oživí.