Portál AbcLinuxu, 2. května 2025 17:20
Dnes som sa pokúsil o aktualizáciu open source časti driverov grafiky Mali400 pre platformu Allwinner A13. Skompilovať nové funkčné ovládače sa mi nepodarilo aj napriek tomu, že kód je open source. Tento blog by mal načrtnúť zhruba problematiku driverov grafík pre ARM.
V súčasnosti používam verziu ovládačov r3p0-04rel0 (zdroj). Ovládače viac-menej fungujú, ale občas sa stáva, že obraz pri blendovaní preblikáva. Neviem, či nová verzia tento problém rieši keďže nikde nie je zverejnený changelog, ale za pokus to stálo. Binárna (userspace) časť ovládačov je zverejnená tu.
Kompletné zariadenie o ktoré ide je na tomto obrázku:
Open source časť ovládačov sa skladá z 2 modulov - ump.ko
pre správu pamäte a mali.ko
pre komunikáciu s grafickým jadrom.
Closed source časť sa skladá z knižníc libEGL.so.1.4
, libGLESv2.so.2.0
a libMali.so
, ktoré prekladajú OpenGL volania do príkazov pre ump a mali ovládač. Samotné ioctl je veľmi jednoduché odchytiť a analyzovať (ak by sa toho chytil jeden, možno dvaja vývojári fulltime za pár mesiacov by sme mohli mať plne open source implementáciu týchto knižníc). Binárnu časť stačí len nakopírovať do /usr/lib.
-rw-r--r-- 1 mirec mirec 106K nov 24 09:39 libEGL.so.1.4 -rw-r--r-- 1 mirec mirec 238K nov 24 09:39 libGLESv1_CM.so.1.1 -rw-r--r-- 1 mirec mirec 213K nov 24 09:39 libGLESv2.so.2.0 -rw-r--r-- 1 mirec mirec 560K nov 24 09:39 libMali.so
Binárna časť nás však nebude zaujímať, v tomto prípade sa nedostaneme ani cez kompiláciu open source časti ovládača Funkčné príkazy pre kompiláciu staršej verzie ovládača r3p0-04rel0 sú:
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
Pre nás zaujímavé parametre sú zvýraznené. Určujú oblasti fyzických adries zariadenia (CONFIG) a inicializačný kód (TARGET_PLATFORM) ktorý je pre takmer každý ARM iný. Zvyšná časť ovládačov je spoločná. Súbory určujúce platformu nie sú dodávané priamo výrobcom driverov (mali) a musíme si ich teda nájsť. Tu je príklad súborov:
cat ump/arch-ca8-virtex820-m400-1/config.h
#ifndef __ARCH_CONFIG_H__ #define __ARCH_CONFIG_H__ #define ARCH_UMP_BACKEND_DEFAULT 1 #define ARCH_UMP_MEMORY_ADDRESS_DEFAULT 0x5E000000 #define ARCH_UMP_MEMORY_SIZE_DEFAULT 128UL * 1024UL * 1024UL #endif /* __ARCH_CONFIG_H__ */
cat mali/platform/mali400-pmu/mali_platform.c
Výpis je príliš dlhý, takže tu je link
Modul UMP nie je problém skompilovať ptetože stačí definovať len adresy. U modulu mali sa však celá platformovo závislá časť zmenila, takže prepísať sa musí aj súbor mali_platform.c
, ktorý pochádza z roku 2011. Netuším kto je autorom, neviem kde nájsť novú verziu a neviem, či vôbec nová verzia existuje.
Ovládače grafiky mali pre ARM sú skutočne oproti desktopovým ovládačom jednoduché. Podstatná časť ovládačov je open source. Nie je potrebné kompilovať žiaden zliepovací kód s jadrom. Dať tak do ovládačov grafiky mali len zlomok energie vývojárov ktorú vkladajú do desktopových grafík mali by sme už teraz kompletne open source mobilnú platformu.
Tiskni
Sdílej:
Poznám .. ale chýbajú vývojári, ktorí by to dotiahli. Však v podstate nie sú vývojári aby dotiahli vôbec 100-riadkový kód, ktorý inicializuje driver (ja dnes nemám čas to poriešiť sám, možno niekedy dopíšem aspoň tých pár riadkov).
V každom prípade mnoho ľudí si myslí, že tieto embedded grafiky v tabletoch sú uzavreté. Tu som chcel ukázať skôr opak - podstatná časť driverov je dostupná verejnosti, zvyšok by 1-2 ľudia dokázali dotiahnúť len nie je o to záujem.
Dokumentácia zvyčajne nie je dostupná, ale je to z úplne iných dôvodov než na desktope. Výrobcovia ako allwinner totiž priamo spolupracujú s ľudmi, ktorí vyrábajú tablety. Žiadnu dokumentáciu nemajú ani vnútrofiremne, nie je totiž čas na jej písanie. Ak niečo neviete jednoducho musíte zájsť priamo za človekom, ktorý to navrhoval.
Olinuxino, hardvérovo podobné, ale majú v eshope rovno touch LCD, ktorý sa dá k doske pripojiť cez IDE kábel a funguje rovno bez nejakej konfigurácia ako framebuffer ;)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.