移植lvgl v9.2至任何嵌入式Linux设备

前言

LVGL 库迭代太频繁了,wo干!每次隔段时间打开,库的版本就不一样,这下好了,听说LVGL 9.2版本的库是持久版本(稳定款),那就浅浅搞个移植,只要是跑Linux(通吃款😊)。

交叉编译lvgl源码

备注:这里源码指的是 lvgl官方 提供的 LVGL on top of Linux graphics stack 方案。

获取lvgl源码

在 Ubuntu 中,新建终端,创建一个目录 ~/lvgl_v9.2 用于存放lvgl源码。

ubuntu@ubuntu2004:~$ mkdir lvgl_v9.2
ubuntu@ubuntu2004:~$ cd lvgl_v9.2
ubuntu@ubuntu2004:~/lvgl_v9.2$

在当前目录下,执行以下指令,获取lvgl源码。

git clone https://github.com/lvgl/lv_port_linux.git
cd lv_port_linux/
git submodule update --init --recursive

有这么一些文件:

ubuntu@ubuntu2004:~/lvgl_v9.2/lv_port_linux$ tree -L 1
.
├── backends
├── CMakeLists.txt
├── docker
├── LICENSE
├── lv_conf.defaults
├── lv_conf.h
├── lvgl
├── main.c
├── Makefile
├── manifest.json
├── mouse_cursor_icon.c
├── README.md
└── scripts

4 directories, 9 files

交叉编译工具准备

交叉编译工具链是有的吧😏

在目标设备上运行 lvgl 例程,需要使用相应的交叉编译工具来编译例程。这里举个例子,用的开发板是百问网的RK3568,工具链如下:

/home/ubuntu/100ask-RK3568-SDK/rk3568_4.19_v1.3.2/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc

在下面目录中,创建 toolchain.cmake ,目的是方便用于指定交叉编译工具,

ubuntu@ubuntu2004:~/lvgl_v9.2/lv_port_linux$ vi toolchain.cmake

根据上面提到的交叉编译工具以及其绝对路径,填入以下内容,

# 这两条有没有都无所谓
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm64)

# 指定交叉编译工具
set(tools "/home/ubuntu/100ask-RK3568-SDK/rk3568_4.19_v1.3.2/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu")
set(CMAKE_C_COMPILER ${tools}/bin/aarch64-none-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/aarch64-none-linux-gnu-g++)

填写完成后,保存退出。

编译例程

指定交叉编译工具之后,为了更加方便执行编译操作,在下面的目录中,编写一个编译小脚本 build.sh

ubuntu@ubuntu2004:~/lvgl_v9.2/lv_port_linux$ vi build.sh

填入以下内容,

rm -rf build
mkdir -p build
cd build/
cmake -DCMAKE_TOOLCHAIN_FILE="../toolchain.cmake" ..
make -j32

如果不清楚以上内容的作用,建议了解cmake一般是如何编译程序。照着复制就好啦😂。

填写完成后,保存退出。

接着执行以下指令,为脚本 build.sh 设置执行权限,

ubuntu@ubuntu2004:~/lvgl_v9.2/lv_port_linux$ sudo chmod +x build.sh

一切准备就绪,启动脚本编译程序,

注意:

cmake 版本要大于 3.12.4,否则编译报错(应该是会下载cmake的吧😏)

ubuntu@ubuntu2004:~/lvgl_v9.2/lv_port_linux$ ./build.sh

在这里插入图片描述

编译完成后,应用程序 lvglsim ,保存在当前目录 bin/ 文件下。

ubuntu@ubuntu2004:~/lvgl_v9.2/lv_port_linux/bin$ ls
lvglsim
ubuntu@ubuntu2004:~/lvgl_v9.2/lv_port_linux/bin$ file lvglsim 
lvglsim: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, with debug_info, not stripped
ubuntu@ubuntu2004:~/lvgl_v9.2/lv_port_linux/bin$

上传程序并运行

编译出应用程序,想办法把它放入开发板里面。

添加触摸功能

在 lvgl 源码上添加触摸支持比较简单,在 Ubuntu 中,进入源码路径/home/ubuntu/lvgl_v9.2/lv_port_linux,在配置文件 lv_conf.h 里,启动下面的宏。

/*Driver for evdev input devices*/
#define LV_USE_EVDEV    1

在这里插入图片描述

修改完成后,保存退出,执行 build.sh,重新编译程序。

进入开发板终端,需要先设置环境变量,指定触摸设备节点,

root@RK356X:/mnt/udisk# export LV_LINUX_EVDEV_POINTER_DEVICE="/dev/input/event2"

然后即可运行应用程序lvglsim 。好了,学会移植,后面的开发就不是问题了。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐