嵌入式linux上运行LVGL v8 GUI demo 支持tslib 和linux_frame_buffer
GitHub - lvgl/lv_port_linux_frame_buffer: LVGL configured to work with a standard Linux framebuffer
一.下载 以下4部分
1.下载 lv_port_linux_frame_buffer-master
GitHub - lvgl/lv_port_linux_frame_buffer: LVGL configured to work with a standard Linux framebuffer
2.下载 lvgl
3.下载 lv_demos
GitHub - lvgl/lv_demos: Examples, tutorials and applications for the LVGL embedded GUI library
4.下载 lv_drivers
GitHub - lvgl/lv_drivers: TFT and touch pad drivers for LVGL embedded GUI library
二.由于 lv_port_linux_frame_buffer-master中的lvgl、lv_demos、lv_drivers这三个文件夹内的内容是空的,我们需要把下载好的lvgl、lv_demos、lv_drivers放入lv_port_linux_frame_buffer-master中,如下图所示
三.修改lv_port_linux_frame_buffer-master文件夹下的lv_drv_conf.h
1.使能显示对应的frame_buffer,如下图所示
2.使能输入设备对应的触摸屏event,如下图,
其中,你的板子的输入事件可能不是event1,根据实际进行修改。使用cat命令来测试确认触摸屏输入对应的是哪一个event(命令输入按Enter之后,触摸板子的屏幕,如果有如下乱码则说明这个就是你的触摸屏对应的event)
四.修改lv_port_linux_frame_buffer-master文件夹下的Makefile
对应你自己的板子对应的交叉编译器
五.修改lv_port_linux_frame_buffer-master文件夹下的main.c
具体代码如下
#include "lvgl/lvgl.h"
#include "lv_drivers/display/fbdev.h"
#include "lv_demos/lv_demo.h"
#include <unistd.h>
#include <pthread.h>
#include <time.h>
#include <sys/time.h>
#include "lv_drivers/indev/evdev.h"
#define DISP_BUF_SIZE (128 * 1024)
int main(void)
{
/*LittlevGL init*/
lv_init();
/*Linux frame buffer device init*/
fbdev_init();
/*A small buffer for LittlevGL to draw the screen's content*/
static lv_color_t buf[DISP_BUF_SIZE];
/*Initialize a descriptor for the buffer*/
static lv_disp_draw_buf_t disp_buf;
lv_disp_draw_buf_init(&disp_buf, buf, NULL, DISP_BUF_SIZE);
/*Initialize and register a display driver*/
static lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.draw_buf = &disp_buf;
disp_drv.flush_cb = fbdev_flush;
disp_drv.hor_res = 1024;
disp_drv.ver_res = 600;
lv_disp_drv_register(&disp_drv);
evdev_init();
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);
/*Create a Demo*/
lv_demo_widgets();
/*Handle LitlevGL tasks (tickless mode)*/
while(1) {
lv_task_handler();
usleep(5000);
}
return 0;
}
/*Set in lv_conf.h as `LV_TICK_CUSTOM_SYS_TIME_EXPR`*/
uint32_t custom_tick_get(void)
{
static uint64_t start_ms = 0;
if(start_ms == 0) {
struct timeval tv_start;
gettimeofday(&tv_start, NULL);
start_ms = (tv_start.tv_sec * 1000000 + tv_start.tv_usec) / 1000;
}
struct timeval tv_now;
gettimeofday(&tv_now, NULL);
uint64_t now_ms;
now_ms = (tv_now.tv_sec * 1000000 + tv_now.tv_usec) / 1000;
uint32_t time_ms = now_ms - start_ms;
return time_ms;
}
六.确认lv_port_linux_frame_buffer-master文件夹下的用户心跳宏是 1
七.lv_port_linux_frame_buffer-master文件夹下make 生产demo,
复制到开发板运行./demo ,效果如下图,触摸屏效果很灵敏
以上移植的前提是tslib 和linux_frame_buffer已ok
更多推荐
所有评论(0)