五、Yocto集成QT5(基于Raspberrypi 4B)

news2024/12/24 2:27:28

Yocto集成QT5

本篇文章为基于raspberrypi 4B单板的yocto实战系列的第五篇文章:
一、yocto 编译raspberrypi 4B并启动
二、yocto 集成ros2(基于raspberrypi 4B)
三、Yocto创建自定义的layer和image
四、Yocto创建静态IP和VLAN

本章节实操代码请查看github仓库: meta-rpi-robot

一. 源码下载和编译

这一部分其实在第二节yocto集成ROS2中有涉及,但是为了连贯性和完整性本小节依然添加对应的描述,以方便只需要在yocto中集成QT的同学参考。

1.1 下载meta-qt5

进入到poky-kirkstone文件夹下执行如下指令下载meta-qt5源码:

git clone -b kirkstone https://github.com/meta-qt5/meta-qt5.git  meta-qt5

如图所示:
在这里插入图片描述

1.2 加入构建

修改rpi-build/conf/bblayers.conf,将meta-qt5 layer添加到构建系统中
在这里插入图片描述

二. Yocto集成

下面我们还需要将QT相关的组件打包到iamge里面去,在我们的rpi-robot-image.bb文件中添加如下内容:
在这里插入图片描述
这里只是简单添加了几个组件,如果你的QT程序很复杂依赖库较多需要都添加进来。

依赖库有了,然后还需要对需要的QT组件进行一些配置:
这里我们需要配置插件打开eglfs,打开opengl:
在recipes-qt/qt5/下面新建一个qtbase_%.bbappend文件,里面内容如下:

# Disable desktop OpenGL. Enable OpenGL ES and EGFLS.
PACKAGECONFIG_GL = "gles2 eglfs"

# Enable fontconfig to get system freetype fonts
PACKAGECONFIG_FONTS += "fontconfig"

PACKAGECONFIG:append = " eglfs examples accessibility "

然后在rpi-robot-image.bb文件中添加如下配置,移除x11 的feature:

DISTRO_FEATURES:append = " opengl"
DISTRO_FEATURES:remove = " x11"

这样在执行如下编译指令编译出来的image里面就有了QT的依赖库和运行环境了

bitbake rpi-robot-image

三. QT5 运行环境配置

上面是一些常规流程,打包出来的image启动以后确实有了QT环境,但是不代表QT程序就可以运行,这里需要配置很多的QT环境才能保证QT程序能够正常,这里踩了不少坑,这部分网上的资料也比较少,着重介绍下这部分的适配过程。
主要官方介绍:
https://doc.qt.io/qt-5/embedded-linux.html
https://doc.qt.io/Boot2Qt-5.15/qtee-meta-qt5.html
显示架构介绍参考:
https://wiki.t-firefly.com/zh_CN/Firefly-Linux-Guide/graphics.html
https://doc.embedfire.com/linux/rk356x/Qt/zh/latest/lubancat_qt/qtdemo/demo_run.html

在嵌入式Linux系统上,可以使用多个平台插件:EGLFS,LinuxFB或Wayland。但是,这些插件的可用性取决于Qt的配置方式。

  • LinuxFB
    插件通过linux的FBDEV(Framebuffer Device)驱动显示,不支持硬件渲染,显示性能可能会不好。
  • Wayland
    一种显示服务协议,不依赖客户端-服务器体系结构,旨在提供一个现代、 安全的的Linux和其他类Unix操作系统窗口系统取代X Window system,而Weston是Wayland开源显⽰协议的参考实现。
  • EGLFS
    是 Qt 自己实现的一个 GUI 系统,不支持多窗口,eglfs使用opengles/egl进行gpu渲染后,直接送给drm去显示。
    EGLFS is the recommended plugin for modern Embedded Linux devices that include a GPU.

本小节主要介绍EGLFS显示系统来显示QT 的应用程序。
EGLFS 需要使用的环境变量有如下内容:

# 指定显示平台插件,通过QT_QPA_PLATFORM 或者-platform命令行选项指定其他设置
export QT_QPA_PLATFORM=eglfs

# 此环境变量强制执行特定的插件,QT_QPA_EGLFS_INTEGRATION 设置为eglfs_kms将使用KMS / DRM后端
export QT_QPA_EGLFS_INTEGRATION=eglfs_kms

# KMS / DRM后端还通过JSON文件支持自定义配置,QT_QPA_EGLFS_KMS_CONFIG 指定配置文件的路径
# export QT_QPA_EGLFS_KMS_CONFIG=/usr/local/qt-app/conf/cursor.json

# 指定将current选择一种分辨率与当前模式匹配的模式,QT_QPA_EGLFS_ALWAYS_SET_MODE
#export QT_QPA_EGLFS_ALWAYS_SET_MODE=1
# 默认情况下,KMS后端将使用旧版API,可以启用DRM atomic API,通过将QT_QPA_EGLFS_KMS_ATOMIC环境变量设置为1。
#export QT_QPA_EGLFS_KMS_ATOMIC=1
# 鼠标设备,
# QT_QPA_EVDEV_MOUSE_PARAMETERS
#export QT_QPA_EVDEV_MOUSE_PARAMETERS=abs
#export QT_QPA_EVDEV_MOUSE_PARAMETERS=/dev/input/event2
# hide/show cursor
#export QT_QPA_EGLFS_HIDECURSOR=1
# 键盘设备
# 触摸设备
# eglfs 启用tslib支持,QT_QPA_EGLFS_TSLIB
#export QT_QPA_EGLFS_TSLIB=1
# 字体库
#export QT_QPA_FONTDIR=/usr/share/fonts
# 界面旋转角度 0,90,180,270,(使用触摸屏幕,触摸也要旋转)
#export QT_QPA_EGLFS_ROTATION=-90

四. QT Demo验证

本章节实操代码请查看github仓库: meta-rpi-robot meta-rpi-robot/recipes-apps/sample
上面运行环境准备号以后就可以跑一个QT测试程序验证下我们的功能是否正常,这里我们创建一个简单的QT qml程序,只显示一张照片.
我们在meta-rpi-robot文件夹下面创建一个子文件夹:

mkdir -p  /recipes-apps/sample

里面结构如下:
在这里插入图片描述
主要看一下luncher_0.1.bb文件:

SUMMARY = "Simple Qt application with QML"
DESCRIPTION = "A basic Qt application that uses QML for the UI"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

FILESEXTRAPATHS:prepend := "${THISDIR}/:"

DEPENDS = "qtbase qtquickcontrols2"

SRC_DIR = "luncher"
SRC_URI = "file://luncher/"

S = "${WORKDIR}/luncher"

inherit  qmake5

do_install() {
    install -d ${D}${bindir}
    install -m 0755 ${B}/qml_luncher    ${D}${bindir}
}

FILES_${PN} = "${bindir}/*"

然后将luncher 添加到image的bb文件里面:
在这里插入图片描述
构建rpi-image

bitbake rpi-robot-image

SD卡刷机启动以后先设置以下环境变量然后执行qml_luncher app程序:

export QT_QPA_PLATFORM=eglfs
export QT_QPA_EGLFS_NO_LIBINPUT=1
qml_luncher

效果如下:
在这里插入图片描述
完整代码请查看github仓库: meta-rpi-robot

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

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

相关文章

yolov5 v7.0打包exe文件,使用C++调用

cd到yolo5文件夹下 pyinstaller -p 当前路径 -i logo图标 detect.py问题汇总 运行detect.exe找不到default.yaml 这个是yolov8里的文件 1 复制权重文件到exe所在目录。 2 根据报错提示的配置文件路径,把default.yaml复制放到相应的路径下。(缺少相应…

Linux的开发工具(二):编译器gcc/g++与Linux项目自动化构建工具-Makefile

Linux的编译器-gcc/g 基本概念:gcc是专门用来编译c语言的,g可以编译c或c语言 问题一:gcc有时候为什么不能编译带有for循环的c语言源文件? 答:gcc版本过低会不支持for循环等c99标准下的内容 解决方式:gcc…

Spring定义Bean对象笔记

前言:面向对象语言最基本的元素就是对象,在Spring中把对象都封装为一个个的Bean,即通过Bean容器来管理对象;那么接下来我们看下在Spring中如何创建所需要的Bean。 一、环境准备 员工类 package com.xlb.bean;public class Empl…

在 C#和ASP.NET Core中创建 gRPC 客户端和服务器

关于gRPC和Google protobuf gRPC 是一种可以跨语言运行的现代高性能远程过程调用 (RPC) 框架。gRPC 实际上已经成为 RPC 框架的行业标准,Google 内外的组织都在使用它来从微服务到计算的“最后一英里”(移动、网络和物联网)的强大用例。 gRP…

数据结构——二叉树——堆

前言: 在前面我们已经学习了数据结构的基础操作:顺序表和链表及其相关内容,今天我们来学一点有些难度的知识——数据结构中的二叉树,今天我们先来学习二叉树中堆的知识,这部分内容还是非常有意思的,下面我们…

重读 Java 设计模式: 深入探讨原型模式,灵活复制对象

引言 在软件开发中,经常会遇到需要创建对象的情况。有时候,我们希望创建一个新的对象,但又不想通过传统的构造方法来创建,而是希望通过复制一个现有对象的方式来创建新的对象。这时,原型模式就能派上用场了。原型模式…

【51单片机入门记录】A2普中开发板实验课例程

一、开发板原理图 二、例程 &#xff08;1&#xff09;呼吸灯 #include <STC89C5xRC.H> #include<intrins.h>unsigned int PWM_wanttime0; //想要多长时间改变的占空比一次 unsigned int Breath_wanttime0; //想要多长时间改变呼气或者吸气的值时间 unsigned …

Android Studio 新建aar包

有几个注意事项 第一是注意是选择Android library这个包注意moudle name不能包含apk这三个字符

动手学机器学习双线性模型+习题

在数学中&#xff0c;双线性的含义为&#xff0c;二元函数固定任意一个自变量时&#xff0c;函数关于另一个自变量线性 矩阵分解 设想有N个用户和M部电影&#xff0c;构建一个用户画像库&#xff0c;包含每个用户更偏好哪些类型的特征&#xff0c;以及偏好的程度。假设特征的个…

0.5米多光谱卫星影像在农业中进行地物非粮化、非农化监测

一、引言 随着科技的发展&#xff0c;卫星遥感技术已经成为了农业领域中重要的数据来源。其中&#xff0c;多光谱卫星影像以其独特的优势&#xff0c;在农业应用中发挥着越来越重要的作用。本文将重点探讨0.5米加2米多光谱卫星影像在农业中的应用。 二、多光谱卫星影像概述 多…

ESP8266 WiFi物联网智能插座—上位机软件实现

1、软件架构 上位机主要作为下位机数据上传服务端以及节点调试的控制端&#xff0c;可以等效认为是专属版本调试工具。针对智能插座协议&#xff0c;对于下位机进行可视化监测和管理。 软件技术架构如下&#xff0c;主要为针对 Windows 的PC 端应用程序&#xff0c;采用WPF以及…

Mock.js的基本使用

mock顾名思义&#xff0c;就是模拟的意思&#xff0c;它模拟什么呢&#xff1f;假设我们在开发的过程中&#xff0c;我们需要使用到接口&#xff0c;但是后端接口并没有完善&#xff0c;那么我们就可以使用到mock.js&#xff0c;它可以随机生成数据&#xff0c;拦截AJAX请求&am…

壁纸小程序Vue3(分类页面和用户页面基础布局)

1.配置tabBar pages.json "tabBar": {"color": "#9799a5","selectedColor": "#28B389","list": [{"text": "推荐","pagePath": "pages/index/index","iconPath&quo…

网络安全-内网渗透2

一、MIC 将我们上次未描述完的MIC在这里详细解释一下 咱们所抓的第二个包会给返回一个服务端的challenge 之后服务器回包的第三个包会回复一个client challenge 所以咱们客户端和服务端现在分别有两个challenge&#xff0c;相当于客户端和服务端互相交换了一下challenge 因此…

《深度学习入门之PyTorch》书籍阅读笔记

《深度学习入门之PyTorch》书籍阅读笔记 ISBN 978-7-121-32620-2 多层全连接神经网络 Pytorch基础 Tensor张量 是一个多维矩阵&#xff0c;pytorch的tensor可以和numpy的ndarray相互转换&#xff0c;但numpy的ndarray只能在CPU上运行。不同数据类型的Tensor&#xff0c;t…

nginx的https与动态负载均衡

nginx的https 证书可以根据你的域名和服务器服务商去进行签发 , 比如 : 阿里云 腾讯云 百度云 华为云等 这里使用的是腾讯云 : 下载证书 : 选择 nginx: 下载之后传递到服务器上。 下面开始配置nginx的https: 1. 解压下载的证书包 cd /etc/ssl unzip xxcc.dwa_nginx.zip mv…

JMeter基础用法和测试WebSocket请求

目录 JMeter websocket插件安装测试接口的编写添加测试线程组创建取样器创建WebSocket连接创建循环控制器创建WebSocket request-response Sampler创建固定定时器 正则匹配上一个请求的数据做为当前请求参数正则编写使用匹配值 CSV文件读取参数添加汇总报告和结果树 JMeter web…

zookeeper如何管理客户端与服务端之间的链接?(zookeeper sessions)

zookeeper客户端与服务端之间的链接用zookeeper session表示。 zookeeper session有三个状态&#xff1a; CONNECTING, ASSOCIATING, CONNECTED, CONNECTEDREADONLY, CLOSED, AUTH_FAILED, NOT_CONNECTED&#xff08;start时的状态&#xff09; 1、CONNECTING 。 表明客户…

vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2017-12629)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。此次7.1.0之前版本总共爆出两个漏洞&#xff1a;[XM…

金三银四面试题(九):JVM常见面试题(3)

今天我们继续探讨常见的JVM面试题。这些问题不比之前的问题庞大&#xff0c;多用于面试中JVM部分的热身运动&#xff0c;开胃菜&#xff0c;但是大家已经要认真准备。 你能保证GC 执行吗&#xff1f; 不能&#xff0c;虽然你可以调用System.gc() 或者Runtime.gc()&#xff0c…