写在前面
刚开始编译LVGL demo的时候出现了很多问题,想记录下来分享一下我的解决思路
LVGL执行结果

看到这个结果已经激动的不行了!!(终于能正常运行了)

硬件设备
开发板:鲁班猫4
Soc芯片:RK3588S2
板载系统:Debian lite版 (Linux内核版本5.10.160)
mipi屏幕:7寸LCD电容屏(1024x600)

LVGL移植
1.1 下载源码
在Ubuntu虚拟机中,克隆github最新的官方源码(我的是v9.4.0),需要克隆以下两个目录:
- lv_port_linux(demo目录,这个就是整个项目的一个框架目录,在最后编译整个项目的时候就是在这个目录下使用cmake编译)
- lvgl(LVGL库的核心源码)
lv_port_linux地址:https://github.com/lvgl/lv_port_linux
lvgl地址:https://github.com/lvgl/lvgl
将克隆的lvgl目录替换掉lv_port_linux目录下的lvgl文件夹
最终的demo目录下的文件情况如下(build文件夹和build.sh是后面自己加的):

移植完的这个工程,目前只支持显示,不支持触摸屏的
1.2 修改lv_conf.h配置文件
修改LV_COLOR_DEPTH为24,指定触摸屏色彩格式为RGB888(对应自己触摸屏的像素格式)

修改LV_USE_EVDEV为1,开启触摸功能

其他的根据自己的实际情况来修改
注意:LVGLv9.3.0之后不需要在开发板终端手动指定触摸设备节点了
交叉编译(Cmake)
2.1 前期准备
在Ubuntu虚拟机上,
(1)安装gcc和g++交叉编译工具链(gcc-aarch64-linux-gnu和g++-aarch64-linux-gnu),aarch64为目标平台的架构(要根据自己的开发板平台架构选择)
sudo apt update
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
(2)安装cmake,注意要保证版本高于lvgl项目目录下CMakeLists.txt文件中指定的最低版本
下方是CMakeLists.txt文件,第一行就是指定了LVGL要求的cmake最低版本

2.2 修改Cmake工具链文件
使用vi命令修改lvgl demo目录下的user_cross_compile_setup.cmake文件
- 要将SYSTEM_PROCESSOR的arm改为aarch64,因为RK3588是arm64位。
- 指定C和C++的交叉编译器地址:已经安装好的aarch64交叉编译工具链地址
- 因为我们不使用野火鲁班猫SDK中的交叉编译工具链,可以不用设置最下面的STAGING_DIR
建议不要使用野火鲁班猫SDK中的交叉编译工具链!!之前用了后面我出现了很多问题

2.3 开始编译
编写shell脚本build.sh,会在demo目录下创建build子目录,在里面生成Makefile文件,并将编译后的相关文件和可执行文件保存在里面
#! /bin/bash
rm -rf build
mkdir -p build
cd build/
cmake -DCMAKE_TOOLCHAIN_FILE=../user_cross_compile_setup.cmake ..
make -j8

编译后的可执行文件就保存在build/bin/目录下
2.4 运行
- 将可执行文件lvglsim通过MobaXterm上传到板卡上(需要使用SSH连接板卡)
- 加权限后执行
chmod +x ./lvglsim #添加可执行权限
./lvglsim #运行可执行文件
2.5 运行效果


触摸效果正常

真会这么顺利吗?no no no(如果直接成功那你是这个),以下是解决思路分享
遇到的问题
3.1 /usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: cannot find -levdev
问题解析:在make最后时刻,链接库的时候提示cannot find -levdev,表示在交叉编译器的库目录里找不到目标平台(aarch64)的libevdev库文件
注意:这个不是说ubuntu虚拟机环境下找不到这个库(我之前还在懵逼了,明明apt install这个库了。之前对交叉编译这个概念理解的不是特别通透)

libevdev库官网:libevdev
解决方法:在Ubuntu虚拟机中,下载tar.xz文件后解压,进入目录,执行./configure命令,注意要指定目标平台--host,并指定gcc编译器为交叉编译工具的gcc(不然默认是编译成x86平台),即通过CC=交叉编译工具gcc的路径。这里的--prefix是路径前缀,库编译后的so文件会安装在这个前缀路径下的lib目录下
![]()
最后make && sudo make install,这样交叉编译工具就可以找到这个库了
3.3 Error: cannot open framebuffer device: No such file or directory
这个是mipi触摸屏的驱动没有正确打开,或物理接口连接不良
开启驱动:只需要修改下面的配置文件即可
sudo vi /boot/uEnv/uEnv.txt #修改配置文件
注释掉vp3下面的dsi1-1024x600-overlay.dtbo前面的#号即可(选择自己触摸屏的型号)
这是使用设备树插件的方式,开启触摸屏驱动。最后需要保存配置文件,重启系统

注意:鲁班猫4板卡上的有两个MIPI DSI接口,正面为dsi1,背面为dsi0
1430






