专栏中心

EEPW首页 > 专栏 > Verdin AM62 LVGL 移植

Verdin AM62 LVGL 移植

发布人:toradex 时间:2024-04-29 来源:工程师 发布文章

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_on_am62.png 

 

总结

文章介绍了如何将 LVGL 移植到 Verdin AM62 模块上,由于底层显示驱动已经在 Linux 中配置,移植过程并不涉及硬件驱动,该方法同样也适用于除了 AM62 以外的其他模块。

 

参考

· How to build LVGL applications using STM32CubeIDE

· LVGL Set up a project


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: ARM LVGL Linux AM62 TI Toradex Verdin

相关推荐

边缘 AI 加速的 Arm Cortex‑M0+ MCU 如何为电子产品注入更强智能

WinCE+ARM开发及关键技术 下

视频 2009-10-22

AI 数据中心继续扩张,电源和光互连都在升级

Arm财报过山车:营收创纪录,股价跌7%

三步搞定隔离式放大器选择|隔离、供电、量程

arm学习资料

资源下载 2007-12-03

ARM开发详解

ARM嵌入式软件编程经验谈

Arm宣布推出Performix,为开发者带来 AI 时代必备的可扩展性能

ARM Axion 处理器加持谷歌第八代 TPU,云端全面转向智能体 AI 架构

WinCE+ARM开发及关键技术 上

视频 2009-10-22

最新ARM技术和嵌入式技术发展动态 下

视频 2009-10-22

安谋科技Arm China与国民技术签署Arm Total Access授权许可协议,加速AI时代MCU灵活创新与高效落地

倾情奉献:MSP430汇编指令集(中文),详解带实例!

ARM 展示小型低功耗上网本样品

视频 2009-03-16

Arm CEO:AI智能体将推动CPU核心数升至 512

网络与存储 2026-05-11

人形机器人的触觉与语音能力正飞速提升

Arm遭遇监管危机:FTC针对其技术授权启动反垄断调查

2026-05-18

最新ARM技术和嵌入式技术发展动态 中

视频 2009-10-22
更多 培训课堂
更多 焦点
更多 视频

技术专区