Linux环境下移植LittleVGL

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_MAXLV_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上传到板子运行。

在这里插入图片描述

演示视频

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值