市面上有許多嵌入式GUI庫可供選擇,包括開源GUI庫和閉源GUI庫,開源GUI庫:LVGL,EmWin等;閉源GUI庫:TouchGFX,柿餅GUI等。
本次開發教程的測試板卡來自創龍科技的TLT113-EVM國產工業評估板,基于全志科技T113-i雙核ARM Cortex-A7 + 玄鐵C906 RISC-V + HiFi4 DSP異構多核處理器設計,ARM Cortex-A7處理器單元主頻高達1.2GHz。
評估板由核心板和評估底板組成,核心板CPU、ROM、RAM、電源、晶振等所有元器件均采用國產工業級方案,國產化率100%。同時,評估底板大部分元器件亦采用國產工業級方案。核心板經過專業的PCB Layout和高低溫測試驗證,穩定可靠,可滿足各種工業應用環境。
T113-i國產工業評估板硬件資源圖解
此外,T113-i國產工業開發板的接口資源豐富,能夠支持引出雙路網口、雙路CAN、雙路USB、雙路RS485、RS232等通信接口,同時引出LVDS LCD、TFT LCD、MIPI LCD、HDMI OUT、CVBS IN/OUT、LINE IN、MIC IN、H/P OUT等音視頻多媒體接口,板載WIFI、4G(選配)模塊,支持1080P@60fps JPEG/MJPEG視頻硬件編碼,支持4K@30fps H.265、4K@24fps H.264視頻硬件解碼,方便用戶快速進行產品方案評估與技術預研。
本篇文章主要描述如何將LVGL8.1移植到創龍科技的T113-i開發板上。
LVGL
LVGL,全名“Littlev Graphics Library”,是一個開源的圖形庫,主要用于在嵌入式系統上創建圖形用戶界面(GUI)。它是用C語言編寫的,旨在高效和可定制,因此在各種微控制器平臺和顯示硬件上開發用戶界面時備受歡迎。
LVGL的特性
輕量級:LVGL旨在輕量且高效,適用于資源受限的嵌入式系統,這些系統具有有限的內存和處理能力。
高度可定制:LVGL允許開發人員根據項目要求定制GUI元素的外觀和行為。
小部件庫:它提供了各種預設計的圖形小部件,如按鈕、標簽、滑塊、列表等,以簡化交互式用戶界面的創建。
事件驅動:LVGL是事件驅動的,這意味著它會響應用戶輸入和其他事件以觸發操作或狀態更改。
硬件支持:LVGL支持各種顯示和輸入硬件,包括不同類型的顯示器(TFT、OLED等)和輸入設備(觸摸屏、按鈕等)。
積極的社區:LVGL有一個積極而支持性的社區,為其開發提供了資源并提供開發人員幫助。
跨平臺:LVGL可以在各種微控制器平臺上使用,適用于各種嵌入式系統。
LVGL的開源鏈接:https://github.com/lvgl
LVGL移植
下載源碼倉庫
lvgl代碼下載鏈接:https://github.com/lvgl/lvgl/archive/refs/tags/v8.1.0.tar.gz
lv_demos代碼下載鏈接:https://github.com/lvgl/lv_demos/archive/refs/tags/v8.1.0.tar.gz
lv_drivers代碼卸載鏈接:https://github.com/lvgl/lv_drivers/archive/refs/tags/v8.1.0.tar.gz
lv_port_linux_frame_buffer代碼卸載鏈接:https://github.com/lvgl/lv_port_linux_frame_buffer.git,通過git clone下載,然后切換到v8.2分支
將所有代碼寫在下來之后,代碼目錄如下:
源碼文件移植
創建目錄:lvgl,用于存放我們工程源碼
將lvgl源碼復制進lvgl目錄下
將lv_drivers源碼復制進lvgl目錄下
將lv_demos源碼復制進lvgl目錄下
從lvgl中復制lv_conf_template.h到lvgl,并重命名為lv_conf.h
從lv_drivers中復制lv_drv_conf_template.h到lvgl,并重命名為lv_drv_conf.h
從lv_demo中復制lv_demo_conf_template.h到lvgl,并重命名為lv_demo_conf.h
從lv_port_linux_frame_buffer中復制main.c和Makefile到lvgl下
將文件移植完之后,代碼目錄如下:
修改配置文件
修改lv_conf.h,此文件為lvgl的配置文件
使能lv_conf.h頭文件,將#if 0修改為#if 1
根據驅動(可在設備樹中查看)選擇像素點對應像素格式的大小,否則顯示可能亂碼
修改顯存大小
查看log,使能LV_USE_LOG,設置打印的log等級并選擇打印Log的接口
測試的樣例中用到不同字號的字體,需要使能用到的字體
修改lv_drv_conf.h,此文件為驅動配置文件
使能修改lv_drv_conf.h頭文件,將#if 0修改為#if 1
使能LCD顯示:使能USE_FBDEV,路徑設置成/dev/fb0,根據板子LCD的實際情況設置
使能鼠標或者觸摸屏
修改lv_demo_conf.h,此文件為測試用例配置文件
使能修改lv_demo_conf.h頭文件,將#if 0修改為#if 1
使能LV_USE_DEMO_WIDGETS測試用例
修改main.c文件,此文件為lvgl程序的主程序
修改lvgl的demos頭文件
修改lvgl顯示的分比率,我是采用HDMI屏幕,分辨率為:1920 * 1080
修改鼠標的配置,我的鼠標的設備節點為:/dev/input/event5
修改Makefile文件,此文件為構建工程腳本
修改構建工具鏈路徑,需要選擇T113-i的交叉工具鏈,工具鏈路徑為:xxx/T113-i_v1.0/out/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc
由于工具鏈不支持編譯選項-Wshift-negative-value,直接傷處對應編譯選項。
因為沒有鼠標的圖標文件,所以把鼠標圖標的配置注釋掉
增加測試樣例的編譯,包含其構建腳本
LVGL編譯驗證
編譯,在lvgl工程目錄下進行構建,執行make命令
?
編譯完之后,會在當前目錄下生成demo可執行文件
驗證,我們將可執行文件demo拷貝到板子上
在板子運行LVGL實例
運行結果:
總結
lvgl在Linux上的移植是比較簡單快捷的;只需要修改幾個配置文件,即可在目標上運行,對我們部署UI非常方便。
lvgl在T113-i上運行整體效果還可以,流暢度整體滿意,適合做一些項目的落地。 lvgl的是跨平臺的,所以寫一個應用可以多端部署,避免了重復開發的過程。 ?
編輯:黃飛
?
評論
查看更多