RK3568笔记十七:LVGL v8.2移植

若该文为原创文章,转载请注明原文出处。

本文介绍嵌入式轻量化图形库LVGL 8.2移植到Linux开发板ATK-RK3568上的步骤。

主要是参考大佬博客:

LVGL v8.2移植到IMX6ULL开发板_lvgl移植到linux-CSDN博客

一、环境

1、平台:rk3568

2、开发板: ATK-RK3568正点原子板子

3、环境:buildroot

4、虚拟机:正点原子提供的ubuntu 20

二、源码下载

本文档针对LVGL 8.2版本在Linux IMX6ULL开发板上移植LVGL需要下载的源码如下:

lvgl:https://github.com/lvgl/lvgl.git
lv_drivers:https://github.com/lvgl/lv_drivers.git
lv_port_linux_frame_buffer:https://github.com/lvgl/lv_port_linux_frame_buffer.git
lvgl:包含了LVGL基本的源码,以及官方给出的LVGL demo;

lv_drivers:包含了大多数设备的显示控制器和触摸驱动程序,主要用来指定显示屏使用哪一种驱动框架(包括FB、DRM等驱动程序框架);

lv_port_linux_frame_buffer:主函数文件所在的目录,整个工程的主文件夹,lvgl和lv_drivers都应放在此目录下。

可以在具有代理服务器的情况下克隆上述三个仓库的源码:

git clone -b release/v8.2 https://github.com/lvgl/lv_port_linux_frame_buffer.git

git clone -b release/v8.2 https://github.com/lvgl/lvgl.git

git clone -b release/v8.2 https://github.com/lvgl/lv_drivers.git

三、移植过程

先将下载好的源码文件夹lvgl和lv_drivers放在lv_port_linux_frame_buffer的路径下;

1、修改lv_conf.h

打开lv_conf.h,第15行,检查文件是否使能,如果没使能,使能该文件,应该将**#if后面的0改为1**。

第27行,将宏LV_COLOR_DEPTH设置为32

根据测试得知正点原子的MIPILCD是32位,所以改成32

第48至67行的代码片段,将LV_MEM_CUSTOM设置为1,则表示使能显存分配

第80行至84行的代码,设置的是屏幕的刷新时间,单位是毫秒(ms)。我们将其中的30ms改为10ms。

第86至92行的代码,设置的是心跳时间,在主函数文件main.c中有一个custom_tick_get的函数,用于之后的事件响应编程和定时任务编程,若此功能没有使能,则点击屏幕上的组件将没有响应

第671行,为了看到移植的效果,我们先使能官方的demo,来检测是否移植成功:

2、修改lv_drv_conf.h

此文件用于配置显示屏所使用的底层驱动,我们使用FB驱动框架来点亮LCD屏,所以对于此文件的修改,有测试过DRM但没编译成功,DRM自行修改测试。

第11行,先使能此文件,将"#if 0"改为"#if 1":

第318行,使能FBDEV的驱动,将宏USE_FBDEV改为1:

第441行,使能鼠标或者触摸板作为evdev界面,将USE_EVDEV设置为1:

第450行,指定evdev设备节点的路径,把/dev/input/event0修改成/dev/input/event2

对应于event文件,然而/dev/input下有可能有多个event文件,此时我们可以用hexdump命令来检测:

hexdump event1

运行上面的命令之后,再点击LCD屏一下,如果发现终端输出了一大堆十六进制数,则说明LCD的evdev的输入设备节点是它,否则,就换一个event文件进行测试。

第453行,设置显示屏的分辨率EVDEV_HOR_MAX和EVDEV_VER_MAX,我使用的是5.5寸MIPI屏,分辨率为720*1280。所以两个宏分别设置为720和1280。

evdev是输入设备的配置,只有使能了evdev,触摸屏幕才会有反应

3. 修改main.c文件

在main.c文件里面,我们主要修改其中包含的头文件、使用的驱动类型,以及demo函数等。

第10行,修改显示缓冲区的大小,即720*1280,分辨率的大小:

第27至34行的代码部分,这一段是初始化和设置显示驱动的部分:

第46至50行,我们不使用鼠标作为LCD显示屏的输入设备,所以mouse部分将它注释掉:

第54行,这里面告诉了我们搭建整个LVGL应用程序的函数为lv_demo_widgets,通过查看main.c的头文件就可以知道,这个函数在"lvgl/demos/widgets/lv_demo_widgets.c"中定义。

4、修改Makefile文件

第4行,将CC编译器修改为自己的交叉编译器,修改如下:

注释掉第20行,使其不能编译鼠标输入设备的源码:

四、源码编译

源码修改完成之后,把源码拷贝进虚拟机,虚拟机先运行下面命令,设置交叉工具链:

export CC=/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-gcc

没设置,会出现下面错误:

执行后,编译:

make -j4

把demo_test上传到开发板上运行

结果正常

如有侵权,或需要完整代码,请及时联系博主。

相关推荐
Aileen_0v03 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
Rinai_R4 小时前
计算机组成原理的学习笔记(7)-- 存储器·其二 容量扩展/多模块存储系统/外存/Cache/虚拟存储器
笔记·物联网·学习
吃着火锅x唱着歌4 小时前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
ragnwang4 小时前
C++ Eigen常见的高级用法 [学习笔记]
c++·笔记·学习
胡西风_foxww5 小时前
【es6复习笔记】rest参数(7)
前端·笔记·es6·参数·rest
胡西风_foxww8 小时前
【es6复习笔记】函数参数的默认值(6)
javascript·笔记·es6·参数·函数·默认值
胡西风_foxww8 小时前
【es6复习笔记】生成器(11)
javascript·笔记·es6·实例·生成器·函数·gen
waterme1onY8 小时前
Spring AOP 中记录日志
java·开发语言·笔记·后端
2401_879103689 小时前
24.12.25 AOP
java·开发语言·笔记
索然无味io10 小时前
跨站请求伪造之基本介绍
前端·笔记·学习·web安全·网络安全·php