移植lvgl v9.2至任何嵌入式Linux设备
LVGL 库迭代太频繁了,wo干!每次隔段时间打开,库的版本就不一样,这下好了,听说LVGL 9.2版本的库是持久版本(稳定款),那就浅浅搞个移植,只要是跑Linux(通吃款😊)。
移植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 。好了,学会移植,后面的开发就不是问题了。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)