Linux环境下移植LittleVGL
LittleVGL是一个开源图形库,提供创建嵌入式GUI的各种元素。由于它是使用标准C语言所写,其具有精美的视觉效果和低内存占用,可以很轻松的移植到嵌入式设备上。
本篇笔记分享基于framebuffer的LittleVGL的移植使用。
准备工作
LVGL官方提供了基于Linux frame buffer的移植工程:lv_port_linux_frame_buffer
此工程还关联其他仓库,若是clone时下图红框圈起来的文件夹中无文件,须下载相关资源放入这三个文件夹中。
地址:
将相关资源放入这三个文件夹后。使用打开shell使用make
编译此工程,无错误且生成名为的demo
二进制文件表示工程构建成功,使用make clean
清理工程。
修改工程
1.修改Makefile
因为我们的程序在ARM板子上运行,所以需要修改Makefile。
#
# Makefile
#
# CC ?= gcc
CROSS_COMPILE = arm-linux-gnueabihf-
CC = $(CROSS_COMPILE)gcc
2.修改lv_conf.h文件
修改分辨率
LV_HOR_RES_MAX
和LV_VER_RES_MAX
宏表示实际屏幕大小,笔者屏幕为1024x600。
/* Maximal horizontal and vertical resolution to support by the library.*/
#define LV_HOR_RES_MAX (1024)
#define LV_VER_RES_MAX (600)
修改颜色深度
LV_COLOR_DEPTH
宏表示单位像素点使用位数大小,笔者配置为RGB565,故16位。
/* Color depth:
* - 1: 1 byte per pixel
* - 8: RGB233
* - 16: RGB565
* - 32: ARGB8888
*/
#define LV_COLOR_DEPTH 16
3.修改lv_drv_conf.h文件
使能fb设备
默认使能fb0
。
/*-----------------------------------------
* Linux frame buffer device (/dev/fbx)
*-----------------------------------------*/
#ifndef USE_FBDEV
# define USE_FBDEV 1
#endif
#if USE_FBDEV
# define FBDEV_PATH "/dev/fb0"
#endif
使能输入设备
将USE_EVDEV
宏置1,使能输入设备。EVDEV_NAME
宏代表输入事件,不一定是event0
,笔者的是event2
。可以使用cat
命令来测试一下你板子的触摸屏输入对应的是哪一个event:
在板子shell中输入cat /dev/input/event2
,此时触摸一下屏幕,则终端会有乱码信息输出,则说明当前板子的触摸输入对应的就是这个event。
/*-------------------------------------------------
* Mouse or touchpad as evdev interface (for Linux based systems)
*------------------------------------------------*/
#ifndef USE_EVDEV
# define USE_EVDEV 1
#endif
#if USE_EVDEV
# define EVDEV_NAME "/dev/input/event2"
# define EVDEV_SWAP_AXES 0
4.修改main.c文件
添加输入初始化
- 添加头文件
#include "lv_drivers/indev/evdev.h"
- 初始化并注册输入设备
在lv_disp_drv_register(&disp_drv);
注册显示设备后添加如下代码。
evdev_init();
static lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv);
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = evdev_read;
lv_indev_drv_register(&indev_drv);
添加心跳
在while(1)
里添加lv_tick_inc
调用。
/*Handle LitlevGL tasks (tickless mode)*/
while(1) {
lv_tick_inc(5);
lv_task_handler();
usleep(5000);
}
移植到这里就可以测试了,但这只是最基本的移植,有些demo需要使能lv_conf.h文件里的一些配置,否则编译会报错,根据编译报错信息修改相关配置项即可。
运行测试
使用make
编译工程,将demo
上传到板子运行。