前言
LittlevGL是一個免費的開源圖形庫,提供了創(chuàng)建嵌入式GUI所需的一切,具有易于使用的圖形元素、漂亮的視覺效果和低內存占用。
準備工作
一種方式是像LVGL | lvgl最新版本在STM32上的移植使用這篇文章的方式一樣,從頭一步一步來搭建基于framebuffer的工程,自己編寫Makefile文件。需要下載:
- lvgllv_driverslv_examples
溫馨提示:這些可以在lvgl官方GitHub找到,也可以按照文末的方式獲取。
然后建立一個工程,把需要用到的文件復制到工程里,編寫Makefile文件即可。具體教程可參考這一篇文章:
https://www.icode9.com/content-4-2420.html
除此之外,lvgl官方倉庫也有提供基于Linux frame buffer的移植工程:lv_port_linux_frame_buffer
,我們直接下載下來修改一些代碼適配我們的板子就可以。
lvgl快速實踐
文章篇幅有限,我們就不一步一步演示移植步驟了。我們直接下載lv_port_linux_frame_buffer
拿過來進行修改即可,就可以快速跑起來。
我們可以使用git clone --recurse-submodules
命令下載,也可以直接下載。關于git clone --recurse-submodules
命令的介紹可查閱:LVGL | 基于vs2019的lvgl模擬器使用這篇文章。我們選擇直接下載,下載得到的lv_port_linux_frame_buffer
內容為:
此時,lvgl、lv_examples、lv_drivers這三個文件夾內的內容是空的,我們需要下載相關資源放進去。比如:
接下來可以修改工程了,需要修改的地方也很簡單,但前提是我們的設備已經有顯示驅動與觸摸屏驅動。
1、修改編譯器
首先需要修改Makefile,因為我們需要在板子上跑,所以需要使用交叉編譯器:
2、修改分辨率
修改lv_conf.h
文件里的LV_HOR_RES_MAX、LV_VER_RES_MAX宏為實際屏幕大小,如:
3、使能fb設備
修改lv_drv_conf.h
文件里的USE_FBDEV宏來使能Linux frame buffer device (/dev/fbx)
,如:
關于frame buffer的介紹可看如下推文:
Linux系統(tǒng)開發(fā)之Framebuffer應用編程
4、使能輸入設備
修改lv_drv_conf.h
文件里的USE_EVDEV宏來使能輸入事件設備,如:
其中,你的板子的輸入事件可能不是event1,根據(jù)實際進行修改。可以使用cat命令來測試一下你板子的觸摸屏輸入對應的是哪一個event,如:
此時,觸摸一下屏幕,則終端會有信息(亂碼信息)輸出,則說明當前板子的觸摸輸入對應的就是這個event。
5、添加輸入初始化
在main.c
初始化并注冊一個輸入設備,如:
6、添加lvgl心跳
在main.c
添加lv_tick_inc函數(shù)的調用,如:
然后就可以跑跑一些實例demo了,有些demo需要使能lv_conf.h文件里的一些配置,否則編譯會報錯,根據(jù)編譯報錯信息修改相關配置項即可。
編譯成功之后,會在lv_port_linux_frame_buffer工程主目錄生成一個名為demo
的可執(zhí)行文件。
傳到板子里運行:
本文相關資料下載
本篇文章需要用到的資料及能跑的demo我已經打包好了:
前往公眾號【嵌入式大雜燴】后臺回復關鍵詞:基于framebuffer的lvgl的移植使用
,即可獲取下載鏈接。