前言
最近在板子上调试的时候用到Lvgl,这里记录一下把Lvgl V8.1移植到linux上的过程
一、准备工作
- 准备好所用板子的交叉编译环境
- 带LCD的linux开发板,调通LCD驱动
- Lvgl源码
在github上搜索Lvgl https://github.com/lvgl ,找到以下仓库并下载: - Lvgl (下载lvgl-release-v8.1 )
- lv_demos (下载lv_demos-release-v8.1)
- lv_drivers (下载lv_drivers-release-v8.1)
- lv_port_linux_frame_buffer (下载lv_port_linux_frame_buffer-release-v8.2)
(需要说明的是,一开始下的是master分支的最新代码,但是编译的时候发现lv_disp_drv_t没有定义(error: unknown type name ‘lv_disp_drv_t’),看了下其他版本的源码,是在lvgl\src\hal\lv_hal_disp.h下定义的,但是下载的lvgl源码里并没有找到相关的文件和定义,于是就下载最新的release版本 lvgl-release-v8.1)
二、开始移植
1.在Ubuntu下创建目录lvgl_demo_test并移入相应的文件
- 把lvgl-release-v8.1复制进文件夹lvgl_demo_test,重命名为lvgl;
- 把lv_drivers-release-v8.1复制进文件夹lvgl_demo_test,重命名为lv_drivers;
- 把lv_demos-release-v8.1复制进文件夹lvgl_demo_test,重命名为lv_demo;
- 从lvgl中复制lv_conf_template.h到lvgl_demo_test,并重命名为lv_conf.h;
- 从lv_drivers中复制lv_drv_conf_template.h到lvgl_demo_test,并重命名为lv_drv_conf.h;
- 从lv_demo中复制lv_demo_conf_template.h到lvgl_demo_test,并重命名为lv_demo_conf.h;
- 从lv_port_linux_frame_buffer-release-v8.2中复制main.c和Makefile到lvgl_demo_test下
2.修改配置文件
修改lv_conf.h
改成#if 1使能头文件的内容
根据驱动(可在设备树中查看)选择像素点对应像素格式的大小,否则显示可能乱码
修改显存大小
修改刷新周期,根据所用处理器的性能调整
设置Tick定时器配置函数
使能用到的字体,不然编译会提示未定义
如果需要查看log,使能LV_USE_LOG,设置打印的log等级并选择打印Log的接口
修改lv_drv_conf.h
改成#if 1 使能头文件的内容:
使能LCD显示:使能USE_FBDEV,路径设置成/dev/fb0,根据板子LCD的实际情况设置
使能触摸屏输入:
修改lv_demo_conf.h
改成#if 1 使能头文件的内容
使能要移植的demo,这里使能的是LV_USE_DEMO_WIDGETS
2.修改main.c
设置正确的lv_demo.h头文件路径
设置DISP_BUF_SIZE
根据LCD像素尺寸修改驱动参数,我使用的屏幕是800*480像素的
当前没有使用到鼠标,注释掉相关代码
lv_demo_widgets()是所移植的demo的入口
3.修改Makefile
配置交叉编译器
编入lv_demo
mouse没用到,注释掉
我用的编译器版本不支持 -Wshift-negative-value这个参数,在Makefle里去掉了
三、编译运行
- 编译
在lv_demo_test目录下,输入make即可编译,编译后在当前目录下生成可执行文件demo - 运行
把demo复制到开发板上,输入./demo即可运行