玩转树莓派屏幕之三:lvgl移植到树莓派

news/2025/10/5 3:12:51/文章来源:https://www.cnblogs.com/liulongtao/p/19126170

一、背景

由于前一篇的文章玩转树莓派屏幕之二:自定义屏幕显示中使用了python绘制图片,再将图片显示到屏幕的方式。只能用于简单显示一些文字,内容不够丰富。

自动动手去从0实现一个显示程序,肯定不显示的,需要了解树莓派嵌入式的底层原理,不是短时间内能够搞定的。我们现在是站在巨人的肩膀上,有很多开源的程序可以直接使用,例如LVGL组件,小巧性能高。

二、配置交叉编译工具

由于树莓派的性能比较弱,直接在树莓派上直接进行编译,效率低而且容易重启(编译中重启N次的经历.....),为了节省时间,提升效率,直接使用交叉编译吧(骚年,不要抱有侥幸的心理....)

1、安装WSL

使用ubuntu系统,工具较为齐全。我采用的是之前已经安装好的ubuntu20,懒得更改了....

2、安装交叉编译工具

更新软件包

首先需要更新一下软件包列表

# 更新软件包列表
sudo apt update
sudo apt upgrade -y
sudo apt install libevdev-dev
sudo apt install python3.8-venv

安装工具链

树莓派通常使用 ARMv6 (如 Pi 1, Zero) 或 ARMv7/ARMv8 (如 Pi 2, 3, 4, 5) 架构。最常用的工具链是 gcc-arm-linux-gnueabihf(用于 ARMv7+ 的 32 位系统)或 gcc-aarch64-linux-gnu(用于 64 位系统)

根据自己树莓派按照OS的操作系统来

安装 32 位 ARM 交叉编译器 (推荐用于大多数树莓派)

sudo apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf

安装 64 位 ARM 交叉编译器 (用于 64 位树莓派 OS)

sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

3、获取树莓派的系统根文件系统 (sysroot)

为了编译依赖系统库的程序(如使用 pthread、m、wiringPi 等),你需要将树莓派的 /usr 和 /lib 目录复制到 WSL 中作为 sysroot。我们选择直接从树莓派上复制过来

在树莓派上打包 /usr 和 /lib:

# 在树莓派上执行
sudo tar -czf pi-sysroot.tar.gz /usr /lib

将文件复制到 WSL:

# 例如通过 scp
scp pi@raspberrypi.local:~/pi-sysroot.tar.gz ~/

在 WSL 中解压:

mkdir -p ~/raspberry/sysroot
tar -xzf pi-sysroot.tar.gz -C ~/raspberry/sysroot --strip-components=1

假设我们使用的root用户,绝对路径为/root/raspberry/sysroot

三、编译lvgl demo

1、下载源码:

下载源码

git clone https://github.com/lvgl/lv_port_linux.git
cd lv_port_linux/
git submodule update --init --recursive

git submodule update --init --recursive 下载失败,可以直接下载lvgl软件包

git clone https://github.com/lvgl/lvgl.git

2、配置toolchain编译链

在项目中新建toolchain.cmake 文件,写入

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)set(CMAKE_SYSROOT /root/raspberry/sysroot)
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

3、设置CLion关联

1)点击 File -> settings -> ToolChains,新增WSL编译环境,其中ToolChains选择 aarch64-linux-gnu-gcc 和 aarch64-linux-gnu-g++
image

2)点击 File -> settings -> CMake,选择刚才增加的toolchains
image

CMake options中新增:

-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake

image

4、编译

选择lvglsim,点击右侧小锤子进行编译:
image

编译结果在编译路径/bin/目录下:
image

4、运行lvglsim可执行文件

设置环境变量

由于使用的默认demo程序,需要调整显示的屏幕分辨率以及设置,需要设置全局变量

export LV_SIM_WINDOW_WIDTH=420
export LV_SIM_WINDOW_HEIGHT=380
export LV_LINUX_FBDEV_DEVICE=/dev/fb0

执行命令

将上一步中编译获取的lvglsim可执行文件传到树莓派上:

./lvglsim

效果展示

shell运行展示结果为:

root@raspberrypi:~/lcd# ./lvglsim
[Warn]	(0.000, +0)	 lv_init: Memory integrity checks are enabled via LV_USE_ASSERT_MEM_INTEGRITY which makes LVGL much slower lv_init.c:321
[Warn]	(0.000, +0)	 lv_init: Object sanity checks are enabled via LV_USE_ASSERT_OBJ which makes LVGL much slower lv_init.c:325
[Warn]	(0.000, +0)	 lv_init: Style sanity checks are enabled that uses more RAM lv_init.c:329
[User]	(4478.457, +4478457)	 init_pointer_evdev: Using evdev automatic discovery. evdev.c:160
[User]	(4478.458, +1)	 discovery_cb: new 'ABS' device discovered evdev.c:109

展示效果图:
image

参考文章:

  • https://www.cnblogs.com/jzcn/p/16898249.html
  • https://zmurder.github.io/lvgl/LVLG在树莓派上移植基于9.3.0/
  • https://doc.yonyoucloud.com/doc/wiki/project/raspberry-pi/spi.html
  • https://watermelonwater.tech/archives/深入探索树莓派轻量级GUI开发:framebuffer原理与Raylib实战指南,实现无桌面环境高效应用构建
  • https://www.cnblogs.com/kn-zheng/p/17853059.html
  • https://blog.csdn.net/weixin_42963900/article/details/133777770
  • https://www.waveshare.net/wiki/模板:Fbcp
  • https://zhuanlan.zhihu.com/p/558495267
  • https://blog.csdn.net/weixin_44550536/article/details/131714105

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

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

相关文章

商品网站建设设计思路小说网站排名怎么做

目录 系列文章目录 前言 一、配置相关环境 二、创建工作空间 1.创建工作空间并初始化 2.进入 src 创建 ros 包并添加依赖 三、HelloWorld(C版) 1.进入 ros 包的 src 目录编辑源文件 2.编辑 ros 包下的 Cmakelist.txt文件 3.进入工作空间目录并编译 四 运行程序 五 …

enthalpy/entropy

Алексей Экимов — единственный россиянин, получивший Нобелевскую премию по химии в 2023 году за технологии нанок…

Day26自定义异常

package Demo2; //自定义异常类 public class Myexception extends Exception {//传递数字>10private int detail;public Myexception(int a) {this.detail = a;}//重写toString打印异常信息@Overridepublic String…

重庆潼南网站建设公司wordpress浏览次数插件

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL中TEXT数据类型的最大长度 在MySQL中,TEXT数据类型用于存储较大…

科技公司手机端网站定制网站建设功能报价表模板

iMazing是一款功能强大的iPhone和iPad管理工具,确实可以作为iTunes的替代品进行数据备份。以下是一些关于iMazing的主要特点和功能: 设备备份:iMazing可以备份iOS设备上的所有数据,包括照片、视频、音乐、应用程序等。与iTunes相比…

谈谈redis的热key问题如何解决

引言 讲了几天的数据库系列的文章,大家一定看烦了,其实还没讲完。。。(以下省略一万字)。 今天我们换换口味,来写redis方面的内容,谈谈热key问题如何解决。 其实热key问题说来也很简单,就是瞬间有几十万的请求去访…

Microsoft Agent Framework (预览) 入门:让所有的开发者轻松创建 AI Agents

Microsoft Agent Framework (预览) 入门:让所有的开发者轻松创建 AI Agents翻译:https://devblogs.microsoft.com/dotnet/introducing-microsoft-agent-framework-preview/ 构建 AI 代理并非难事。然而,许多开发者却…

公益网站怎么做网站诊断方法

前言 一般情况下,多数移动开发者使用的是数据线连接电脑,进行各种移动设备的调试,更有胜者,非常迷恋模拟器,模拟器它好不好,答案是好,因为直接运行在电脑上,直接操作,调试…

免费送的广告怎么在网站上做wordpress 数据调用api接口

Redis 发布订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。 Redis 有两种发布订阅模式 基于频道(Channel)的发布订阅基于模式&#xff…

个人建设视频网站制作wordpress 邮件文本

源代码加密对于很多研发性单位来说是至关重要的,当然每家企业的业务需求不同所用的开发环境及开发语言也不尽相同,今天主要来讲一下c及git开发环境的源代码防泄密保护方案。 企业源代码泄密场景一、 在很多嵌入式开发企业中使用的c/c开发语言&#xff…

Stimulsoft 引入无代码脚本编程 —— Blockly 让报表与仪表盘更智能

Stimulsoft 是一款功能强大的数据可视化与报表平台,广泛应用于各类企业的数据分析与展示场景。其核心优势之一在于支持为报表和仪表盘添加自定义逻辑,以实现数据处理、可视化控制和用户交互等高级功能。 Stimulsoft …

理解、学习与使用 Java 中的 Optional

从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。 本质上,这是一个包含有可选值的包装类,这…

做网站的时候用的什么框架百度双站和响应式网站的区别

作者 | 磊哥来源 | Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)在 Java 中,跳转的实现方式有两种:请求转发和请求重定向,但二者是完全不同的&…

211 粉了整个小 QA 吧

可以发现我 \(211\) 粉了,既然是 \(211\) 这个这么有纪念意义的数字那就开一个小 Q&A:

建设网站需要申请报告网站开发费计入什么科目合适

通过上节课的学习,我们已经可以正常播放本地rtmp流及mp4文件,这节课,我们将在上节课的基础上实现一个常用的转推功能:读取rtmp流或mp4文件并转推到rtmp服务器上实现直播转发功能。 一、FFmpeg API 转码推流的一般过程 1.引入ffm…

p2p网站如何建设采集wordpress整站数据

文章目录 1.创建 Spring 项目步骤1.1 创建 Maven 项目1.2添加 Spring 框架支持1.3 添加启动项2.如何使用 Spring2.1 存储 Bean 对象2.1.1 创建 Bean对象2.1.2 将 Bean对象注册到容器中 2.2 获取并使用 Bean对象2.2.1 使用 ApplicationContext 获取对象2.2.2 使用 BeanFactory 获…

做网站搜索如何显示官网国内Wordpress博客平台

近日,华为终端BG CEO、智能汽车解决方案BU董事长余承东在2024年新年信中提出,开启华为终端未来大发展的新十年。 他特别提到,未来要构建强大的鸿蒙生态,2024年是原生鸿蒙的关键一年,将加快推进各类鸿蒙原生应用的开发…

deal 网站要怎么做如何在电商上购物网站

在vue学习中遇到给router-link 标签添加事件click 、mouseover等无效的情况 我想要做的是v-for遍历出来的选项卡&#xff0c; 鼠标移上去出现删除标签&#xff0c;移除标签消失的效果 原代码&#xff1a; <router-link v-for"(item, index) in pageMenuList"…

自己怎么制作企业网站动感网站模板

想写这篇文章好久了.但一直不敢写,一怕自己技术有限误导了园子里的各位朋友.二怕自己文笔有限不能很好的表达自己的意图,但既然是抱着交流的态度来的,我还是愿意写一写这方面的文章与大家一起交流和分享,欢迎大家拍砖.做SEO没有什么高深技术可言,靠的是经验的不断累积,各位SEO高…

北京建设厅网站首页手机网站和网站一体

有些编码套路是公认的&#xff0c;大家都参照其编写符合可观赏性的代码&#xff0c;那就是设计模式现在.NETcore 默认提供了DI功能&#xff0c;那我想设计一个全局的引擎类&#xff0c;进行注入服务、解析服务、配置中间件。并且要求该引擎类全局唯一&#xff0c;其他地方不能进…