基于 TI AM62 测试 QtWayland 部署

news2024/11/15 12:07:08

By Toradex秦海

1). 简介

目前主流的 ARM 平台嵌入式 Linux BSP 的显示后端基本都已经从 X11 升级到了 Wayland, 而常用的 Wayland Compositor - Weston 对于 Linux 下常用的 Qt 图形界面开发框架的一些 Plugin (比如 Qt VirtualKeyboard) 的配合并不完善,因此本文就基于 TI AM62 处理器平台测试 Qt 提供的 Wayland Compositor - QtWayland 的部署测试。

本文所演示的平台来自于 Toradex Verdin AM62 嵌入式平台。

2. 准备

a). Verdin AM62 ARM核心版配合Dahlia 载板,并连接调试串口和 HDMI 显示器以及 USB 触摸/鼠标用于测试。

3). Verdin AM62 Yocto Linux 编译部署以及配置

a). 由于需要增加对Qt Eglfs/KMS, QtWayland 和 Qt VirtualKeyboard 的支持,需要通过Yocto/Openembedded 框架重新编译 Yocto Linux BSP,具体的配置方法请参考这里,部署如下修改后编译Reference-Multimedia image镜像

-------------------------------

### local.conf,增加Qt eglfs/kms, Qtwayland 和 Qt VirtualKeyboard 支持 ###

+ TOOLCHAIN_TARGET_TASK:append = " libgles3-mesa-dev"

+ IMAGE_INSTALL:append = " qtvirtualkeyboard qtwayland ttf-droid-sans ttf-droid-sans-fallback ttf-droid-sans-mono ttf-droid-serif freetype"

+ PACKAGECONFIG:append:pn-qtvirtualkeyboard = " lang-zh_CN"

+ PACKAGECONFIG:append:pn-qtbase = " gles2extra eglfs kms"

+ PACKAGECONFIG_DISTRO:pn-qtbase = "icu examples accessibility gif gbm kms libinput"

+ PACKAGECONFIG_FONTS:pn-qtbase = "fontconfig"

+ PACKAGECONFIG:remove:pn-qtwayland = "xcomposite-egl xcomposite-glx"

### layers/meta-toradex-ti/qt5-layer/recipes-qt/qt5/qtbase_%.bbappend,注释掉以下内容 ###

 ############################### TDX added

 # from meta-arago/conf/layer.conf

-PACKAGECONFIG_GL:am62xx = "gles2extra linuxfb"

-PACKAGECONFIG_DISTRO:am62xx = "icu examples accessibility gif gbm kms libinput"

-PACKAGECONFIG_FONTS:am62xx = "fontconfig"

+#PACKAGECONFIG_GL:am62xx = "gles2extra linuxfb"

+#PACKAGECONFIG_DISTRO:am62xx = "icu examples accessibility gif gbm kms libinput"

+#PACKAGECONFIG_FONTS:am62xx = "fontconfig"

-PACKAGECONFIG:remove:am62xx = "kms"

-PACKAGECONFIG:remove:am62xx = "vulkan"

-PACKAGECONFIG:remove:am62xx = "glib xcb"

+#PACKAGECONFIG:remove:am62xx = "kms"

+#PACKAGECONFIG:remove:am62xx = "vulkan"

+#PACKAGECONFIG:remove:am62xx = "glib xcb"

 # they don't apply without changes, drop them for now

-SRC_URI:remove = " \

-    file://0002-deform-disable-opengl-button.patch \

-    \

-    file://0001-deform-Fix-how-controls-are-shown.patch \

-    file://0001-qtbase-plugins-platforms-eglfs_kms-fix-compiler-erro.patch \

-    file://0001-eglfs-Force-888-format-only-on-env-flag.patch \

-"

+#SRC_URI:remove = " \

+#    file://0002-deform-disable-opengl-button.patch \

+#    \

+#    file://0001-deform-Fix-how-controls-are-shown.patch \

+#    file://0001-qtbase-plugins-platforms-eglfs_kms-fix-compiler-erro.patch \

+#    file://0001-eglfs-Force-888-format-only-on-env-flag.patch \

+#"

### compile Reference-Multimedia image ###

$ MACHINE="verdin-am62" bitbake bitbake tdx-reference-multimedia-image

### compile SDK ###

$ MACHINE="verdin-am62" bitbake tdx-reference-multimedia-image -c populate_sdk

-------------------------------

b). Yocto Linux image部署

参考这里通过Toradex Easy installer将上面编译好的image更新部署到模块

c). 显示配置

./ HDMI默认即可正常显示,如果实际测试是连接其他接口如 LVDS 等显示设备,可以参考这里调整 Device-Tree Overlay 设置来使能相关的显示设备。

./ 输入设备如 USB HID 电容式触摸或者 USB 鼠标通常无需额外设置,插上即可使用。

 

 

4). Qtwayland compositor 编译部署

a). Qt Qtwayland组件可以非常方便的使用C++/QML语言开发定制化的Wayland compositor,详细说明请见这里,也提供了很多sample project供参考

b). 本文测试所使用的Qtwayland compositor 来自于Qt 官方的 Pure-qml sample 示例,源代码请参考这里,这是一个基于 QML 开发的并且支持 Qt VirtualKeyboard plugin 的简单 Qtwayland compositor

c). 参考这里说明使用上面章节 3.a编译出的SDK文件配置 Qtcreator IDE 工具交叉编译环境,然后下载 Pure-qml 工程源代码后通过 Qtcreator IDE 进行交叉编译,生成 pure-qml 可执行二进制文件上传到 Verdin AM62 Linux 系统中

d). 使用编译好的 pure-qml Qtwayland compositor 替换系统默认的Weston compositor

./ 创建pure-qml.sh执行脚本文件

-------------------------------

# copy pure-qml binary to /usr/bin

$ cp pure-qml /usr/bin/

# create pure-qml.sh script, detailed content in below

$ vi /usr/bin/pure-qml.sh

# add executable permission

$ chmod +x pure-qml.sh

-------------------------------

./ pure-qml.sh – 由于系统 DRM 挂载显示设备在启动过程中,其对应的 card 号码可能会变化, 因此脚本前面先对 “kms.conf” 文件里面的设置和系统启动后的设备card0 或者 card1 进行匹配修改,然后再启动compositor。

-------------------------------

#!/bin/sh

set -e

# modify kms.conf if seetings is not consistent with system drm card device name

if [ -d /sys/class/drm/card0-HDMI-A-1 ];then

sed -i '2 s/card1/card0/' /etc/qt5/eglfs_kms_cfg.json

fi

if [ -d /sys/class/drm/card1-HDMI-A-1 ];then

sed -i '2 s/card0/card1/' /etc/qt5/eglfs_kms_cfg.json

fi

# execute qtwayland compositor

/usr/bin/pure-qml &

-------------------------------

./ 创建Qtwayland systemd service 文件,参考这里说明,Qt VirtualKeyboard 基于 Wayland Compositor 使用时候,需要在 Compositor 侧配置 “QT_IM_MODULE” 环境变量,而不是应用侧。

-------------------------------

$ vi /lib/systemd/system/qtwayland.service

------

# This is a system unit for launching QtWayland

[Unit]

Description=Qt Wayland, a Wayland compositor, as a system service

RequiresMountsFor=/run

# Make sure we are started after logins are permitted.

Requires=systemd-user-sessions.service

After=systemd-user-sessions.service

After=plymouth-quit-wait.service

Before=graphical.target

[Service]

Environment="QT_QPA_EGLFS_KMS_CONFIG=/etc/qt5/eglfs_kms_cfg.json"

Environment="QT_QPA_EGLFS_INTEGRATION=eglfs_kms"

Environment="QT_QPA_PLATFORM=eglfs"

Environment="QT_QPA_EGLFS_KMS_ATOMIC=1"

Environment="QT_IM_MODULE=qtvirtualkeyboard"

ExecStart=/usr/bin/pure-qml.sh

User=root

Group=root

PAMName=login

StandardOutput=journal

StandardError=journal

[Install]

WantedBy=graphical.target

------

-------------------------------

e). 测试Qtwayland compositor

-------------------------------

### disable default Weston compositor and Qt demo app ###

$ systemctl disable weston.service

$ systemctl disable weston.socket

$ systemctl disable wayland-app-launch

### enable Qt wayland compositor ###

$ systemctl enable qtwayland

$ reboot

-------------------------------

重启后,可以看到如下 Qt Compositor pure-qml 显示结果

基于 TI AM62 测试 QtWayland 部署6524.png

5). Qt VirtualKeyboard Example应用测试

a). 分别使用一个Qt Widget应用和一个Qt Quick应用进行测试

./ Qt Widget应用 – Line Edits Example,详细说明请参考这里,源码从这里下载,将编译好的可执行binary “lineedits” 上传到 Verdin AM62 Linux /home/root 目录

./ Qt Quick 应用 – Qt VirtualKeyboard Basic Example,详细说明请参考这里,源码从这里下载,如上面 4.d 章节所提到的,需要如下修改 main.cpp 将环境变量取消导出,然后将编译好的可执行binary “basic” 上传到 Verdin AM62 Linux /home/root 目录

-------------------------------

...

int main(int argc, char *argv[])

{

    //qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

    QGuiApplication app(argc, argv);

    QQuickView view(QString("qrc:/%2").arg(MAIN_QML));

    ...

}

-------------------------------

b). 创建应用启动脚本 /home/root/qtwayland-app-launch.sh

-------------------------------

#!/bin/sh

# export display environment

export XDG_RUNTIME_DIR=/run/user/`id -u`

export WAYLAND_DISPLAY=/run/user/`id -u`/wayland-0

if ! test -d "$XDG_RUNTIME_DIR"; then

    mkdir --parents $XDG_RUNTIME_DIR

    chmod 0700 $XDG_RUNTIME_DIR

fi

# wait for qtwayland

while [ ! -e  $XDG_RUNTIME_DIR/wayland-0 ] ; do sleep 0.1; done

sleep 1

# run basic or lineedits app

/home/root/basic -platform wayland &

#/home/root/lineedits -platform wayland &

-------------------------------

c). 创建开机自启动systemd service文件

-------------------------------

$ vi /lib/systemd/system/qtwayland-app-launch.service

[Unit]

Description=Start a Qt wayland application

After=qtwayland.service

Requires=qtwayland.service

[Service]

Restart=on-failure

Type=forking

ExecStart=/home/root/qtwayland-app-launch.sh

RestartSec=1

[Install]

WantedBy=graphical.target

-------------------------------

d). enable service 并测试

-------------------------------

$ systemctl enable qtwayland-app-launch

$ reboot

-------------------------------

e). 重启后分别启动 basic 和 lineedits 应用效果如下,USB HID 电容触摸和鼠标都可以正常操作虚拟键盘输入

基于 TI AM62 测试 QtWayland 部署8563.png

基于 TI AM62 测试 QtWayland 部署8565.png

6). 总结

本文基于 Ti AM62 处理器演示了 QtWayland compositor 的部署以及 Qt VirtualKeyboard 应用的测试。

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

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

相关文章

深度学习模型分布式训练

单机单卡训练 单机多卡训练 使用torch.nn.DataParallel方式,修改简单,但单进程效率慢 使用DDP方式,多进程效率高,推荐 多机多卡 模型并行 示例:

基础架构服务API:降低成本,提升业务效益

基础架构服务API的应用可以显著降低企业的成本,并提升业务效益。通过使用这些API,企业可以充分利用云计算、自动化部署和资源管理等功能,从而减少了传统基础设施所需的大量投资和维护成本。这些API还提供了弹性扩展和自动化功能,使…

Linux系统学习 —— 计算机基础(笔记篇)

一、电脑硬件 电脑硬件由输入,控制计算,输出三部分组成。 输入部分包括键鼠,读卡器(外部接口),扫描仪(打印机的扫描仪)。计算控制部分包括CPU , 内存,硬盘&…

【Unity2D 2022:NPC】制作任务系统

一、接受任务 1. 编辑NPC对话脚本: (1)创建静态布尔变量用来判断ruby是否接受到任务 public class NPCDialog : MonoBehaviour {// 创建全局变量用来判断ruby是否接到任务public static bool receiveTask false; } (2&#xff…

EtherCAT笔记(六)—— 分布时钟之一

目录 1. 分布时钟的功能 2. 分布时钟涉及到的概念 2.1 系统时间 2.2 参考时钟 & 从时钟 2.3 主站时钟 2.4 本地时钟 2.4.1 本地时钟的初始偏移量 2.4.2 本地时钟的时钟漂移 2.5 本地系统时间 2.6 传输延时 人们理解知识的一个阻碍就是那些从没见过的概念和这些概念的随意使…

Apache Doris:下一代实时数据仓库

Apache Doris:下一代实时数据仓库 概念架构设计快速的原因——其性能的架构设计、特性和机制基于成本的优化器面向列的数据库的快速点查询数据摄取数据更新服务可用性和数据可靠性跨集群复制多租户管理便于使用半结构化数据分析据仓一体分层存储 词条诞生 概念 Apa…

在攻防演练中遇到的一个“有马蜂的蜜罐”

在攻防演练中遇到的一个“有马蜂的蜜罐” 有趣的结论,请一路看到文章结尾 在前几天的攻防演练中,我跟队友的气氛氛围都很好,有说有笑,恐怕也是全场话最多、笑最多的队伍了。 也是因为我们遇到了许多相当有趣的事情,其…

usbserver工程师手记(二)设置定时任务

概述 部分银行ukey 长时间不使用后会导致休眠,出现虽然有连接,但是读不到证书,可以用定时重置端口的办法,调用接口 http://ip/usb_server/reset_port,参数为 {"port":"B5-1-2","vid_pid":"09…

2023年高教杯数学建模2023B题解析(仅从代码角度出发)

前言 最近博主正在和队友准备九月的数学建模,在做往年的题目,博主主要是负责数据处理,运算以及可视化,这里分享一下自己部分的工作,相关题目以及下面所涉及的代码后续我会作为资源上传 问题求解 第一题 第一题的思路主要如下:…

【雷达原理】数字波束形成(DBF)

目录 一、数字波束形成1.1 DBF原理1.2 工程应用实现方式1.2.1 预先存储权矢量1.2.2 利用DFT/FFT实现DBF 二、DBF应用2.1 通道间相干积累2.2 测量目标角度 三、MATLAB代码 一、数字波束形成 数字波束形成(Digital Beam Forming,DBF) 技术,是针…

大数据Spark--核心编程

文章目录 IDEA 配置Spark环境增加scala插件创建Maven项目,配置pom.xml配置log4j.properties Spark 三大数据结构RDDRDD概念核心属性执行原理基础编程RDD创建RDD 并行度与分区RDD转换算子Value类型双Value类型Key - Value类型reduceByKey和groupByKey的区别&#xff…

为什么说java只要还是泛型擦除,就不要吹自己高性能?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!关于“Java只要还是泛型擦除…

内存迎来革命性升级,只装一条就能组成双通道

相信用过台式机的同学或多或少都遇到过一个情况,那就是按下开机键后,除了显示器不亮,哪儿都亮。 拿着自己的故障满世界发帖求助,得到最多的回答就是,断电拔下内存用橡皮擦擦擦金手指再装回。而这样的操作确实能解决大部…

漏洞挖掘 | 记某证书站任意账号接管漏洞

下文中所述漏洞已修复 在前段时间的漏洞挖掘中,上了某证书站,打点的一处逻辑漏洞 访问某一站点,发现了一处登录页 点击登录按钮之后,发现该站点大概率是自写站点,存在逻辑漏洞的可能性大大增大,利用前期信…

西门子S7-1500PLC与ABB变频器通讯及控制程序

文章目录 前言一、硬件组态二、编写通讯程序1.新建数据类型“ABB_UDT”2.新建DB块“变频DB”3.新建FC块“轴流风机” 二、编写模拟量转换程序1.编写速度设定程序2.编写速度反馈程序3.编写电流反馈程序4.编写力矩反馈程序 三、编写启/停控制程序总结 前言 本文基于某实际项目&a…

Linux和Windows配置公钥到服务器上【免密登录/传输文件】

文章目录 1.Windows配置公钥到服务器上1.1.生成SSH密钥对(如果尚未生成):1.2.复制公钥到远程服务器:1.3.手动复制公钥到远程服务器:1.4.测试SSH连接: 2.Linux配置公钥到服务器上2.1生成SSH密钥对&#xff0…

开发个人Go-ChatGPT--6 OpenUI

开发个人Go-ChatGPT–6 OpenUI Open-webui Open WebUI 是一种可扩展、功能丰富且用户友好的自托管 WebUI,旨在完全离线运行。它支持各种 LLM 运行器,包括 Ollama 和 OpenAI 兼容的 API。 功能 由于总所周知的原由,OpenAI 的接口需要密钥才…

手撸俄罗斯方块(五)——游戏主题

手撸俄罗斯方块(五)——游戏主题 当确定游戏载体(如控制台)后,界面将呈现出来。但是游戏的背景色、方块的颜色、方框颜色都应该支持扩展。 当前游戏也是如此,引入了 Theme 的概念,支持主题的扩…

iOS UITableView自带滑动手势和父视图添加滑动手势冲突响应机制探索

场景 我们有时候会遇到这样的一个交互场景:我们有一个UITableView 放在一个弹窗中,这个弹窗可以通过滑动进行展示和消失(跟手滑动的方式),然后这个UITableView放在弹窗中,并且可以滚动,展示一些…

成都晨持绪:抖音电商带货需要交钱吗

在抖音这个充满创意与可能的平台上,电商带货成为了一种新兴而又时尚的职业。然而,伴随着无数的点击与转发,有一个问题始终萦绕在人们心头——抖音电商带货需要交钱吗? 如画卷展开,抖音平台以其独特的算法和庞大的用户基础构建了一…