基于 TI AM62 测试 QtWayland 部署

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://xiahunao.cn/news/3226987.html

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

相关文章

科普文:HTTPS协议

概叙 HTTPS(Secure Hypertext Transfer Protocol)即安全超文本传输协议,是一个安全通信通道。用于计算机网络的安全通信,已经在互联网得到广泛应用。 HTTPS 是基于 HTTP 的扩展,其相当于 HTTP协议SSL(安全套…

什么是光储充一体化? 光储充一体化有什么优势?

大部分省份划定配储的比例不低于10% “光储充一体化”政策文件:国家层面政策名称 政策要点 发布时间 发布单位 结合实际建设光伏发电、储能、充换电一体化的充电基础设施。中央财政将安排奖励资金支持试点县开展试点工作,示范期内,每年均达到最高目标的试…

【教程】Hexo 部署到 Github Page 后,自定义域名失效的问题

目录 前言&问题描述解决方案细节 前言&问题描述 近期给 Github Page 上托管的静态网站映射了自定义域名(aiproducthome.top),之后发现每次更新并部署 hexo 到 Github Page (hexo d)后就会出现自定义域名失效的…

【linux】 sudo apt update报错——‘由于没有公钥,无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32’

【linux】 sudo apt update报错——‘由于没有公钥,无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32’ 在运行sudo apt update时遇到报错,由于没有公钥,无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32 解决方法&#x…

印刷企业如何判断数字工厂管理系统的实施周期

在数字化转型的浪潮中,印刷企业正积极拥抱新技术以提升生产效率、优化成本结构并增强市场竞争力。数字工厂管理系统的引入,作为这一转型的关键步骤,不仅能够实现生产流程的自动化、智能化监控,还能显著提升数据分析能力和决策效率…

【C语言】【排序算法】----- 归并排序

由于最近要考试,好久没有发博客了,非常抱歉大家对我的支持。之后我会不断更新博客,继续创作出高质量的文章,希望能帮到大家! 文章目录 一、归并排序基本思想二、递归实现三、非递归实现四、效率分析 一、归并排序基本…

LlamaFactory可视化微调大模型 - 参数详解

LlamaFactory 前言 LLaMA Factory 是一个用于微调大型语言模型的强大工具,特别是针对 LLaMA 系列模型。 可以适应不同的模型架构和大小。 支持多种微调技术,如全参数微调、LoRA( Low-Rank Adaptation )、QLoRA( Quantized LoRA )等。 还给我们提供了简单实用的命令行…

汉初三杰韩信,是不是颍川人

再重复一次,此韩信非彼韩信,说的是汉初三杰淮阴侯韩信,不是韩王信。 他俩的共同之处还真多,同名同姓,都被封王,八大异姓王韩姓占了两位。而且,结局也一样,都因反判罪被朝廷处死。这…

springboot篮球馆管理系统-计算机毕业设计源码21945

目 录 摘要 1 绪论 1.1选题背景 1.2研究意义 1.3论文结构与章节安排 2 篮球馆管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 …

NodeJS小饰品销售管理系统-计算机毕业设计源码21597

摘 要 在当今的数字化时代,电子商务已经成为了商业领域中不可或缺的一部分。随着消费者对于购物体验的要求越来越高,一个高效、便捷、用户友好的小饰品销售管理系统显得尤为重要。 本系统旨在利用 JavaScript 技术,设计并实现一个功能强大的小…

越南语是一门什么样的语言?如何学好越南语?

越南语是一种南亚语系越芒语族的语言,具有丰富的汉语借词,尤其在抽象概念的表达上,汉越词汇占有很大比例。作为一种声调语言,越南语拥有六个声调,这使得其发音具有音乐性和节奏感。它是一种孤立语,依赖于语…

强化学习实战2:动手写迷宫环境

迷宫环境介绍与创建 迷宫环境图示如下: 如图所示,其为一个 三乘三 的网格世界,我们要让 agent 从 S0 采取策略出发,然后走到 S8,图中红线部分表示障碍不能逾越,其中 S1 和 S4 之间有一个障碍,S…

换新启航环游浪漫新篇章

✨🎉【焕新启航,环游浪漫新篇章 —— 《焕新环游传》盛大开播】🎉✨在时光的温柔转角,一场前所未有的梦幻之旅悄然拉开序幕!🌟《焕新环游传》—— 这不仅仅是一部剧集的开播,更是对过往角色遗憾…

Springboot 设置个性化banner

在 Spring Boot 中自定义 banner 的方法有几种,可以通过以下步骤来实现: 1、使用文本文件作为 banner 在 src/main/resources 目录下创建一个名为 banner.txt 的文件。 编辑这个文件,输入想要显示的文本。确保文本中包含换行符和空格…

Vue 项目中 history 路由模式的使用

在最近帮客户开发的一个项目中,由于项目的特殊性,需要用到 Vue 中的 history路由模式。该模式使用时会涉及到“上传白屏”和“刷新 404 问题”。在帮助客户解决这两个问题的过程中,总结问题的解决方案并记录下来,希望能够保留这篇…

将格内多行文字展开成多格

表格的A列是分类,B列由多行文字组成,即分隔符是换行符。 AB1Account NumberInteraction21Jan 1,2023 - Hello.32Jan 2, 2023 - Good morning. Jan 3, 2023 - Good night. Jan 4, 20 Jan 5, 2023 - Good night. Jan 6, 2023 - Good afternoon.43Jan 1,20…

中霖教育:经济师的十个专业类别怎么选?

经济师一共包含十个专业类别,分别是工商管理、农业经济、财政税收、金融、保险、人力资源管理、旅游经济、运输经济、建筑与房地产经济、知识产权。 经济师选择报考专业时有哪些建议? 1、职业规划是选择专业的首要考虑点。未来的职业发展途径应与所选专业紧密相连…

wifi模组Ai-M62-32S的IO映射和UDP透传测试

wifi模组Ai-M62-32S的IO映射和UDP透传测试 基本IO 映射配网示例开启UDP透传示例复位AT查询wifi是否在线配置DHCP静态IP连接wifi连接UDP开启透传 基本IO 映射 对于wifi模组Ai-62-32S来说其模组 IO 引脚(从模组左上角逆时针排序,引脚序号从 1 开始&#x…

python+selenium-UI自动框架之[优化]元素查找和BasePage页面

痛点:在页面查找元素的时候会遇到找不到或者其他无法处理某个字段的情况,又或者想要在输出的log或者report里面显示这个字段名称,这时候加上字段名称就很重要! [3]pythonselenium - UI自动框架之封装查找元素https://mp.csdn.net…

前端如何去看蓝湖

首先加入团队,在内容中我们可以看到点击图片,右边出现的图 包含了像素甚至有代码,我们可以参考这个代码。 那么在使用之前我们需要调整好像素,例如我们的像素宽为375,不用去管高,然后这个宽度我们可以去自…