在第三篇里,我们介绍了如何用 liblvgl-sdl2-dev 在桌面上运行 LVGL。
这在开发阶段能让你很快上手,但还有另一种用法,和 LVGL 实际运行的各种嵌入式设备直接相关。
瑞萨 RZ/G2L 原生支持 Ubuntu,这意味着同样的一条 apt install 在它上面也能用。
在这篇文章里,我会带你一步步把 LVGL 的 3D 卡车 demo 跑在板子的 Mali GPU 上。
因为 LVGL 可以直接通过 apt 安装,我们不需要自己构建 LVGL,也就省掉了一整套交叉编译环境。
这块板子支持的 Ubuntu 镜像是 Server 版本,所以我们不会有桌面环境。反正我们也用不上, 因为我们会通过 DRM 直接驱动 GPU。
从开机的板子到卡车 demo#
这些命令都需要在板子上执行,通过 SSH 或者串口控制台都行。如果你还没有把 Ubuntu 装上去, 可以先跳到后面,装好再回来。
1. 安装构建工具
sudo apt update
sudo apt install software-properties-common build-essential cmake gitbashsoftware-properties-common 提供 add-apt-repository,build-essential 则提供编译器。
2. 添加两个 PPA
sudo add-apt-repository ppa:ubuntu-on-renesas/public-ppa
sudo add-apt-repository ppa:lvgl/lvglbash第一个提供瑞萨的 GPU 驱动,第二个就是第三篇里LVGL 自己的 PPA。
3. 安装 GPU 驱动和 LVGL
sudo apt install libmali-renesas-rz-g2l-g2lc liblvgl-drm-3d-devbashliblvgl-drm-3d-dev 是启用了 3D 的 LVGL DRM 构建,libmali-renesas-rz-g2l-g2lc 则是板子上 Mali GPU 的用户态驱动。
两者都是预编译好的 ARM64 软件包,所以这一步只是把它们下载下来,不用编译任何东西。
4. 获取 Linux 移植工程
git clone https://github.com/lvgl/lv_port_linux.git
cd lv_port_linux
git checkout bacde48d98949689379f70ca7fa471bd270613a5bash这里我会用 lv_port_linux,它是 LVGL 在 Linux 上的参考工程:
它帮你处理显示和输入设备的选择,让你很快就能跑起一个完整的 LVGL 应用程序。
5. 构建 demo
cmake -B build -DCMAKE_BUILD_TYPE=Release -DLVGL_USE_INSTALLED=ON -DCONFIG_LV_USE_DEMO_TRUCK=ON
cmake --build build -j$(nproc)bash关键的是 LVGL_USE_INSTALLED=ON 这个开关:它让工程去用 apt 装好的那份 LVGL,而不是编译自带子模块里的副本。
CONFIG_LV_USE_DEMO_TRUCK=ON 则选中了 3D 卡车 demo。
6. 运行
./build/bin/lvglsimbash
这是一个由 GPU 渲染的 3D 模型,在 1024x768 分辨率下大约有 30 FPS。
这个 demo 不需要任何特殊权限就能渲染。如果你还需要输入设备,就要把你的用户加入 input 组:
sudo usermod -aG input $USERbash然后退出重新登录(或者在当前 shell 里执行 newgrp input)。
配置 Ubuntu#
Canonical 为瑞萨的 IoT 开发板提供 Ubuntu 镜像,其中就包括 RZ/G2L:
- 镜像在 ubuntu.com/download/renesas-iot
- 烧录 SD 卡和首次启动的步骤见 Quick start guide to RZ/G2L with classic Ubuntu images(PDF)
RZ/G2L 的内存不够流畅地跑一整套 GNOME 桌面,所以请选 Ubuntu Server。 这里本来也用不上桌面:LVGL 通过 DRM/KMS 直接渲染到显示屏,3D 渲染则走同一条路径上的 EGL。
整套流程里没有任何 Wayland 合成器或者 X server。
板子启动、拿到 shell 之后,回到上面的步骤,就能把整个应用程序跑起来。
用 apt 做部署#
预编译的软件包本身是给开发者用的便利工具,省掉了自己编译依赖的功夫。在这里,我们用它把库直接部署到目标设备上; 而且目标板上就有编译器,应用程序也可以就地编译。
LVGL 为 x86_64 和 ARM64 都发布了可以直接下载的软件包,所以这里跑的是同一批 .deb 文件,来自同一个 PPA,
和第三篇里装在桌面上的那些一模一样。变的只是装哪个包:用 liblvgl-drm-3d-dev 代替 liblvgl-sdl2-dev,
因为板子上没有桌面可以开窗口。已发布的这 8 个软件包,存在的意义正是让这种切换只需要改一行里的一个词。
直接在目标板上编译#
通常来说,这样一个应用程序会在主机上交叉编译:一套交叉工具链,一个装有目标平台头文件和库的 sysroot, 一个 CMake 工具链文件,最后再加一步拷贝。这套做法当然是可行的,尤其是当你想按自己的需求裁剪 LVGL 配置、 再把应用程序部署出去的时候。
而这里,这些步骤全都省掉了。因为我们跑的是 Ubuntu,直接在目标板上装一个编译器就行; 而且 LVGL 已经是预编译的,我们不用操心在双核 Cortex-A55 上编译整个库, 因为构建这个应用程序用不到 20 秒:
$ time cmake --build build -j$(nproc)
[ 6%] Building C object demos/lv_demo_truck/CMakeFiles/lv_demo_truck_ui.dir/lv_demo_truck.c.o
[ 13%] Building C object CMakeFiles/lvgl_linux.dir/src/lib/driver_backends.c.o
...
[100%] Linking CXX executable bin/lvglsim
[100%] Built target lvglsim
real 0m17.127sbash准确地说,是 17 秒。
需要说明的是,在这块板子上编译 LVGL 本身则是另一回事了。
小结#
这篇文章为 LVGL 的构建与安装系列画上了句号。我们先看到 LVGL 现在可以自动拉取自己的依赖,
接着是把自己链接了哪些库记录下来,这才让一个
正确的 .deb 成为可能。最后我们落在了 LVGL 最擅长的地方:真实的嵌入式设备上。
如果某个软件包出了问题,或者你希望我们把 LVGL 发布到别的开发板或别的配置上,欢迎到 github.com/lvgl/lvgl/issues 提 issue。
- 50 行代码上手 LVGL v9.6
- 安装 LVGL,依赖一并奉上
- apt install lvgl
- 4在 RZ/G2L 上用 Ubuntu 运行 LVGL当前位置


