Embedded Linux a okýnka - 4. LiTE (nad DirectFB)
Všechno hezké jednou končí. Poslední díl seriálu o okýnkách v embedded Linuxu uzavřeme GUI knihovnou LiTE, vhodnou pro běh nad grafickým prostředím DirectFB. Grafické prostředí DirectFB jsme si zprovoznili v předchozím dílu na modulu SAM9260, ke kterému byl připojen 7” TFT displej INT070ATFT-TS jako framebuferové zařízení.
Něco málo o
GUI knihovna LiTE je skutečně velmi light (lehká). Poskytuje základní abstrakci nad funkcionalitou DirectFB, čímž má zjednodušovat vytvoření GUI aplikací pro DirectFB. Vývojářům dává k dispozici pouze základní widgety (grafické prvky) - tlačítko, checkbox, testbox atd. Programována je v jazyce C.
Za výhodu a taky důvod, proč se o této GUI knihovně zmiňuji, považuji její jednoduchost. Pro nenáročné aplikace s grafickým rozhraním s pár tlačítky, checkboxy a okny je dostačující. Ovšem pro nějaké komplexní grafické rozhraní je, obávám se, nevyhovující.
Nevýhodou, která může někoho odradit, je velmi stručná až mizerná dokumentace. A také skutečnost, že poslední verze 0.8.10 je stará už 4,5 roku. To ale nebrání v tom, zkusit jaká LiTE vlastně je.
Než začneme
- Seznam potřebných nástrojů najdete v prvním díle tohoto seriálu, sekce Než začneme.
- Zkompilované binárky knihoven, jejich hlavičkové soubory a další soubory budu instalovat do sysrootu (viz stejná sekce první díl), tj. do adresáře /home/emlin/devel/arm/sysroot/sam9260/local v mém virtuálním počítači.
- Potřebné soubory si ze sysrootu zkopíruji do exportu, tj. adresáře /home/emlin/devel/arm/export/sam9260/roofts-lite. Tento adresář pak budu přes NFS připojovat k souborovém systému modulu SAM9260, jako kdyby byl jeho lokální součástí.
Abych zkrátil a zpřehlednil zápisy příkazů, definoval jsem si v BASHi (příkazový interpretr) tři proměnné prostředí, které budu dále v článku používat.
$ SRC="/home/emlin/devel/arm/sysroot/sam9260/src" $ SYSROOT="/home/emlin/devel/arm/sysroot/sam9260/local" $ EXPORT="/home/emlin/devel/arm/export/sam9260/rootfs-lite"
Závislosti
Knihovna LiTE závisí logicky na DirectFB, resp. na třech knihovnách, které prostředí DirectFB tvoří: libdirectfb, libfusion a libdirect. Návod, jak zkompilovat a instalovat prostředí DirectFB, najdete v předchozím díle, včetně závislostí samotného DirectFB.
Kompilace a instalace
Stáhneme si archív se zdrojovými kódy poslední zveřejněné verze LiTE-0.8.10 a rozbalíme jej. V adresáři LiTE-0.8.10, který tím vznikne, upravíme zdrojový soubor examples/dfbspy.c (autoři zvolili název proměnné kolidující s háčky Linuxu) a provedeme následující kroky, kterými zkompilujeme knihovnu LiTE.
### uprava zdrojoveho kodu souboru examples/dfbspy.c 1) promenou 'stat' prejmenovat na 'fs_stat' 2) promenou 'last_stat' prejmenovat na 'last_fs_stat' ### konfigurace $ ./configure --host=arm-none-linux-gnueabi \ --prefix=$SYSROOT \ --sysconfdir=/usr/local/etc \ --datarootdir=/usr/local/share \ --enable-static \ CPPFLAGS="-I$SYSROOT/include" \ CFLAGS='-march=armv5te -mtune=arm926ej-s -mabi=aapcs-linux' \ LDFLAGS="-Wl,-rpath-link,$SYSROOT/lib -L$SYSROOT/lib" \ CPPXXFLAGS="-I$SYSROOT/include" \ CXXFLAGS='-march=armv5te -mtune=arm926ej-s -mabi=aapcs-linux' \ PKG_CONFIG_PATH="$SYSROOT/lib/pkgconfig" ### kompilace a instalace $ make $ make datarootdir="$SYSROOT/share" install ### rucni presun prikladu z bin do bin/apps $ cd $SYSROOT/bin $ mv lite_* apps/
Instalace do zařízení
Budu se už poněkolikáté opakovat - pro instalaci do cílového zařízení, modulu SAM9260, použijeme sdílení exportu (speciální adresář, viz Než začneme) přes NFS. Obsah exportu připojíme do souborového systému modulu SAM9260 jako /usr/local. Z pohledu modulu nebude možné poznat, že adresář /usr/local je vlastně adresářem v mém (vašem) linuxovém desktopu. Seznam souborů, které zkopírujeme ze sysrootu do exportu uvádím jako seznam kopírovacích příkazů. Samozřejmě kromě souborů pro knihovnu LiTE musíme zkopírovat i vše z DirectFB. U DirectFB musíme pamatovat i na to, že se musí kopírovat a případně také přizpůsobit konfigurační soubor $SYSROOT/etc/directfbrc. Obsah souboru directfbrc je popsán v předchozím díle o DirectFB.
### vytvorime si zakladni adresare $ cd $EXPORT $ mkdir bin etc lib share bin/apps ### kopirovani z bin/apps $ cd $SYSROOT/bin/apps $ cp lite_checktest lite_textbuttontest lite_textlinetest -t $EXPORT/bin/apps ### kopirovani z etc/ $ cp $SYSROOT/etc/directfbrc $EXPORT/etc ### kopirovani z lib/ $ cd $SYSROOT/lib $ cp -d libfreetype.s* libjpeg.s* libpng.so libpng12.s* libz.s* -t $EXPORT/lib $ cp -d libdirect.so libdirect-*.s* libdirectfb.so libdirectfb-*.s* \ libfusion.so libfusion-*.s* -t $EXPORT/lib $ cp -r directfb-1.6-0 $EXPORT/lib $ cp -d libleck.s* liblite.s* -t $EXPORT/lib ### kopirovani share/ $ cd $SYSROOT/share $ cp -r fonts/ directfb-1.6.3/ directfb-examples/ LiTE/ -t $EXPORT/share/
Níže uvedené příkazy povolí sdílení exportu pro modul SAM9260 s IP 192.168.1.12 přes NFS. Sdílený adresář z mého počítače s IP 192.168.1.123 připojíme na modulu jako /usr/local. Pak aktualizujeme příkazem ldconfig cache s dostupnými dynamickými knihovnami.
### na pocitaci $ echo "$EXPORT 192.168.1.12(rw,sync,no_subtree_check,no_root_squash)" |\ sudo tee -a /etc/exports $ sudo service nfs-kernel-server restart ### na modulu jako root # mount -t nfs -o nolock \ 192.168.1.123://home/emlin/devel/arm/export/sam9260/rootfs-lite \ /usr/local # ldconfig
Testování
Testovat budeme jako obvykle - zkusíme si pustit nějaké testovací příklady od autorů knihovny LiTE. V lokálním nebo sériovém terminálu, případně přes Telnet, se přihlásíme k modulu SAM9260 (do Linuxu) jako root a v adresáři /usr/local/bin/apps spustíme první příklad příkazem ./lite_checktest. Předpokládá se, že máme připojen sdílený export našeho linuxového počítače. Měl by se spustit DirectFB s obvyklými výpisy, zčernat plocha, objevit se kurzor myši a pak dialogové okno se dvěma checkboxy a tlačítkem Exit (viz obrázek LiTE - check test). Stisk tlačítka Exit je jediný legální způsob, jak LiTE GUI aplikaci ukončit. Klávesa ESC nefunguje. Pozor, musíte kliknout dvakrát!
Další test - tlačítko s textovým popisem - spustíme příkazem ./lite_textbuttontest. Výsledek můžete vidět na obrázku.
No a jestli se chcete fakt odvázat, zkuste si pustit test textového pole. Test spusťte příkazem ./lite_textlinetest a zkuste si napsat něco do textového pole. Funguje?
Závěr
Tímto dílem ukončíme (alespoň prozatím) sérii o grafických prostředích a navazujících GUI knihovnách ve světě embedded Linuxu. Líbila se vám více kombinace Nano-X a FLTK nebo spíše DirectFB + LiTE? Můžete doporučit jiná grafická prostředí/GUI knihovny? Podělte se s ostatními o svoje poznatky na našem diskuzním fóru.