0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Tina Linux圖形系統(tǒng)開發(fā)指南

嵌入式Linux那些事 ? 來源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 11:00 ? 次閱讀


Tina_Linux圖形系統(tǒng)開發(fā)指南

1 概述

本文檔將介紹 Allwinner Tina Linux 中已經移植好的窗口系統(tǒng),以及怎么使用,包括 MiniGUI、QT5、EFL、GTK+(WebkitGtk、Midori)、DirectFB、Wayland,整體結構 如下:

適用范圍:Tina Linux v3.5及以上版本。 相關人員:UI程序開發(fā)相關人員。

2 MiniGUI

2.1 MiniGUI說明.

目前Tina中移植了MiniGUI3.2的核心庫以及其組件,下表列出MiniGUI相關包說明:

表2-1: MiniGUI相關包說明

包名 說明
cell-phone-ux-demo MiniGUI手機界面應用
libminigui-gpl MiniGUI核心庫
minigui-res-be MiniGUI資源庫
mg-samples MiniGUI示例應用
libmdolphin MiniGUI瀏覽器核心庫
mdolphin-release-home MiniGUI瀏覽器應用
mdolphin-release-tv MiniGUI瀏覽器應用
mdolphin-samples MiniGUI瀏覽器應用
libmg3d MiniGUI提供3D接口組件
libmgeff MiniGUI動畫框架
libmgi MiniGUI輸入法組件
libmgncs MiniGUI新控件集
libmgp MiniGUI提供打印功能組件
libmgplus 對MiniGUI圖形繪制接口的增強
libmgutils MiniGUI提供對話框模板

表2-2:基于MiniGUI開發(fā)的應用

包名 說明
multimedia-test 多媒體測試Demo,包含攝像頭預覽、拍照、錄像、播放音、視頻、瀏覽圖片功能
r11-board 智能洗衣機Demo,包含一些界面滑動效果,選擇控件等常用功能實現
smart-music-player 智能音樂播放器Demo,包含滑動列表實現,在R328和R329上適配

下面是multimedia-test應用截圖:

圖2-1: multimedia-test主頁截圖

點擊SD卡和U盤圖標,可以對SD卡和U盤格式化,在拍照與錄制的時候需要正確的格式,不然不能錄制。藍色的SD卡與U盤表示SD卡與U盤正確掛載,灰色的表示沒有正確掛載。SD卡與U盤同時掛載的時候,默認使用SD卡,點擊相應圖標進入相應功能界面。

下面是r11-board應用截圖:

圖2-2: r11-board主頁截圖

主頁三個頁面可以左右滑動切換下一個頁面,點擊不同的洗衣圖片進入具體的洗衣功能界面。

圖2-3: r11-board功能頁截圖

點擊底部的洗滌、漂洗和脫水可以彈出滑動列表選擇不同的參數,點擊功能+按鈕有旋轉動畫。

下面是smart-music-player應用截圖:

圖2-4: smart-music-player截圖 1

圖2-5: smart-music-player截圖 2

2.2 MiniGUI配置.

source build/envsetup.sh

lunch XXX平臺名稱

make menuconfigGui --->

Minigui --->

<*> libminigui-gpl --->

[*] Enabel truetype font support (支持TTF矢量字體)

[*] Enabel tslib support for MiniGUI (支持觸摸屏)

[ ] Enabel g2d support for MiniGUI (支持G2D硬件加速,需要用sunxifb顯示引擎,目前只在R528/D1上支持)

[ ] Enabel g2drotate support for MiniGUI (支持G2D旋轉,需要用sunxifb顯示引擎,目前只在R528/D1上支持)

[ ] Enabel sunxifb support for MiniGUI (顯示引擎,類似fbcon,framebuffer長度大于 3時,切換成循環(huán)buffer)

[ ] Enabel sunxifbion support for MiniGUI (顯示引擎,通過libuapi申請顯示buffer)

[ ] Enabel coortrans cw support for MiniGUI(UI旋轉 90 度)

[ ] Enabel reduce size for MiniGUI (裁剪一些不需要的模塊)

-*- minigui-res-be

<*> mg-samples

MiniGUI有些示例程序需要將MiniGUI的核心庫變編譯為多進程模式,因此需要進行如下的配 置:

Gui --->

Minigui --->

<*> libminigui-gpl --->

Preferred Minigui Run Mode (ths) ---> proc

幾點差異化說明:

目前Tina中集成的是MiniGUI3.2版本,在 64 位與 32 位的機器上都可以正常運行。

如果使用的不是觸摸屏,需要配置鼠標,為了正常的顯示鼠標光標,需要修改如下Makefile:

tina/package/minigui/libminigui-gpl/Makefile

把–enable-cursor=no改成yes,表示使用鼠標。

V853平臺MiniGUI配置選項

source build/envsetup.sh

lunch選擇v853_perf1-tina

make menuconfigCONFIG_PACKAGE_eyesee-minigui:

eyesee-minigui is a GUILib for eyesee project.

Symbol: PACKAGE_eyesee-minigui [=y]

Type : tristate

Prompt: eyesee-minigui............................. eyesee-minigui for Tina Linux

代碼路徑為:external/minigui/

2.3 MiniGUI使用.

成功燒寫固件后,在小機端使用MiniGUI,需要進行如下幾步:

使用的是觸摸屏,需要進行觸摸屏校準。

配置MiniGUI.cfg文件。

2.3.1 觸摸屏校準.

電容屏不需要校準,如果電容屏觸摸不準確,需要把/etc/pointercal文件刪除。

電阻屏首先要確保觸摸驅動正常工作,有觸摸節(jié)點生成,比如說是/dev/input/event1,可以執(zhí)行 下面的命令,再觸摸屏幕看串口有無打印。

cat /dev/input/event

在小機端設置如下變量:

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=/etc/ts.conf

export TSLIB_PLUGINDIR=/usr/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb

// TSLIB_TSDEVICE根據觸摸屏生成的設備節(jié)點來配置

export TSLIB_TSDEVICE=/dev/input/event

ts_calibrate

注意TSLIB_TSDEVICE需要是生成的觸摸節(jié)點,按照屏幕上的提示點擊完成校準,校準完成

后/etc/pointerca文件生成,保存這個校準文件,就不用每臺產品都校準。

2.3.2 MiniGUI.cfg配置

小機端/usr/local/etc/MiniGUI.cfg文件:

vim usr/local/etc/MiniGUI.cfg

配置MiniGUI的ial和gal引擎,其配置文件的使用如下:

[system] // GAL engine and default options gal_engine=fbcon // defaultmode設置顯示的大小 defaultmode=800x480-32bpp [fbcon] // defaultmode設置顯示的大小 defaultmode=800x480-32bpp [sunxifb] defaultmode=800x480-32bpp // flipbuffer=1代替原來的export MG_DOUBLEBUFFER=1 flipbuffer=1 // cacheflag=1使能fb的cache,使buffer拷貝更快,在R328/R329上fb沒有cache功能,需要置為0 cacheflag=1 // rotate是控制旋轉的角度,使能G2D旋轉后有效,當旋轉角度為0與180度時,defaultmode不用改變 // 旋轉角度為90與270度時,system和sunxifb的defaultmode要改成480x800-32bpp rotate=0

使用觸摸屏,注意mdev需配置成生成的觸摸節(jié)點,輸入引擎配置如下:

// IAL engine ial_engine=tslib mdev=/dev/input/event1 mtype=none

使用鼠標,輸入引擎配置如下:

// IAL engine ial_engine=console mdev=/dev/input/mouse0 mtype=IMPS

2.4 MiniGUI優(yōu)化.

2.4.1 Double Buffer

雙緩沖的目的主要是防止畫面撕裂或者閃爍

修改內核開啟雙buffer。

修改文件tina/lichee/linux-3.4/drivers/video/sunxi/disp2/disp/dev_disp.c

注:V853平臺代碼路徑為:lichee/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/dev_disp.c

//fb0,注意賦值為 3 或者更多時,使用sunxifb引擎會切換成循環(huán)buffer,在快速滑動下可以提升一些幀率 init_para->buffer_num[0] = 2;

在MiniGUI程序執(zhí)行前導入環(huán)境變量。

export MG_DOUBLEBUFFER=1

注意只在使用fbcon引擎的時候需要導入這個環(huán)境變量,sunxifb引擎由flipbuffer字段指定。

執(zhí)行完 1 、 2 步,MiniGUI內部就會使用雙緩沖,解決界面切換時閃爍的問題。

還提供了一個函數,可以在應用層控制是否使用雙buffer,比如在打開界面前打開雙緩沖,打開界面之后停止使用雙緩沖。

開機 framebuffer 是不帶 cache 的,運行 minigui 程序的時候,如果執(zhí)行了 export MG_DOUBLEBUFFER=1或者flipbuffer=1并且cacheflag=1,framebuffer會切換成帶 cache的,默認換頁的時候會刷cache。

表2-3: DoubleBufferEnable函數說明

函數 說明
DoubleBufferEnable(FALSE) framebuffer會切換成不帶cache的,因此不用刷cache
DoubleBufferEnable(TRUE) framebuffer會切換成帶cache的,默認換頁的時候會刷cache

DoubleBufferEnable需要在執(zhí)行export MG_DOUBLEBUFFER=1或者flipbuffer=1之 后才能調用,DoubleBufferEnable返回 0 表示調用成功,如果返回-1表示調用失敗,可能是關 閉cache失敗,也可能是mmap framebuffer失敗,需要應用層再次調用該接口,不然顯示異 ?;虺鲥e。

2.4.2 其他

鍵盤換膚,可以參考《MiniGUI更換鍵盤皮膚》文檔。

輸入法更新詞庫,可以參考《MiniGUI輸入法更新詞庫》文檔。

文字旋轉,可以參考《MiniGUI TTF旋轉字庫制作并豎直顯示文字》文檔。

Ubuntu移植MiniGUI,可以參考《Ubuntu 64位移植Minigui3.2》文檔。

視頻小窗,可以參考《minigui_per_view視頻小視窗播放》文檔。

3 QT

3.1 QT5配置

目前Tina中移植了QT5.10.1版本,Qt配置可以參考如下說明:

source build/envsetup.sh lunch XXX平臺名稱 make menuconfigGlobal build settings Binary stripping method (strip) ---> strip Gui ---> Qt ---> -*- qt5-core <*> qt5-examples

這個將原本的庫的制表符信息裁剪,來減小庫的大小,Qt的某些庫需要用到庫的頭信息strtab 這個符號表,因此選擇strip這種輕度的裁剪,留下strtab這個符號表,默認的選擇是sstrip。

為了加快編譯速度,提供了不同編譯工具鏈預編譯的QT包:

tina/dl/qt-everywhere-opensource-src-5.12.9-prebuilt_glibc_32bit.tar.gz tina/dl/qt-everywhere-opensource-src-5.12.9-prebuilt_glibc_64bit.tar.gz tina/dl/qt-everywhere-opensource-src-5.12.9-prebuilt_musl_32bit.tar.gz tina/dl/qt-everywhere-opensource-src-5.12.9-prebuilt_musl_64bit.tar.gz tina/dl/qt-everywhere-opensource-src-5.12.9.tar.xz

如果源碼編譯有問題,查看alsa-lib配置是否選上。

通過在make menuconfig中選擇Qt–> qt5 use prebuilt來判斷使用哪種編譯方法。

make menuconfig Libraries ---> -*- alsa-lib Gui ---> Qt ---> [*] qt5 use prebuilt

qt5 use prebuilt的值會在tina/package/qt/qt5/Makefile文件中使用。

ifeq ($(CONFIG_QT5_USE_PREBUILT),y) ifeq ($(CONFIG_USE_GLIBC),y) ifeq ($(TARGET_ARCH),aarch64) PKG_MD5SUM:=b96ae8d2d55983911b7bf46896d516bc PKG_SOURCE:=qt-everywhere-opensource-src-$(PKG_VERSION)-prebuilt_glibc_64bit.tar.gz PKG_BUILD_DIR=$(COMPILE_DIR)/qt-everywhere-opensource-src-$(PKG_VERSION)- prebuilt_glibc_64bit else PKG_MD5SUM:=6fc40f289dd51ad2bf2403ad2da85bf PKG_SOURCE:=qt-everywhere-opensource-src-$(PKG_VERSION)-prebuilt_glibc_32bit.tar.gz PKG_BUILD_DIR=$(COMPILE_DIR)/qt-everywhere-opensource-src-$(PKG_VERSION)- prebuilt_glibc_32bit endif else ifeq ($(CONFIG_USE_MUSL),y) ifeq ($(TARGET_ARCH),aarch64) PKG_MD5SUM:=b7859b3fc75a28f10047cc63f8bb PKG_SOURCE:=qt-everywhere-opensource-src-$(PKG_VERSION)-prebuilt_musl_64bit.tar.gz PKG_BUILD_DIR=$(COMPILE_DIR)/qt-everywhere-opensource-src-$(PKG_VERSION)- prebuilt_musl_64bit else PKG_MD5SUM:=9d1e2d3b5673976b3277142f047d2c PKG_SOURCE:=qt-everywhere-opensource-src-$(PKG_VERSION)-prebuilt_musl_32bit.tar.gz PKG_BUILD_DIR=$(COMPILE_DIR)/qt-everywhere-opensource-src-$(PKG_VERSION)- prebuilt_musl_32bit endif endif else PKG_MD5SUM:=f177284b4d3d572aa46a34ac8f5a7f PKG_SOURCE:=qt-everywhere-opensource-src-$(PKG_VERSION).tar.xz PKG_BUILD_DIR=$(COMPILE_DIR)/qt-everywhere-opensource-src-$(PKG_VERSION) endif

3.2 QT5 platforms選擇

eglfs,在繪圖的時候會使用GPU渲染UI,如果平臺有GPU,盡量使用eglfs。

libqlinuxfb,linux標準的顯示框架,會打開/dev/fb0節(jié)點進行繪圖和顯示。

平臺插件的參數配置在package/qt/qt5/files/qt-env.sh 這個文件,如下所示,默認的plat- forms是eglfs,其中MALI_NOCLEAR環(huán)境變量的作用是調用eglInitialize函數時不清屏, 不然在顯示開機logo之后,會有一段黑屏時間,用戶體驗不好。

#!/bin/sh export QT_QPA_PLATFORM=eglfs:size=800x export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/qt5/plugins export QT_QPA_FONTDIR=/usr/lib/fonts export QT_QPA_GENERIC_PLUGINS=tslib export QT_QPA_GENERIC_PLUGINS=evdevmouse:/dev/input/event export QT_QPA_GENERIC_PLUGINS=evdevkeyboard:/dev/input/event export MALI_NOCLEAR=

通常生成的平臺插件在小機端的:

/usr/lib/qt5/plugins/platforms/libqeglfs.so

linuxfb平臺插件動態(tài)庫為libqlinuxfb.so。

如需更改為linuxfb,需要修改tina/package/qt/qt5/files/qt-env.sh文件內容,還需要make menuconfig選上qt5-drivers-linuxfb,如下所示:

Gui ---> Qt ---> -*- qt5-core <*> qt5-drivers-linuxfb <*> qt5-examples

linuxfb可以通過以下環(huán)境變量進行配置:

#!/bin/sh export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x480:mmSize=800x480:offset=0x0:tty=/dev/tty1 export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/qt5/plugins export QT_QPA_FONTDIR=/usr/lib/fonts export QT_QPA_GENERIC_PLUGINS=tslib export QT_QPA_GENERIC_PLUGINS=evdevmouse:/dev/input/event1 export QT_QPA_GENERIC_PLUGINS=evdevkeyboard:/dev/input/event2fb=/dev/fbN //指定幀緩沖設備; size=x //指定屏幕大小,以像素為單位; mmsize=x //物理寬度和高度; offset=x //屏幕左上角像素偏移量 nographicsmodeswitch- //不要將虛擬終端切換到圖形模式; tty=/dev/ttyN //覆蓋虛擬控制臺,僅在nographicsmodeswitch未設置時使用;

eglfs可以通過以下環(huán)境變量進行配置:

export QT_QPA_EGLFS_WIDTH=800 //包含屏幕寬度(以像素為單位) export QT_QPA_EGLFS_HEIGHT=480 //包含屏幕高度(以像素為單位) export QT_QPA_EGLFS_FB=/dev/fb0 //覆蓋幀緩沖設備,默認是/dev/fb0 export QT_QPA_EGLFS_DEPTH=32 //覆蓋屏幕的顏色深度,默認值為 32

3.3 QT5鼠標觸摸屏配置

Qt中使用鼠標,需要啟動udev,將鼠標設備標記為輸入設備,然后Qt的libinput來處理輸入 事件,才能夠識別鼠標。設置udev為自啟動,默認已經將udev設置為自啟動。

屏幕為觸摸屏,因此需要make menuconfig選上Qt觸摸模塊qt5-drivers-touchscreen,如 下所示:

Gui ---> Qt ---> -*- qt5-core <*> qt5-drivers-touchscreen <*> qt5-examples

觸摸屏驅動在小機端的:

/usr/lib/qt5/plugins/generic/libqtslibplugin.so

如果觸摸沒效果,執(zhí)行如下環(huán)境變量:

export QT_QPA_GENERIC_PLUGINS=tslib

3.4 QT5示例運行

成功燒寫固件后,在小機端使用QT,如果使用的是電阻觸摸屏,需要進行觸摸屏校準,請參考本文檔2.3.1小節(jié)。

QT的應用示例在小機端的如下路徑:

usr/share/qt5/examples /這是QT自帶的測試應用/make menuconfig Gui ---> Qt ---> <*> qt-easing. <*> qt-textures <*> qt-washing-machine //這是新添加的三個QT應用,如果運行此應用有問題,請參照package/qt/qt-washing-machine/src/doc文檔

運行qt應用需要指定插件平臺,目前QT支持的插件平臺有eglfs或者linuxfb,運行示例如下 所示:

./application -platform eglfs ./application -platform linuxfb

或者先執(zhí)行下面的命令,導入QT的環(huán)境變量,再執(zhí)行程序。

./etc/qt-env.sh

3.5 QT5問題錦集

3.5.1 strip

運行QT的應用程序會出現如下問題,需要將libqeglfs.so庫重新推到/usr/lib/qt5/plugins/platforms 路徑下。這里如果多個插件平臺庫都出現這個問題,可能是由于,Tina系統(tǒng)中將編譯生成的庫進 行裁剪,使其更小,Qt在進行動態(tài)加載的時候,需要找到庫頭信息中的strtab制表符,因此在 make menuconfig中選擇輕度裁剪模式-strip。

圖3-1: QT5問題錦集strip

3.5.2 eglfs

出現下面錯誤,申請不上native window有可能是缺少libqeglfs-mali-integration.so這個庫,需要將其adb push到小機端的/usr/lib/qt5/plugins/egldeviceintegrations路徑下。

圖3-2: QT5問題錦集eglfs

3.5.3 runtime

出現下面錯誤,傳入環(huán)境變量:

export QT_QPA_EGLFS_INTEGRATION=none export XDG_RUNTIME_DIR=/dev/shm

圖3-3: QT5問題錦集runtime

3.5.4 觸摸使用不了.

出現這個原因有可能是下面步驟導致:

觸摸屏沒有適配校準。

參考《2.3.1觸摸屏校準》/etc/ts_calibrate進行校準。

qt沒有配置觸摸屏的節(jié)點。

參考《3.2 QT5 platforms選擇》。

如果還是不行單獨執(zhí)行。

export QT_QPA_GENERIC_PLUGINS=tslib

4 EFL

4.1 EFL說明

Enlightenment Foundation Libraries (EFL)驅動Enlightenment,它們也可以獨立使用或 者構建在其他庫之上以提供有用的功能并創(chuàng)建強大的應用程序。

核心庫EFL在速度和大小方面都比其GTK +和Qt等的效率更高,并且具有更小的內存占用 量。

目前Tina中移植了EFL 1.20.6的核心庫以及其組件,下表列出EFL相關包說明。

表4-1: EFL相關包說明

包名 說明
efl EFL功能函數庫
ephoto 依賴與EFL的相冊應用
terminology 依賴于EFL的終端仿真器

下面是應用截圖:

圖4-1: efl-on-wayland

4.2 EFL配置

EFL可以使用Framebuffer或者Wayland顯示圖像,如果使用Wayland,需按照本文檔第 8 小節(jié)配置好Wayland。在Tina系統(tǒng)中,已經默認配置好了Framebuffer。執(zhí)行如下命令配置 EFL:

source build/envsetup.sh lunch XXX平臺名稱 make menuconfigGui ---> EFL ---> -*- efl <*> ephoto <*> terminology

圖4-2:配置EFL選項

efl是核心庫,ephoto是一個相冊應用,該應用可以選擇板子里的圖片進行瀏覽與幻燈片播放, terminology是一個終端仿真器,類似于ubuntu中的終端,進入到efl的配置界面,可以配置 efl支持的功能。如下圖所示:

圖4-3:配置EFL支持的功能選項

主要關注以下幾項配置:

表4-2: EFL配置說明

配置 說明
Enable raw Framebuffer access 使用framebuffer顯示efl的界面
Enabel wayland display server 使用wayland顯示efl的界面
Enabel sunxi-mali opengl es support 使用opengl es
Enable bidirectional text support 是否支持雙向文本,從左到右,或從右到左顯示文字
Enable tslib for touchscreen events 是否支持觸摸

如果使用framebuffer顯示efl的界面,則不需要再做其他配置什么,因為在Tina中默認開啟 framebuffer的,如果使用wayland,則需要參考本文檔第 8 小節(jié)配置好wayland。

4.3 EFL運行

成功燒寫固件后,如果使用Wayland的話,需要保證Weston已經運行,在小機端使用EFL, 執(zhí)行以下命令運行測試程序:

elementary_test

elementary_test是官方的小程序,包含efl中各種控件的使用示例。其他兩個測試程序也是這 樣執(zhí)行:

ephototerminology

還可以執(zhí)行elementary_config去配置elf,可以配置界面渲染的模式,字體、控件的大小等 等。

elementary_config

也可以手動指定渲染引擎,比如:

ECORE_EVAS_ENGINE=wayland_egl elementary_test //或者 ELM_ACCEL=gl elementary_test //或者 ELM_DISPLAY=wl elementary_test

如果想看efl的調試信息,可以在運行程序前加上:

EINA_LOG_LEVEL=4 elementary_test

如果是使用wayland顯示efl界面的,并且想測試opengl es,則執(zhí)行:

ELM_ACCEL=gl elementary_test

然后點擊GLView Gears,GLView Many Gears,GLViewSimple查看結果,執(zhí)行elemen- tary_test的時候界面可能是黑的,移動一下界面,滾動一下界面,或者最大化界面,就可以顯示 界面了,如果elementary_test沒有響應,可以結束進程,再次嘗試。使用kill -9 PID命令結 束。

5 GTK+

5.1 GTK+說明

GTK+是用來創(chuàng)造圖形界面的庫,它可以運行在許多類UNIX系統(tǒng),Windows和OSX。GTK+ 按照GNU LGPL許可證發(fā)布,這個許可證對程序來說相對寬松。GTK+有一個基于C的面向對 象的靈活架構,它有對于許多其他語言的版本,包括C++, Objective-C, Guile/Scheme, Perl, Python, TOM, Ada95, Free Pascal和Eiffel。GTK+依賴于以下庫:

GLib是一個多方面用途的庫,不僅僅針對圖形界面。GLib提供了有用的數據類型、宏、類型轉換,字符串工具,文件工具,主循環(huán)抽象等等。

GObject是一個提供了類型系統(tǒng)、包括一個元類型的基礎類型集合、信號系統(tǒng)的庫。

GIO是一個包括文件、設備、聲音、輸入輸出流、網絡編程和DBus通信的現代的易于使用的VFS應用程序編程接口。

cairo Cairo是一個支持復雜設備輸出的2D圖形庫。

Pango Pango是一個國際化正文布局庫。它圍繞一個表現正文段落的PangoLayout ob- ject。Pango提供GtkTextView、GtkLabel、GtkEntry和其他表現正文的引擎。

ATK是一個友好的工具箱。它提供了一個允許技術和圖形用戶界面交互的界面的集合。例如,一個屏幕閱讀程序用ATK去發(fā)現界面上的文字并為盲人用戶閱讀。GTK+部件已經被制作方便支持ATK框架。

GdkPixbuf是一個允許你從圖像數據或圖像文件創(chuàng)建GdkPixbuf(“pixel buffer”)的小的庫。用一個GdkPixbuf與顯示圖像的GtkImage結合。

GDK是一個允許 GTK+支持復雜圖形系統(tǒng)的抽象層。GDK支持X11、wayland、Win-dows和OS X的圖形系統(tǒng)工具。

GTK+是GTK+庫本身包含的部件,確切的說是GUI零件,比如GtkButton或者Gtk-TextView。

更多GTK應用編程可參考:示例

Gtk+(GIMP Tool Kit,GIMP工具包)是一個用于創(chuàng)造圖形用戶接口的圖形庫,下面是GIMP on GNU/Linux的截圖:

圖5-1: GTK+GIMP運行截圖

Tina系統(tǒng)移植了GTK+3的庫及其組件,對應GTK包及依賴說明如下:

gtk+-3.22.10.tar.xz:Gtk+3對應源代碼。

Pkgconf、gettext-full、atk、glib2、libcairo、pango、gdk-pixbuf、libepoxy、libxkb-common、libpixman、libinput、wayland、wayland-protocols、udev、libdrm、sunxi-mali:Openwrt系統(tǒng)Gtk+3依賴包名稱;對應Makefile位于package/libs/libgtk3/。

5.2 GTK+配置

GTK僅基于R18系統(tǒng)平臺驗證過,其它平臺暫未驗證;默認GTK配置成wayland port,理論 上GTK可以運行于所有支持Wayland的平臺;其中R40使用Wayland+FBDEV作為顯示后 端,R18使用Wayland+DRM。

source build/envsetup.sh lunch XXX平臺名稱 make menuconfig

以R18平臺為例,主要配置項如下:

Gui ---> Libs ---> -*- libcairo ---> [*] Enable cairo postscript support [*] Enable cairo pdf support [*] Enable cairo png support [ ] Enable script support [*] Enable cairo svg support [ ] Enable cairo tee support [ ] Enable cairo xml support Gtk ---> <*> libgtk3 ---> [*] Broadway GDK backend [*] Wayland GDK backend [*] Install libgtk3 demo program

因為Gtk+3依賴于Wayland,Wayland依賴于Weston合成器,配置時需要選上Weston和 Wayland,需按照本文檔第 8 小節(jié)配置好Wayland。

5.3 GTK+運行

成功燒寫固件后,如果使用Wayland的話,需要保證Weston已經運行,然后在小機終端運行:

/usr/bin/gdk-pixbuf-query-loaders --update-cache gdk-pixbuf-query-loaders > /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache

然后運行gtk3-demo:

gtk3-demo

圖5-2: GTK+Demo運行截圖

5.4 GTK+示例

#include int main( int argc, char *argv[] ){ GtkWidget *window; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_show(window); gtk_main (); return(0); }

6 WebKitGtk

6.1 WebkitGtk說明.

Tina系統(tǒng)移植了WebKitGtk的庫及其組件,對應WebKitGtk包及依賴說明如下:

webkitgtk-2.18.6.tar.xz、midori_0.5.11_all_.tar.bz2、package/libs/webkitgtk、pack-age/utils/midori:WebKitGtk和Midori瀏覽器對應源代碼及Makefile。

ruby/host、flex/host、bison/host、gperf/host、enchant、harfbuzz、icu、libjpeg、libgtk3、libsecret、libsoup、libxml2、libxslt、libsqlite3、libegl、libgles、libwebp libgles、lcms2、libtasn1、gstreamer1、gst1-libav 、gst1-plugins-bas、gst1-plugins-good、gst1-plugins-ugly、gst1-plugins-bad:Openwrt系統(tǒng)WebkitGtk依賴包名稱。

下面是WebKitGtk的截圖:

圖6-1: WebKitGtk運行截圖

6.2 WebKitGtk配置

WebKitGtk僅基于R18系統(tǒng)平臺驗證過,其它平臺暫未驗證;默認WebKitGtk配置成way- land port,R18使用Wayland+DRM。

source build/envsetup.sh lunch XXX平臺名稱 make menuconfigGui ---> Gtk ---> <*> webkitgtk <*> midori

因為WebKitGtk依賴于Gtk+3和Wayland,Wayland依賴于Weston合成器,配置時需要 選上Gtk+3、Weston和Wayland,需按照本文檔第 5 和 8 小節(jié)配置好Gtk+3和Wayland。

6.3 WebKitGtk運行

成功燒寫固件后,如果使用Wayland的話,需要保證Weston已經運行,然后在小機終端運行:

/usr/bin/gdk-pixbuf-query-loaders --update-cache gdk-pixbuf-query-loaders > /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache

然后運行Midori或minibrowser:

midori

或者:

minibrowser

6.4 WebKitGtk問題錦集

報錯:

error: Package `gee-0.8' not found in specified Vala API directories or GObject-Introspection GIR directories

原因是主機環(huán)境安裝了Vala這個工具,但是需要的是tina中編譯出的這個工具,卸載主機Vala工具即可。

7 DirectFB

7.1 DirectFB說明

DirectFB(直接幀緩沖區(qū))是在Linux幀緩沖區(qū)(fbdev)抽象層之上實現的一組圖形API。

最大化硬件加速的實用程序。

支持高級圖形操作,例如多種alpha混合模式。

沒有內核修改沒有庫依賴項,libc除外。

符合MHP規(guī)范的要求。

目前在Tina中,還沒有對接過GPU。

目前Tina中移植了DirectFB的核心庫以及其Demo,下表列出DirectFB相關包說明:

表7-1: DirectFB相關包說明

包名 說明
directfb directfb核心庫
directfb-examples directfb demo

7.2 DirectFB配置

source build/envsetup.sh lunch XXX平臺名稱 make menuconfigGui ---> Directfb ---> -*- directfb <*> directfb-examples

7.3 DirectFB運行

在小機端可以執(zhí)行一些df_開頭的測試用例,比如df_andi,df_dok:

df_andi

圖7-1: DirectFB運行截圖

8 Wayland

8.1 Wayland說明.

Wayland是一套display server(Wayland compositor)與client間的通信協議,而Weston是Wayland compositor的參考實現,定位于在Linux上替換X圖形系統(tǒng)。

目前Tina中移植了Wayland的核心庫以及其組件,下表列出Wayland相關包說明:

![表8-1: Wayland相關包說明]

包名 作用
glmark2 使用Wayland作為運行后端的GPU測試程序,或者使用FBDEV進行顯示
wayland 編譯Weston需要用到的主機端工具
wayland-protocols Wayland協議,相當于插件
weston 核心庫

8.2 Wayland配置.

8.2.1 menuconfig.

Wayland目前可以在R18與R40上運行,其他平臺暫未測試,其中在R40只能使用FBDEV 作為運行后端,在R18上可以使用DRM與FBDEV。執(zhí)行如下命令進行配置:

source build/envsetup.sh lunch XXX平臺名稱 make menuconfigGui ---> Wayland ---> < > glmark2 [ ] Enabel fbdev support [*] Enabel wayland support -*- wayland -*- wayland-protocols <*> weston ---> [ ] Enabel dbus support [ ] Enabel weston-launch linux pam support [*] Enabel opengl es support [ ] Enabel fbdev compositor support [*] Enabel drm compositor support [ ] Enabel lcms supports support [ ] Enabel junit xml support [ ] Enabel demo clients install

如下圖所示:

圖8-1: Wayland選項

glmark2是使用GPU的跑分測試程序,可以在R18上使用DRM作為Wayland后端的時候使 用,除此之外還可以使用FBDEV進行顯示并測試GPU性能。wayland,wayland-protocols 在編譯weston的時候用到,進入到weston的配置界面,可以配置weston支持的功能。如下 圖所示:

圖8-2: Weston選項

主要關注以下幾項配置:

表8-2: Wayland配置說明

選項 說明
Enabel opengl es support 只能在使用DRM 作為weston 后端的時候選上,支持opengl es GPU 加速
Enabel fbdev compositor support 使用framebuffer 作為顯示引擎
Enabel drm compositor support 使用DRM 作為顯示引擎
Enabel demo clients install 編譯出Wayland 測試Demo

如果使用FBDEV,需要選上kmod-mali-utgard-km與kmod-sunxi-disp:

Kernel modules ---> Video Support ---> <*> kmod-mali-utgard-km <*> kmod-sunxi-disp < > kmod-sunxi-drm

如果使用DRM與GPU加速,需要選上kmod-mali-utgard-km與kmod-sunxi-drm:

Kernel modules ---> Video Support ---> <*> kmod-mali-utgard-km < > kmod-sunxi-disp <*> kmod-sunxi-drm

選擇DRM與GPU加速的如下圖所示:

圖8-3: Kernel modules配置

注意FBDEV與DRM是互斥的,不能同時選擇。

如果需要Weston開機自啟動,需要修改 tina/package/wayland/weston目錄下的Make- file,把$(CP) ./weston $(1)/etc/init.d的注釋去除即可。

如果選擇了DRM作為顯示引擎,還可以把DRM的測試Demo給選上,選項如下:

Gui ---> Libs ---> libdrm ---> [*] install libdrm test programs [ ] Enable support for vc4's API

weston依賴的庫cairo也可以配置,其中Enable cairo pdf support與Enable cairo png support是必須選擇上的,不然編譯的時候會報錯,如果編譯GTK+的話,需要多選擇一些,參 考本文檔第5.2小節(jié)。

Gui ---> Libs ---> -*- libcairo ---> [ ] Enable cairo postscript support [*] Enable cairo pdf support [*] Enable cairo png support [ ] Enable script support [ ] Enable cairo svg support [ ] Enable cairo tee support [ ] Enable cairo xml support

圖8-4: Cairo選項

8.2.2 kernel_menuconfig

8.2.2.1 FBDEV

如果menuconfig選擇的是使用FBDEV作為后端,已經選擇kmod-sunxi-disp,R18平臺會 自動配置下面的選項,不用再執(zhí)行這一小節(jié)的步驟,其他平臺暫未實現自動配置,下面的主要是 記錄使用FBDEV作為后端,需要的內核配置。其他平臺內核已經默認配置使用FBDEV。

執(zhí)行以下命令,以R18的為例:

make kernel_menuconfig

選上 Framebuffer Console Support(sunxi)、DISP Driver Support(sunxi-disp2)、Framebuffer Console support與Transform Driver Support(sunxi):

Device Drivers ---> Graphics support ---> Frame buffer Devices ---> <*> Support for frame buffer devices ---> Video support for sunxi ---> [*] Framebuffer Console Support(sunxi) <*> DISP Driver Support(sunxi-disp2) Console display driver support ---> <*> Framebuffer Console support Character devices ---> <*> Transform Driver Support(sunxi)

如下圖所示:

圖8-5: Video support for sunxi選項圖8-6: Console display driver support選項圖8-7: Character devices選項

8.2.2.2 DRM.

如果menuconfig選擇的是使用DRM作為后端,由于內核中默認使用FBDEV,所以先要取消原本的配置,再選擇上DRM的配置,在menuconfig的配置中取消kmod-sunxi-disp,選上kmod-sunxi-drm,R18平臺會自動配置下面的選項,不用在執(zhí)行這一小節(jié)的步驟,其他平臺暫未實現自動配置。

執(zhí)行以下命令,以R18的為例?,F階段只有R18支持DRM:

make kernel_menuconfig

取消選擇Framebuffer Console Support(sunxi)、DISP Driver Support(sunxi-disp2)、Framebuffer Console support與Transform Driver Support(sunxi):

Device Drivers ---> Graphics support ---> Frame buffer Devices ---> < > Support for frame buffer devices ---> Video support for sunxi ---> [ ] Framebuffer Console Support(sunxi) < > DISP Driver Support(sunxi-disp2) Console display driver support ---> < > Framebuffer Console support Character devices ---> < > Transform Driver Support(sunxi)

選上DRM配置:

Device Drivers ---> Graphics support ---> <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) <*> DRM Support for Allwinnertech SoC A and R Series

如下圖所示:

圖8-8: Graphics support選項

DRM配置好之后,以前可能編譯過不使用DRM的固件,需要先把out刪除掉,并且需要清理 之前內核編譯的文件,不然可能會遇到一些編譯問題,在內核目錄下執(zhí)行:

make clean

8.3 Wayland使用.

8.3.1 weston運行.

成功燒寫固件后,在小機端使用Wayland,需要執(zhí)行以下命令:

chmod 0700 /dev/shm/ export XDG_RUNTIME_DIR=/dev/shm export XDG_CONFIG_HOME=/etc/xdg weston --backend=drm-backend.so --tty=1 --idle-time=0 & //或者 weston --backend=fbdev-backend.so --tty=1 --idle-time=0 &

如果沒有/dev/shm/文件夾,手動創(chuàng)建即可:

mkdir /dev/shm/

需要開啟調試的話,運行weston前執(zhí)行以下命令:

export MESA_DEBUG=1 export EGL_LOG_LEVEL=debug export LIBGL_DEBUG=verbose export WAYLAND_DEBUG=1

如果有編譯Wayland Demo的話,運行weston之后,可以運行Demo,在/usr/bin下:

wayland-scanner、weston-calibrator、weston-clickdot、weston-cliptest、weston-confine、weston-dnd、weston-eventdemo、weston-flower、weston-fullscreen、weston-image、weston-info、weston-multi-resource、weston-presentation-shm、weston-resizor、weston-scaler、weston-simple-damage、weston-simple-dmabuf-intel、weston-simple-dmabuf-v4l、weston-simple-egl、weston-simple-shm、weston-simple-touch、weston-smoke、weston-stacking、weston-subsurfaces、weston-terminal、weston-transformed。

GPU跑分測試程序可以執(zhí)行以下命令,前提是編譯了glmark2:

glmark2-es2-wayland

鼠標、鍵盤等輸入設備,插上就可以使用。如果沒有反應的話,確定是否編譯了鼠標,鍵盤的驅動。

8.3.2 weston.ini.

weston.ini 是 Wayland 的桌面配置文件,比如說想要去掉背景與狀態(tài)欄,則可以修改以 下的參數值。注釋掉 background-image,background-color 改成黑色 0xff000000, panel-position改成none:

vi /etc/xdg/weston.ini[shell] # background-image=/usr/share/weston/background.png background-color=0xff000000 panel-position=none

如果需要旋轉屏幕的話:

# [output] [output] # name=LVDS1,mipi屏DSI-1 name=DSI-1 # mode=1680x1050,修改成對應的分辨率mode=480*800 # transform=90,旋轉的角度 transform=90

更多具體參數,請參考weston.ini( 5 )- Arch手冊頁。

8.4 Wayland問題錦集

報錯:

no "wayland-egl" found

原因可能是在之前已經編譯過了沒有 wayland 的圖形系統(tǒng),GPU 庫被編譯成不支持 wayland 的庫,在配置 weston 的時候一定要把 Enabel opengl es support 選擇上,在tina/package/libs/gpu-um/目錄下執(zhí)行mm -B重新編譯GPU的庫,如果還報no “wayland-egl” found,可以刪除tina/out/目錄再重新編譯。

9 LVGL

9.1 LVGL說明.

LVGL是一個免費的開源圖形庫,提供了創(chuàng)建嵌入式GUI所需的一切,具有易于使用的圖形元素,美觀的視覺效果和低內存占用,采用MIT許可協議,可以訪問LittlevGL獲取更多資料。

強大的構建塊:按鈕、圖表、列表、滑塊、圖像等。

高級圖形引擎:動畫、抗鋸齒、不透明度、平滑滾動、混合模式等。

支持各種輸入設備:觸摸屏、鼠標、鍵盤、編碼器、按鈕等。

支持多顯示器。

獨立于硬件,可與任何微控制器和顯示器一起使用。

可擴展以使用少量內存(64 kB閃存、16 kB RAM)運行。

多語言支持,支持UTF-8處理、CJK、雙向和阿拉伯語。

通過類CSS樣式完全可定制的圖形元素。

受CSS啟發(fā)的強大布局:Flexbox和Grid。

支持操作系統(tǒng)、外部內存和GPU,但不是必需的。

使用單個幀緩沖區(qū)也能平滑渲染。

用C編寫并與C++兼容。

Micropython Binding在Micropython中公開LVGL API。

可以在PC上使用模擬器開發(fā)。

100 多個簡單的例子。

在線和PDF格式的文檔和API參考。

目前Tina中移植了LVGL 8.1.0核心組件與Demo,下表列出LVGL相關庫說明:

表9-1: LVGL相關庫說明

包名 說明
lv_demos lvgl的官方demo
lv_drivers lvgl的官方設備驅動程序,集成了sunxifb、sunxig2d和sunximem
lv_examples lvgl測試用例,最終調用的是lv_demos中的函數
lvgl lvgl核心庫
lv_g2d_test g2d測試用例,專門測試已經對接好的g2d接口
lv_monitor 壓力測試與狀態(tài)監(jiān)測軟件
sunxifb.mk 公共配置文件,寫應用Makefile時需要包含進去

下面是應用lv_examples截圖:

圖9-1: lv_demo_widgets主頁截圖圖9-2: lv_demo_music主頁截圖

下面是應用lv_monitor截圖:

圖9-3: lv_monitor主頁截圖

9.2 LVGL配置.

source build/envsetup.sh lunch XXX平臺名稱 make menuconfigGui ---> Littlevgl ---> < > lv_demo <*> lv_examples (lvgl官方demo) -*- lvgl-8.1.0 use sunxifb double buffer (使能雙緩沖,解決撕裂問題) [*] lvgl-8.1.0 use sunxifb cache (使能fb cache) [ ] lvgl-8.1.0 use sunxifb g2d (使能G2D硬件加速) [ ] lvgl-8.1.0 use sunxifb g2d rotate (使能G2D硬件旋轉) [ ] lvgl-8.1.0 use freetype (自動鏈接freetype) <*> lv_g2d_test (g2d接口測試用例) <*> lv_monitor (壓力測試與數據監(jiān)測軟件) < > smartva < > smartva_ota

9.3 LVGL使用.

lvgl路徑:

tina/package/gui/littlevgl-8

9.3.1 sunxifb

在sunxifb中,我們提供了一組接口,如下:

表9-2: sunxifb相關接口說明

接口 說明
sunxifb_init 該函數主要功能是初始化顯示引擎。帶一個旋轉參數,使能g2d旋轉的話,就用這個參數指定旋轉方向
sunxifb_exit 該函數比較簡單,實現關閉cache,關閉g2d,釋放旋轉buffer,關閉fb0
sunxifb_flush 該函數比較重要,負責把draw buffer拷貝到back buffer中,并且繪制最后一幀后,交換frontback buffer。應用不要調用該函數
sunxifb_get_sizes 該函數獲取屏幕分辨率,這樣應用程序就可以不用寫死初始化時的分辨率了
sunxifb_alloc 該函數主要用來申請系統(tǒng)繪圖內存,使能部分G2D功能后,會申請連續(xù)物理內存
sunxifb_free 該函數用來釋放sunxifb_alloc申請的內存

代碼位置如下:

tina/package/gui/littlevgl-8/lv_drivers/display/sunxifb.c

在sunxifb_init(rotated),中rotated的值為LV_DISP_ROT_NONE,LV_DISP_ROT_90,LV_DISP_ROT_180,LV_DISP_ROT_270。

最后還有賦值disp_drv.rotated=rotated。如果沒有g2d旋轉,也可以指定disp_drv.sw_rotate = 1使用軟件旋轉。

9.3.2 sunxig2d

在sunxig2d中,實現了對g2d ioctl的封裝,這些函數都不需要應用調用,如下:

表9-3: sunxig2d相關接口說明

接口 說明
sunxifb_g2d_init g2d模塊初始化函數,打開/dev/g2d節(jié)點,設置g_format。初始化時,根據使能的宏,打印相應的log
sunxifb_g2d_deinit 該函數關閉g2d設備
接口 說明
sunxifb_g2d_get_limit 該函數獲取g2d使用閾值
sunxifb_g2d_blit_to_fb 該函數用來拷貝fb0的front和back buffer這兩塊buffer,也可以把rotate buffer旋轉到back buffer
sunxifb_g2d_fill 該函數使用g2d填充一個顏色矩形,顏色可以帶透明度
sunxifb_g2d_blit 該函數用來拷貝圖像,不能blend圖像
sunxifb_g2d_blend 該函數可以進行圖像blend
sunxifb_g2d_scale 該函數用來縮放圖像

代碼位置如下:

tina/package/gui/littlevgl-8/lv_drivers/display/sunxig2d.c

以上g2d函數,都已經對接lvgl繪圖框架,使用lvgl的lv_draw_map、lv_img_set_zoom和lv_canvas_draw_img函數就可以使用起來。

lv_g2d_test應用中有完整的使用示例。

9.3.3 sunximem.

在sunximem中,實現了管理物理內存的封裝,這些函數都不需要應用調用,如下:

表9-4: sunximem相關接口說明

接口 說明
sunxifb_mem_init 該函數會在sunxifb_init中調用,初始化物理內存申請接口,使用的是libuapi中間件
sunxifb_mem_deinit 該函數通過調用SunxiMemClose,釋放申請的接口資源
sunxifb_mem_alloc 該函數比較重要,許多地方都會用到,需要傳入申請的字節(jié)數和使用說明
sunxifb_mem_free 該函數用來釋放調用sunxifb_mem_alloc申請的內存
sunxifb_mem_get_phyaddr 該函數把sunxifb_mem_alloc申請內存的虛擬地址轉換為物理地址,g2d驅動只接受buffer的物理地址或者fd
sunxifb_mem_flush_cache 該函數用來刷sunxifb_mem_alloc申請buffer的cache

代碼位置如下:

tina/package/gui/littlevgl-8/lv_drivers/display/sunxigmem.c

因為g2d驅動只能使用物理連續(xù)內存,因此解碼圖片時,必須要通過sunxifb_mem_alloc來申 請內存。

說明:當前只實現了 bmp 、 png 和 gif 圖片的內存申請, jpeg 圖片暫未實現。

當使用lv_canvas_set_buffer時,傳入的buffer需要是sunxifb_alloc申請的buffer,sunx- ifb_alloc中會判斷是否需要申請物理連續(xù)內存。

說明:自定義畫布 lv_canvas 暫未對接 g2d 縮放功能。

9.3.4 evdev

觸摸我們用的是lvgl官方的evdev。

代碼位置如下:

tina/package/gui/littlevgl-8/lv_drivers/indev/evdev.c

在應用 lv_drv_conf.h 中修改 EVDEV_NAME 為觸摸屏對應生成的 event 節(jié)點,例如 lv_examples的配置文件:

tina/package/gui/littlevgl-8/lv_examples/src/lv_drv_conf.h

另外也可以用命令生成軟連接touchscreen,就會直接以touchscreen為觸摸節(jié)點,方便調 試。命令如下:

ln -s /dev/input/eventX /dev/input/touchscreen

如果disp_drv.rotated指定了旋轉 90 或者 180 度,lvgl內部會自行旋轉觸摸坐標,不用觸摸 驅動內部去旋轉觸摸坐標。

9.4 LVGL新建應用

推薦以lv_g2d_test為模板,復制一個新項目:

tina/package/gui/littlevgl-8/lv_g2d_test

在Makefile中,需要包含sunxifb.mk公共配置,在編譯應用時會把宏傳遞下去。方式如下:

tina/package/gui/littlevgl-8/lv_g2d_test/Makefile include ../sunxifb.mk

另外可以注意到有以下配置,這些配置需要按需開啟,在部分芯片上是不支持G2D_BLEND等

操作的,只支持簡單的旋轉功能:

ifeq ($(CONFIG_LVGL8_USE_SUNXIFB_G2D),y) TARGET_CFLAGS+=-DLV_USE_SUNXIFB_G2D_FILL -DLV_USE_SUNXIFB_G2D_BLEND -DLV_USE_SUNXIFB_G2D_BLIT -DLV_USE_SUNXIFB_G2D_SCALE endif

在應用編譯的實際Makefile中,可以只編譯需要的文件,縮減可執(zhí)行文件的大小,像下面的示例 就是不編譯examples文件夾:

tina/package/gui/littlevgl-8/lv_g2d_test/src/Makefileinclude $(LVGL_DIR)/lvgl/lvgl.mk include $(LVGL_DIR)/lv_drivers/lv_drivers.mk #Do not compile the example EXCSRCS += $(shell find -L $(LVGL_DIR)/$(LVGL_DIR_NAME)/examples -name *.c) CSRCS := $(filter-out $(EXCSRCS),$(CSRCS))

關于lvgl的配置文件,也是建議用lv_g2d_test中的,可以對比原始未修改過的配置,然后再根 據實際場景開關相應配置。配置文件如下:

tina/package/gui/littlevgl-8/lv_g2d_test/src/lv_conf.h tina/package/gui/littlevgl-8/lv_g2d_test/src/lv_drv_conf.htina/package/gui/littlevgl-8/lvgl/lv_conf_template.h tina/package/gui/littlevgl-8/lv_drivers/lv_drv_conf_template.h.h

最后就是應用的初始化了,在lv_g2d_test中,有比較清晰的調用流程了,需要注意的是sunx- ifb_init需要傳入旋轉參數和sunxifb_alloc申請內存即可。

9.5 LVGL運行.

我們提供了幾個測試用例,執(zhí)行命令如下:

lv_examples 0lv_examples 0, is lv_demo_widgets lv_examples 1, is lv_demo_music lv_examples 2, is lv_demo_benchmark lv_examples 3, is lv_demo_keypad_encoder lv_examples 4, is lv_demo_stresslv_g2d_testlv_g2d_test 0 5 0 1 one num is rotate, range is 0~3 tow num is gif, range is 0~11, 11 is no show gif three num is bmp, range is 0~2, 2 is no show bmp four num is png, range is 0~3, 3 is no show pnglv_monitor

在初始化時,會有如下打印,根據配置的不同會有差異,表示打開了某項配置:

wh=1280x800, vwh=1280x1600, bpp=32, rotated=0 Turn on double buffering. Turn on 2d hardware acceleration. Turn on 2d hardware acceleration fill. Turn on 2d hardware acceleration blit. Turn on 2d hardware acceleration blend. Turn on 2d hardware acceleration scale. Turn on 2d hardware acceleration rotate.

10 Flutter

10.1 Flutter說明

Flutter為應用開發(fā)帶來了革新:只要一套代碼庫,即可構建、測試和發(fā)布適用于移動、Web、桌 面和嵌入式平臺的精美應用。Flutter特性如下:

快速:Flutter代碼可以編譯為ARM 32、ARM 64、x86和JavaScript代碼,確保了有原生平臺的性能。

高效:使用熱重載(HotReload)快速構建和迭代你的產品,更新代碼之后可以立即看到變化,且不會丟失應用狀態(tài)。

靈活:屏幕的每一個像素皆可由你創(chuàng)作,創(chuàng)建高定制性、自適應的設計,在所有屏幕上都有優(yōu)雅的體驗。

多平臺:部署到多種設備,只需要一份代碼庫,支持移動、網頁、桌面和嵌入式設備。

開發(fā)體驗:在工程中可以使用插件、自動化測試、開發(fā)者工具以及任何可以用來幫助構建高質量應用的工具。

穩(wěn)定可依賴:Flutter由Google支持并廣泛使用,全球性的開發(fā)者社區(qū)廣泛參與和維護,并得到眾多世界知名品牌的信任。

編程語言:Flutter由Dart強力驅動,為全平臺優(yōu)化,構建快速應用。

本地迭代:部署到設備之前,你可以在本地調試代碼,并在Web或移動平臺運行產品原型。

靈活擴展:任何嵌入式設備,Flutter靈活且輕量級的UI引擎都能輕松擴展以滿足你的需求。

蓬勃發(fā)展的生態(tài):通過Flutter成熟的package生態(tài),你可以為眾多嵌入式設備創(chuàng)造新的可能。

目前Tina中移植了Flutter 2.10.4與Demo,注意Flutter應用只能在glibc編譯工具鏈下運 行。下表列出Flutter相關庫說明:

表10-1: Flutter相關庫說明

包名 說明
complex_layout 滑動列表測試app應用
gallery flutter 的官方大型app應用,集成了各種控件效果和常見應用場景
video_player 視頻播放測試app應用
flutter_eglfs 預編譯加載flutter app的應用,用gpu渲染,支持旋轉
flutter_fbdev 預編譯加載flutter app的應用,用cpu渲染,暫時不支持旋轉
flutter-client 預編譯加載flutter app的應用,用gpu渲染,支持旋轉與視頻播放
libvideo_player_plugin.so 視頻播放插件,目前僅供測試使用,后續(xù)會替換視頻播放接口
libflutter_elinux_eglfs.so 如果需要自定義插件,需要鏈接該庫
libflutter_engine.so flutter核心庫
gen_snapshot flutter app編譯AOT所需要的工具

下面是應用complex_layout截圖:

圖10-1: complex_layout主頁截圖

下面是應用gallery截圖:

圖10-2: gallery主頁截圖圖10-3: gallery_1主頁截圖

10.2 Flutter配置

source build/envsetup.sh lunch XXX平臺名稱 make menuconfigGui ---> Flutter ---> flutter-sunxi ---> --- flutter-sunxi -*- flutter use fbdev [*] flutter use eglfs [ ] flutter use client [ ] flutter use elinux so [*] flutter demo complex layout [*] flutter demo gallery [ ] flutter demo video player

10.3 Flutter運行

flutter路徑如下:

tina/package/gui/flutter/flutter-sunxi tina/dl/flutter-sunxi-1.0.7.tar.gz

當配置上flutter之后,會把flutter_fbdev,complex_layout等放到/usr/bin目錄下,libflut- ter_engine.so等放到/usr/lib目錄下,執(zhí)行如下命令:

flutter_eglfs /usr/bin/bundle_complex_layout/ flutter_eglfs /usr/bin/usr/bin/bundle_gallery/flutter_fbdev /usr/bin/bundle_complex_layout/ flutter_fbdev /usr/bin/usr/bin/bundle_gallery/flutter-client -b /usr/bin/bundle_complex_layout/ flutter-client -b /usr/bin/bundle_gallery/

初始化時會打印一些信息和探測觸摸節(jié)點,log如下:

root@TinaLinux:/# flutter_eglfs /usr/bin/bundle_gallery/ flutter: egl version: 1.4 (1.4 build 1.11@5516664) flutter: egl vendor: Imagination Technologies flutter: red OK: 8 flutter: green OK: 8 flutter: blue OK: 8 flutter: alpha OK: 8 flutter: found input device flutter: input props: flutter: found input device flutter: input props: flutter: found input device flutter: input props:

如果沒有識別到INPUT_PROP_DIRECT,那么需要在觸摸驅動中加上如下代碼:

set_bit(INPUT_PROP_DIRECT, ts->input_dev->propbit);

另外也可以用命令生成軟連接touchscreen,就會直接以touchscreen為觸摸節(jié)點,方便調 試。命令如下:

ln -s /dev/input/eventX /dev/input/touchscreen

還可以看更詳細的信息,增加旋轉參數,命令如下:

root@TinaLinux:/# flutter_eglfs -h flutter_eglfs - run flutter apps on your device. USAGE: flutter_eglfs [options] OPTIONS: -f, --fps-print Print frame rates. -p, --touch-print Print touch points. -r, --rotate-screen Rotate the screen, the values are 0, 90, 180, 270. -v, --version Show flutter_eglfs version and exit. -h, --help Show this help and exit. BUNDLE PATH TREE: ./app_bundle/data/flutter_assets ./app_bundle/data/icudtl.dat ./app_bundle/lib/libapp.so EXAMPLES: flutter_eglfs ./app_bundle flutter_eglfs -r 90 ./app_bundle LD_LIBRARY_PATH=./ flutter_eglfs ./app_bundle LD_LIBRARY_PATH can ensure that libflutter_engine.so is found. OTHER: Some applications may require system information. export LANG="en_US.UTF-8"

關于如何編譯flutter應用,可以看readme.txt中的說明,路徑如下:

tina/out/方案名稱/compile_dir/target/flutter-sunxi-1.0.7/readme.txt

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • MiniGUI
    +關注

    關注

    5

    文章

    45

    瀏覽量

    28701
  • Linux
    +關注

    關注

    87

    文章

    11123

    瀏覽量

    207889
  • 圖形
    +關注

    關注

    0

    文章

    71

    瀏覽量

    19245
  • 開發(fā)指南

    關注

    0

    文章

    34

    瀏覽量

    7509
  • Tina
    +關注

    關注

    2

    文章

    45

    瀏覽量

    16894
收藏 人收藏

    評論

    相關推薦

    Tina_Linux系統(tǒng)裁剪開發(fā)指南

    Tina_Linux系統(tǒng)裁剪開發(fā)指南1 概述2 Tina系統(tǒng)裁剪簡介2.1 boot0裁剪2.2 uboot裁剪2.3 內核裁剪2.3.1
    的頭像 發(fā)表于 03-06 09:52 ?1384次閱讀

    測試系統(tǒng)開發(fā)指南:了解機架和系統(tǒng)互連的影響

    測試系統(tǒng)開發(fā)指南:了解機架和系統(tǒng)互連的影響
    發(fā)表于 08-19 11:56

    測試系統(tǒng)開發(fā)指南:理解驅動程序和直接輸入輸出

    測試系統(tǒng)開發(fā)指南:理解驅動程序和直接輸入/輸出
    發(fā)表于 08-21 14:53

    測試系統(tǒng)開發(fā)指南:優(yōu)化系統(tǒng)設計,實現快速開發(fā),快速執(zhí)行,重用

    測試系統(tǒng)開發(fā)指南:優(yōu)化系統(tǒng)設計,實現快速開發(fā),快速執(zhí)行,重用
    發(fā)表于 08-26 14:56

    測試系統(tǒng)開發(fā)指南AN1465-7

    測試系統(tǒng)開發(fā)指南AN1465-7
    發(fā)表于 10-09 16:55

    測試系統(tǒng)開發(fā)指南操作維護應用指南1465-8

    測試系統(tǒng)開發(fā)指南操作維護應用指南1465-8
    發(fā)表于 10-10 10:52

    測試系統(tǒng)開發(fā)指南AN1465-5

    測試系統(tǒng)開發(fā)指南AN1465-5
    發(fā)表于 10-10 10:52

    測試系統(tǒng)開發(fā)指南AN1465-4

    測試系統(tǒng)開發(fā)指南AN1465-4
    發(fā)表于 10-11 11:08

    測試系統(tǒng)開發(fā)指南AN1465-1

    測試系統(tǒng)開發(fā)指南AN1465-1
    發(fā)表于 10-12 10:54

    測試系統(tǒng)開發(fā)指南:針對測試工程師的綜合手冊

    測試系統(tǒng)開發(fā)指南:針對測試工程師的綜合手冊
    發(fā)表于 10-24 08:20

    【HarmonyOS】HarmonyOS子系統(tǒng)開發(fā)指

    系統(tǒng)開發(fā)主要從三個方面進行指導,分別是圖形圖像類子系統(tǒng)開發(fā)指導,相機子系統(tǒng)開發(fā)指導和音視頻子系統(tǒng)開發(fā)指導。
    發(fā)表于 09-21 14:50

    Tiny6410 Linux開發(fā)指南詳解

    Tiny6410 Linux 開發(fā)指南
    發(fā)表于 07-08 17:12 ?209次下載
    Tiny6410 <b class='flag-5'>Linux</b><b class='flag-5'>開發(fā)指南</b>詳解

    Tina_Linux_系統(tǒng)軟件開發(fā)指南

    Tina_Linux_系統(tǒng)軟件開發(fā)指南
    的頭像 發(fā)表于 03-02 15:25 ?1517次閱讀
    <b class='flag-5'>Tina_Linux</b>_<b class='flag-5'>系統(tǒng)軟件開發(fā)指南</b>

    Tina Linux配置開發(fā)指南

    Tina Linux配置開發(fā)指南
    的頭像 發(fā)表于 03-02 15:28 ?1.6w次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>配置<b class='flag-5'>開發(fā)指南</b>

    Linux NOR開發(fā)指南

    Linux NOR開發(fā)指南
    的頭像 發(fā)表于 03-06 09:55 ?813次閱讀
    <b class='flag-5'>Linux</b> NOR<b class='flag-5'>開發(fā)指南</b>