Verdin AM62 LVGL 移植

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/584046.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

币圈Cryptosquare论坛

Cryptosquare综合性资讯论坛汇集了币圈新闻、空投信息、社会热点以及与Web3相关的工作信息。让我们一起解锁加密世界的种种可能性&#xff0c;探索Cryptosquare论坛带来的精彩&#xff01; 币圈新闻板块&#xff1a; Cryptosquare论坛的币圈新闻板块是用户获取最新加密货币行业…

人工 VS AGV无人搬运机器人,AGV赋能中国智能制造

agv 机器人作为智能制造的重要抓手&#xff0c;正在渗透到各个传统行业&#xff0c;成为我国制造业转型升级的焦点。未来&#xff0c;智能AGV将不仅仅是简单的把货物搬运到指定的位置&#xff0c;而是要把5G技术、大数据、物联网、云计算等贯穿于产品的设计中&#xff0c;让智能…

【Java EE】日志框架(SLF4J)与门面模式

文章目录 &#x1f340;SLF4j&#x1f333;门面模式(外观模式)&#x1f338;门面模式的定义&#x1f338;门面模式的模拟实现&#x1f338;门面模式的优点 &#x1f332;关于SLF4J框架&#x1f338;引入日志门面 ⭕总结 &#x1f340;SLF4j SLF4J不同于其他⽇志框架,它不是⼀个…

LLM之RAG理论(十一)| 面向生产的RAG应用程序的12种调整策略指南

本文对文本RAG涉及到的主要12种关键“超参数”进行简单总结&#xff0c;主要包括摄取阶段&#xff08;数据清洗、数据分块、embedding模型选择、元数据过滤、多重索引和索引算法&#xff09;和推理阶段【检索和生成】&#xff08;查询转换、检索参数、高级检索策略、重排序、大…

React的数据Mock实现

在前后端分类的开发模式下&#xff0c;前端可以在没有实际后端接口的支持下先进行接口数据的模拟&#xff0c;进行正常的业务功能开发 1. 常见的Mock方式 2. json-server实现Mock 实现步骤&#xff1a; 项目中安装json-server npm i -D json-server准备一个json文件 {"…

大数据开发工作中的数仓设计(Hadoop,hive ,mysql )

1.HUE工具介绍使用 HUE是CDH提供一个hive和hdfs的操作工具&#xff0c;在hue中编写了hiveSQl也可以操作hdfs的文件 http://主机名字:端口号 hdfs的web访问端口 http://主机名字:端口号 hdfs的程序访问端口 进入后确保hdfs hive yarn 开启 在点击hue开启 在这里面也可以进行h…

记录k8s以docker方式安装Kuboard v3 过程

原本是想通过在k8s集群中安装kuboad v3的方式安装kuboard&#xff0c;无奈在安装过程中遇到了太多的问题&#xff0c;最后选择了直接采用docker安装的方式&#xff0c;后续有时间会补上直接采用k8s安装kuboard v3的教程。 1.kuboard安装文档地址&#xff1a; 安装 Kuboard v3 …

华为 huawei 交换机 配置 MUX VLAN 示例(汇聚层设备)

组网需求 在企业网络中&#xff0c;企业所有员工都可以访问企业的服务器。但对于企业来说&#xff0c;希望企业内部部分员工之间可以互相交流&#xff0c;而部分员工之间是隔离的&#xff0c;不能够互相访问。 如 图 6-4 所示&#xff0c; Switch1 位于网络的汇聚层&#xff0…

【百度Apollo】探索自动驾驶:小白教学如何使用 Dreamview 播放数据包

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、Dreamview 简介二、使用 Dreamview 具体步骤步骤一&#xff1a;进入 Apollo Docker 环境步骤二&#xff…

Qt QThreadPool线程池

1.简介 QThreadPool类管理一个QThread集合。 QThreadPool管理和重新设计单个QThread对象&#xff0c;以帮助降低使用线程的程序中的线程创建成本。每个Qt应用程序都有一个全局QThreadPool对象&#xff0c;可以通过调用globalInstance来访问该对象。 要使用其中一个QThreadPool…

VMware安装ubuntun虚拟机使用桥接模式无法上网问题解决

问题&#xff1a;最近准备使用VMware虚拟机搭建k8s集群服务&#xff0c;因为需要在同一个网段下&#xff0c;我使用桥接的方式&#xff0c;我发现主机在使用有线连接时虚拟机网络连接正常&#xff0c;但是使用无线网就显示连接不上网络。 解决方法 一、查看网络连接&#xff…

软考-信息系统项目管理师-论文技术架构模板(60天备考第26天)

分享一段信息系统项目管理师论文项目技术架构描述的万能模板&#xff0c;供大家参考。距离考试还有二十八天&#xff0c;如果论文写不好的可以加微进论文指导群学习论文写作。 该系统前端基于Vue开发&#xff0c;后端基于java开发&#xff0c;前后端分离部署。整体采用B/S架构&…

【论文阅读笔记】Frequency Perception Network for Camouflaged Object Detection

1.论文介绍 Frequency Perception Network for Camouflaged Object Detection 基于频率感知网络的视频目标检测 2023年 ACM MM Paper Code 2.摘要 隐蔽目标检测&#xff08;COD&#xff09;的目的是准确地检测隐藏在周围环境中的目标。然而&#xff0c;现有的COD方法主要定位…

java中的对象拷贝(包括BeanUtils和Mapstruct)

对象拷贝 借鉴&#xff1a; https://blog.csdn.net/weixin_43811057/article/details/122853749https://blog.csdn.net/weixin_42036952/article/details/105697234?spm1001.2101.3001.6650.8&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogComme…

目标检测应用场景—数据集【NO.33】血细胞图像分类和检测数据集

写在前面&#xff1a;数据集对应应用场景&#xff0c;不同的应用场景有不同的检测难点以及对应改进方法&#xff0c;本系列整理汇总领域内的数据集&#xff0c;方便大家下载数据集&#xff0c;若无法下载可关注后私信领取。关注免费领取整理好的数据集资料&#xff01;今天分享…

LVS/NAT工作模式介绍及配置

1.1 LVS/NAT模式工作原理 LVS&#xff08;Linux Virtual Server&#xff09;的网络地址转换&#xff08;NAT&#xff09;模式是一种在网络层&#xff08;第四层&#xff09;实现负载均衡的方法。在NAT模式中&#xff0c;Director Server&#xff08;DS&#xff09;充当所有服务…

leetcode51.N皇后(困难)-回溯法

思路 都知道n皇后问题是回溯算法解决的经典问题&#xff0c;但是用回溯解决多了组合、切割、子集、排列问题之后&#xff0c;遇到这种二维矩阵还会有点不知所措。 首先来看一下皇后们的约束条件&#xff1a; 不能同行不能同列不能同斜线 确定完约束条件&#xff0c;来看看究…

UE5 体积云

写好的体积材质放这里面 效果如上 Begin Object Class/Script/UnrealEd.MaterialGraphNode Name"MaterialGraphNode_4"Begin Object Class/Script/Engine.MaterialExpressionVectorParameter Name"MaterialExpressionVectorParameter_0"End ObjectBegin O…

人工智能_大模型044_模型微调004_随机梯度下降优化_常见损失计算算法_手写简单神经网络_实现手写体识别---人工智能工作笔记0179

然后对于,梯度下降,为了让训练的速度更好,更快的下降,又做了很多算法,可以看到 这里要知道Transformer中最常用的Adam 和 AdamW这两种算法. 当然,这些算法都是用于优化神经网络中的参数,以最小化损失函数。下面我会尽量以通俗易懂的方式解释它们的原理和适用场景。 1. **L-…

关于电路设计的一些基本知识点

目录 一&#xff0c;BUCK降压电路1.1 布局与布线1.1.1 高频电流环路1.1.2 小信号的地1.1.3 其他要注意的地方 1.2 输入输出电容&#xff0c;电感的选择1.2.1 电感的选择1.2.2 输入输出电容的选择 三&#xff0c;电源芯片3.1 LM2596,LM2576 四&#xff0c;运放电路设计4.1 运放的…