LVGL是一个免费的轻量级开源图形库。具有丰富部件与高级图形特性,支持多种输入设备和多国语言,独立于硬件之外的开源图形库。LVGL的配置主要区别在于渲染后端的选择,目前可选DRM直接送显以及通过SDL送显。目前RK3506平台可支持SDL送显。 本文基于触觉智能RK3506星闪开发板进行演示,配套RK3506核心板(3核A7@1.5GHz+M0@200MHz多核异构) 含税价5 9元 ,一片也是批量含税价~ 配置LVGL Buildroot配置 基础配置保存路径: $sdk/buildroot/configs/rockchip_rk3506_defconfig # Buildroot相关配置 # include "base/base.config" # include "chips/rk3506_arm.config" # include "fs/vfat.config" # include "wifibt/bt.config" # include "wifibt/wireless.config" # include "multimedia/audio.config" # include "wifibt/bt.config" # include "wifibt/wireless.config" # include "lvgl/lvgl_rkadk.config" # include "lvgl/rk_demo.config" # include "fs/ntfs.config" ... LVGL配置 基础配置保存路径: $sdk/buildroot/configs/rockchip/lvgl/v8 $ ls buildroot/configs/rockchip/lvgl/v8 base. config lvgl_drm. config lvgl_rkadk. config lvgl_sdl. config LVGL DEMO 源码⽬录结构 源码路径:SDK/app/lvgl_demo/ $tree -L 1 . #i ├── amp_monitor ├── cJSON # cJSON源码 ├── CMakeLists .txt ├── common ├── flexbus ├── gallery ├── lv_demo # 基础示例程序,运行官方DEMO ├── lvgl8 # 默认使用lvgl8 ├── lvgl9 ├── motor_demo ├── rk_demo # RK显控DEMO,包含智能家居、家电显控、楼宇对讲、系统设置等DEMO ├── sys # 时间戳,trace debug等 └── tools rk_demo代码说明 源码路径:SDK/app/lvgl_demo/rk_demo 主要作为一个示例程序,演示如何将官方的DEMO运行起来。以下说明略过一些无关的代码,仅挑选需要关注的代码进行说明。 static void lvgl_init ( void ) { /* 一切LVGL应用的开始 */ lv_port_init (); ... check_scr (); } ... int main ( int argc, char **argv) { signal (SIGINT, sigterm_handler); struct sched_param param; int max_priority; max_priority = sched_get_priority_max(SCHED_FIFO) ; param.sched_priority = max_priority ; if ( sched_setscheduler ( 0 , SCHED_FIFO, param) == - 1 ) { perror ("sched_setscheduler failed"); } /* 根据配置选择对应的DEMO初始化,绘制对应UI */ #ifROCKIT_EN RK_MPI_SYS_Init (); # endif #ifWIFIBT_EN run_wifibt_server (); # endif lvgl_init (); app_init (); rk_demo_init (); while (!quit) { /* 调用LVGL任务处理函数,LVGL所有的事件、绘制、送显等都在该接口内完成 */ lv_task_handler (); usleep ( 100 ); } #ifROCKIT_EN RK_MPI_SYS_Exit (); # endif return0; } 源码编译说明 修改源码后,重新编译之前删除之前的的lvgl_demo: $rm -rf SDK /buildroot/output /rockchip_rk3506/build /lvgl_demo/ -rf 重新编译buildroot: $ ./build.sh buildroot DEMO编译说明 触觉智能RK3506资料网盘中有提供的lvgl的demo,以下是编译方法以及demo运行方法。 解压 命令如下: $ mkdir demo $ unzip lvgl_demo. zip -d demo/ $ cd demo/lvgl_demo 修改与编译 修改交叉编译工具链: $ cat Makefile # # Makefile # #CC ?= gcc CC = /home/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506/host/bin/arm-buildroot-linux-gnueabihf-gcc LVGL_DIR_NAME ?= lvgl LVGL_DIR ?= ${ shell pwd} CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/ -Wall -Wshadow -Wundef -Wmissing-prototypes -W no -discarded-qualifiers -Wall -Wextra -W no -unused-function -W no - error =strict-prototypes -Wpointer-arith -fno-strict-aliasing -W no - error =cpp -Wuninitialized -Wmaybe-uninitialized -W no -unused-parameter -W no -missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -W no -format-nonliteral -W no -cast-qual -Wunreachable-code -W no -switch-default -Wreturn-type -Wmultichar -Wformat-security -W no -ignored-qualifiers -W no - error =pedantic -W no -sign-compare -W no - error =missing-prototypes -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wshift-negative-value -Wstack-usage= 2048 -W no -unused-value -W no -unused-parameter -W no -missing-field-initializers -Wuninitialized -Wmaybe-uninitialized -Wall -Wextra -W no -unused-parameter -W no -missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -W no -format-nonliteral -Wpointer-arith -W no -cast-qual -Wmissing-prototypes -Wunreachable-code -W no -switch-default -Wreturn-type -Wmultichar -W no -discarded-qualifiers -Wformat-security -W no -ignored-qualifiers -W no -sign-compare LDFLAGS ?= -lm BIN = demo #Collect the files to compile MAINSRC = ./main.c include $(LVGL_DIR) /lvgl/lvgl.mk include $(LVGL_DIR) /lv_drivers/lv_drivers.mk # CSRCS +=$(LVGL_DIR)/mouse_cursor_icon.c OBJEXT ?= .o AOBJS = $(ASRCS:.S=$(OBJEXT)) COBJS = $(CSRCS:.c=$(OBJEXT)) MAINOBJ = $(MAINSRC:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) $(MAINSRC) OBJS = $(AOBJS) $(COBJS) # # MAINOBJ - OBJFILES all : default %.o: %.c @ $(CC) $(CFLAGS) -c $ -o $@ @ echo "CC$" default : $( AOBJS )$( COBJS )$( MAINOBJ ) $( CC ) -o $( BIN )$( MAINOBJ )$( AOBJS )$( COBJS )$( LDFLAGS ) clean: rm -f $( BIN )$( AOBJS )$( COBJS )$( MAINOBJ ) 修改DEMO,如图所示,在main.c中将demo中显示的分辨率设置成与屏幕分辨率对应: 编译( 注意:交叉编译工具链路径根据实际情况进行更改。): $ make 最后将编译出的demo 通过adb push到开发板上。 C:\Users\industio_mhkadb push Z:\rk\rk3506\rk3506_linux-250211\rk3506_linux6.1\app\ test \demo\lvgl_demo\demo / Z:\rk\rk3506\rk3506_linux-250211\rk3506_linux6.1\app\ test \...ile pushed, 0 skipped. 24.4 MB/s (1127184 bytes in 0.044s) root@rk3506-buildroot:/# chmod a+x /demo root @rk3506 - buildroot : / # /demo END