"); //-->
By Toradex胡珊逢
简介LVGL 是一个免费、开源的图形库,能够在嵌入式设备如上使用 C/C++ 语言轻松绘制图形。由于这是一轻量级图形库,最初广泛被 MCU 处理器使用。随着功能完善,在性能和资源更充裕的 MPU 上也逐渐被使用。文章将介绍如何在 Verdin AM62 计算机模块上移植 LVGL。
硬件介绍
Verdin AM62是一款基于 TI AM623/625 SoC 的 Arm 计算机模块,提供多达 4 个 Cortex-A53 内核和一个 Cortex-M4 处理器。最高 RAM 和 Flash 分别为 2GB 和 16GB。支持常见的 I2C、SPI、CAN 和 双路以太网等。模块可选配板载 WIFI/BT 模块。
软件说明
Verdin AM62 提供使用 Yocto Project 生成的 Linux 镜像。该系统使用 wayland 作为底层图形框架。而 LVGL 目前也已经能够支持 wayland。无需移植硬件显示控制器驱动。如果在 MCU 上使用 LVGL,通常选择所使用的控制器,如 ILI9341。相关内容可以参考我们之前发布的文章。
LVGL 移植
LVGL 的编译需要用到 Linux SDK。可以参考该页面,使用 Yocto Project 生成 SDK 文件后进行安装。
首先,使用下面命令下载 LVGL v8.1。
git clone --recursive https://github.com/lvgl/lv_port_pc_eclipse.git
cd lv_port_pc_eclipse/
git checkout -b WORKING origin/release/v8.1
git submodule init
git submodule update
在 lv_port_pc_eclipse 目录中,打上补丁文件。
git apply -p1 lvgl_v8.1_verdin_am62.patch
LVGL 使用 cmake 编译。在 CMakeLists.txt 中添加了 Linux SDK 的安装目录,以及相关的头文件在 SDK 中对应的位置。
+set(SDK_ROOT "$ENV{SDKPATH}")
+include_directories(${PROJECT_SOURCE_DIR})
+include_directories(${SDK_ROOT}/sysroots/aarch64-tdx-linux/usr/include/libdrm)
LVGL 包含三部分代码,lvgl 图形库实现代码,lv_drivers 显示驱动,以及演示用的 lv_demos 代码。在 CMakeLists.txt 中定义编译目标。
+ target_compile_definitions(lvgl
+ target_compile_definitions(lv_drivers
+ target_compile_definitions(lv_demos
关于 lvgl 自身功能和属性的配置在 lv_conf.h 中管理。对于资源有限的 MCU 这非常有用。禁用不需要的的功能,能够有效减少编译后二进制文件的大小,并降低 RAM 开销。在 Arm Linux 则没有这样的限制,还可以充分利用 Linux 资源。例如 lvgl 使用 Linux 平台中 glibc 提供的内存管理 API。
# define LV_MEM_CUSTOM_INCLUDE <stdlib.h>
# define LV_MEM_CUSTOM_ALLOC malloc
# define LV_MEM_CUSTOM_FREE free
# define LV_MEM_CUSTOM_REALLOC realloc
lv_drv_conf.h 主要配置 lvgl 输出所需的显示驱动属性。Verdin AM62 的 Linux 中已经实现了显示硬件驱动的配置,lvgl 只需要在 wayland 完成渲染显示即可,在 lv_drv_conf.h 不需要太多的设置,这里只设定了显示窗口大小。
+/* Demo Resolution */
+# define SDL_HOR_RES 800
+# define SDL_VER_RES 400
文章使用 lvgl 自带的 demo 作为演示,lv_demo_conf.h 中 demo 外观。
#define LV_USE_DEMO_MUSIC 1
#if LV_USE_DEMO_MUSIC
-# define LV_DEMO_MUSIC_LANDSCAPE 0
+# define LV_DEMO_MUSIC_SQUARE 0
+# define LV_DEMO_MUSIC_LANDSCAPE 1
+# define LV_DEMO_MUSIC_ROUND 0
main.c 中初始化 lvgl 相关的 API,并利用 SDL 线程每隔 5ms 调用 lv_tick_inc() 为 lvgl 提供计时。
static int tick_thread(void *data) {
(void)data;
while(1) {
SDL_Delay(5);
lv_tick_inc(5);
}
return 0;
}
通过 SDL 把触摸屏作为 lvgl 的输入设备。
indev_drv_1.read_cb = sdl_mouse_read;
lv_indev_t *mouse_indev = lv_indev_drv_register(&indev_drv_1);
最后,使用 Linux SDK 中的 environment-setup-aarch64-tdx-linux 初始化编译环境后完成编译。
source ~/LinuxSDK/v6-am62/environment-setup-aarch64-tdx-linux
cmake .
make
将生成的 main 二进制文件复制到 Verdin AM62 上运行即可。
总结
文章介绍了如何将 LVGL 移植到 Verdin AM62 模块上,由于底层显示驱动已经在 Linux 中配置,移植过程并不涉及硬件驱动,该方法同样也适用于除了 AM62 以外的其他模块。
参考
· How to build LVGL applications using STM32CubeIDE
· LVGL Set up a project
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
基于ARM-Linux的MiniGUI的仿真与移植
边缘 AI 加速的 Arm Cortex‑M0+ MCU 如何为电子产品注入更强智能
uClinux系统分析
WinCE+ARM开发及关键技术 下
AI 数据中心继续扩张,电源和光互连都在升级
Arm财报过山车:营收创纪录,股价跌7%
Linux系统的DS18B20驱动程序源代码
三步搞定隔离式放大器选择|隔离、供电、量程
TIP120,TIP121,TIP122,TIP125,TIP126,TIP127引脚图
arm学习资料
ARM开发详解
ARM嵌入式软件编程经验谈
Arm宣布推出Performix,为开发者带来 AI 时代必备的可扩展性能
ARM Axion 处理器加持谷歌第八代 TPU,云端全面转向智能体 AI 架构
WinCE+ARM开发及关键技术 上
最新ARM技术和嵌入式技术发展动态 下
安谋科技Arm China与国民技术签署Arm Total Access授权许可协议,加速AI时代MCU灵活创新与高效落地
倾情奉献:MSP430汇编指令集(中文),详解带实例!
嵌入式LINUX开发套件常见问题解答
基于Linux平台的温度传感器DS18B20驱动程序设计
ARM 展示小型低功耗上网本样品
Arm CEO:AI智能体将推动CPU核心数升至 512
人形机器人的触觉与语音能力正飞速提升
Arm遭遇监管危机:FTC针对其技术授权启动反垄断调查
Linux系统下USB摄像头驱动开发
uClinux系统分析
[转帖]NeuLinux嵌入式Linux开发平台
MSP430 IAR 3.42环境使用指南(中文完整版!)
最新ARM技术和嵌入式技术发展动态 中
Linux内核源代码的阅读和工具介绍(aqian转)