RK3568笔记十七:LVGL v8.2移植

news2024/12/25 9:31:47

若该文为原创文章,转载请注明原文出处。

本文介绍嵌入式轻量化图形库LVGL 8.2移植到Linux开发板ATK-RK3568上的步骤。

主要是参考大佬博客:

LVGL v8.2移植到IMX6ULL开发板_lvgl移植到linux-CSDN博客

一、环境

1、平台:rk3568

2、开发板: ATK-RK3568正点原子板子

3、环境:buildroot

4、虚拟机:正点原子提供的ubuntu 20

二、源码下载

本文档针对LVGL 8.2版本在Linux IMX6ULL开发板上移植LVGL需要下载的源码如下:

lvgl:https://github.com/lvgl/lvgl.git
lv_drivers:https://github.com/lvgl/lv_drivers.git
lv_port_linux_frame_buffer:https://github.com/lvgl/lv_port_linux_frame_buffer.git
lvgl:包含了LVGL基本的源码,以及官方给出的LVGL demo;

lv_drivers:包含了大多数设备的显示控制器和触摸驱动程序,主要用来指定显示屏使用哪一种驱动框架(包括FB、DRM等驱动程序框架);

lv_port_linux_frame_buffer:主函数文件所在的目录,整个工程的主文件夹,lvgl和lv_drivers都应放在此目录下。

可以在具有代理服务器的情况下克隆上述三个仓库的源码:

git clone -b release/v8.2 https://github.com/lvgl/lv_port_linux_frame_buffer.git
git clone -b release/v8.2 https://github.com/lvgl/lvgl.git
git clone -b release/v8.2 https://github.com/lvgl/lv_drivers.git

三、移植过程

先将下载好的源码文件夹lvgl和lv_drivers放在lv_port_linux_frame_buffer的路径下;

1、修改lv_conf.h

打开lv_conf.h,第15行,检查文件是否使能,如果没使能,使能该文件,应该将#if后面的0改为1

第27行,将宏LV_COLOR_DEPTH设置为32

根据测试得知正点原子的MIPILCD是32位,所以改成32

第48至67行的代码片段,将LV_MEM_CUSTOM设置为1,则表示使能显存分配

第80行至84行的代码,设置的是屏幕的刷新时间,单位是毫秒(ms)。我们将其中的30ms改为10ms。

第86至92行的代码,设置的是心跳时间,在主函数文件main.c中有一个custom_tick_get的函数,用于之后的事件响应编程和定时任务编程,若此功能没有使能,则点击屏幕上的组件将没有响应

第671行,为了看到移植的效果,我们先使能官方的demo,来检测是否移植成功:

2、修改lv_drv_conf.h

此文件用于配置显示屏所使用的底层驱动,我们使用FB驱动框架来点亮LCD屏,所以对于此文件的修改,有测试过DRM但没编译成功,DRM自行修改测试。

第11行,先使能此文件,将“#if 0”改为“#if 1”:

第318行,使能FBDEV的驱动,将宏USE_FBDEV改为1:

第441行,使能鼠标或者触摸板作为evdev界面,将USE_EVDEV设置为1:

第450行,指定evdev设备节点的路径,把/dev/input/event0修改成/dev/input/event2

对应于event文件,然而/dev/input下有可能有多个event文件,此时我们可以用hexdump命令来检测:

hexdump event1

运行上面的命令之后,再点击LCD屏一下,如果发现终端输出了一大堆十六进制数,则说明LCD的evdev的输入设备节点是它,否则,就换一个event文件进行测试。

第453行,设置显示屏的分辨率EVDEV_HOR_MAX和EVDEV_VER_MAX,我使用的是5.5寸MIPI屏,分辨率为720*1280。所以两个宏分别设置为720和1280。

evdev是输入设备的配置,只有使能了evdev,触摸屏幕才会有反应

3. 修改main.c文件

在main.c文件里面,我们主要修改其中包含的头文件、使用的驱动类型,以及demo函数等。

第10行,修改显示缓冲区的大小,即720*1280,分辨率的大小:

第27至34行的代码部分,这一段是初始化和设置显示驱动的部分:

第46至50行,我们不使用鼠标作为LCD显示屏的输入设备,所以mouse部分将它注释掉:

第54行,这里面告诉了我们搭建整个LVGL应用程序的函数为lv_demo_widgets,通过查看main.c的头文件就可以知道,这个函数在“lvgl/demos/widgets/lv_demo_widgets.c”中定义。

4、修改Makefile文件

第4行,将CC编译器修改为自己的交叉编译器,修改如下:

注释掉第20行,使其不能编译鼠标输入设备的源码:

四、源码编译

源码修改完成之后,把源码拷贝进虚拟机,虚拟机先运行下面命令,设置交叉工具链:

export CC=/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-gcc

没设置,会出现下面错误:

执行后,编译:

make -j4

把demo_test上传到开发板上运行

结果正常

如有侵权,或需要完整代码,请及时联系博主。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java解决下降路径最小和

Java解决下降路径最小和 01 题目 给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列…

net6 core webapi部署到iis

1.設定發佈的選項 2.安裝Hosting Bundle .NET Core 託管捆綁包是 .NET Core 執行時期和ASP.NET Core 模組的安裝程式。該捆綁包允許 ASP.NET Core 應用程式與 IIS 一起運行。 3.設定網站

自动更改由VSCode调试器创建的默认launch.json文件

File -> Preference -> Settings 修改下面的部分

SpringCloud之Feign发送Http请求

文章目录 http客户端Feign使用步骤自定义Feign的配置Feign的性能优化Feign的性能优化-连接池配置 Feign的最佳实践 http客户端Feign Feign的介绍: Feign是一个声明式的http客户端,官方地址:https:/github.com/OpenFeign/feign 其作用就是帮助…

GPT-4对编程开发的支持

在编程开发领域,GPT-4凭借其强大的自然语言理解和代码生成能力,能够深刻理解开发者的意图,并基于这些需求提供精准的编程指导和解决方案。对于开发者来说,GPT-4能够在代码片段生成、算法思路设计、模块构建和原型实现等方面给予开…

openGauss学习笔记-220 openGauss性能调优-确定性能调优范围-查询最耗性能的SQL

文章目录 openGauss学习笔记-220 openGauss性能调优-确定性能调优范围-查询最耗性能的SQL220.1 操作步骤 openGauss学习笔记-220 openGauss性能调优-确定性能调优范围-查询最耗性能的SQL 系统中有些SQL语句运行了很长时间还没有结束,这些语句会消耗很多的系统性能&…

Web项目利用MybatisPlus进行分页查询

之前在写博客系统前台页面的时候,遇到了利用mp进行分页查询的情况,由于涉及到的知识点相对较为重要,固写一篇博客以此巩固。 一、功能需求 在首页和分类页面都需要查询文章列表。 首页:查询所有的文章分类页面:查询…

网络原理-TCP_IP(6)

网络层 在复杂的网络环境中确定一个合适的路径. IP协议 与TCP协议并列,都是网络体系中最核心的协议. 基本概念 主机:配有IP地址,但是不进行路由控制的设备; 路由器:即配有IP地址,又能进行路由控制; 节点:主机和路由器的统称; 协议头格式 4位版本号(version):指定IP协议的版…

基于边缘计算的智能家居能源管理系统

一、项目背景 随着智能家居设备的普及,能源消耗问题日益凸显。为了更有效地管理家庭能源使用,减少浪费,并可能实现能源自给自足,我们提出了基于边缘计算的智能家居能源管理系统 该系统能够实时监控和分析家庭能源消耗数据&#xf…

java 线程安全介绍

所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要解决两个主要的问题:可见性和有序性。 那么,何谓可见性? 多个线程之间是不能互相传递数据通信的,它们之间的沟通只能通过共享变量…

人工智能学习与实训笔记(一):零基础理解神经网络

目录 一、什么是神经网络模型 二、机器学习的类型 2.1 监督学习 2.2 无监督学习 2.3 半监督学习 2.4 强化学习 三、网络模型结构基础 3.1 单层网络 ​编辑 3.2 多层网络 3.3 非线性多层网络 四、 回归问题实操:使用Python和NumPy实现波士顿房价预测任务 一…

云计算基础-虚拟化概述

虚拟化概述 虚拟化是一种资源管理技术,能够将计算机的各种实体资源(如CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来并可供分割、组合为一个或多个逻辑上的资源。这种技术通过在计算机硬件上创建一个抽象层,将单台…

latex 论文表格

问题 latex 中想制作论文常见的表格&#xff0c;整理自己常用模板&#xff0c;与常用命令。 命令 调整行高 \renewcommand{\arraystretch}{1.3}调整列宽 \begin{tabular}{ m{3.1cm}<{\centering} m{0.8cm}<{\centering} m{0.8cm}<{\centering} m{0.8cm}<{\c…

政安晨:【示例演绎】【Python】【Numpy数据处理】快速入门(四)—— 函数方法

准备工作 这是Numpy数据处理的示例演绎系列文章的第四篇&#xff0c;我的前三篇文章为&#xff1a; 政安晨&#xff1a;【示例演绎】【Python】【Numpy数据处理】快速入门&#xff08;一&#xff09;https://blog.csdn.net/snowdenkeke/article/details/136125773政安晨&#…

【数据结构之排序算法】

数据结构学习笔记---010 数据结构之排序算法1、排序的基本概念及其运用1.1、常见排序算法的实现2、插入排序的实现2.1、直接插入排序2.1.1、直接插入排序的实现2.1.1.1、直接插入排序InsertSort.h2.1.1.2、直接插入排序InsertSort.c2.1.1.3、直接插入排序main.c2.1.2、直接插入…

BulingBuling - 《工作中的焦虑》 [ Anxiety at Work ]

工作中的焦虑 帮助团队建立复原力、处理不确定性和完成任务的8项策略 作者&#xff1a;阿德里安-戈斯蒂克、切斯特-埃尔顿和安东尼-戈斯蒂克 Anxiety at Work 8 Strategies to Help Teams Build Resilience, Handle Uncertainty, and Get Stuff Done By Adrian Gostick and…

真实世界不存在了?OpenAI开年王炸,文字生成视频Sora公布

今天&#xff0c;OpenAI在毫无预兆的情况下&#xff0c;悄然更新了网站首页&#xff0c;公布了文字生成视频模型Sora。 我快速在OpenAI的网站上翻看了下&#xff0c;并未找到使用的入口&#xff0c;只能先通过官方文档了解具体的情况。 We’re teaching AI to understand and s…

Vue核心基础3:计算属性和监视属性

1 计算属性 这边以姓名案例&#xff0c;来介绍计算属性 <body><div id"root"><!-- 姓&#xff1a;<input type"text" v-model:value"firstName"><br>名&#xff1a;<input type"text" v-model:value&…

人工智能学习与实训笔记(四):神经网络之自然语言处理

目录 六、自然语言处理 6.1 词向量 (Word Embedding) 6.1.1 词向量的生成过程 6.1.2 word2vec介绍 6.1.3 word2vec&#xff1a;skip-gram算法的实现 6.2 句向量 - 情感分析 6.2.1 LSTM (Long Short-Term Memory)介绍 6.2.2 基于飞桨实现的情感分析模型 6.3 BERT 六、自…

机器学习中7种常用的线性降维技术总结

上篇文章中我们主要总结了非线性的降维技术&#xff0c;本文我们来总结一下常见的线性降维技术。 1、Principal Component Analysis (PCA) Principal Component Analysis (PCA) 是一种常用的降维技术&#xff0c;用于将高维数据集转换为低维表示&#xff0c;同时保留数据集的…