Produkty Novinky Články Návody Kontakty

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!
LiTE - check test
Další test - tlačítko s textovým popisem - spustíme příkazem ./lite_textbuttontest. Výsledek můžete vidět na obrázku.
LiTE - textbutton test
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?
LiTE - textline test

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.