在ZLG EM-800 储能边缘计算网关上实现QtGUI程序硬件加深(EGL(eglfs),wayland)调试笔记
摘要:本文介绍了在瑞萨RZ/G2UL平台(ARM Cortex-A55/M33架构)上为Qt 5.12.8实现GPU加速的移植方案。通过交叉编译配置添加eglfs-kms支持,并设置Mali-G31 GPU专用环境变量,生成eglfs平台插件。同时说明Wayland合成器的启动方法及两种渲染模式(eglfs/wayland)的切换注意事项。移植后验证了包括linuxfb、minimal、wayla
一,平台环境
-
软件环境
交叉编译Qt5.12.8(aarch64)详细交叉编译过程
EM500 QT5.12.8移植
提取码: nzes
-
硬件环境
平台架构:瑞萨64单核Cortex-A55+单核Cort-M33
处理器:RZ/G2UL
GPU 型号:Mali-G31
-
- ARM 在 2019 年发布的最新一代入门级 GPU
- 替代旧款的 Mali-400 和 Mali-450
- 属于 Bifrost 架构家族
- 单核心设计 (MP1)
- 适用于低功耗嵌入式设备
- 初始硬件版本
- 没有后续修订
- 07 = Bifrost 架构 (第 7 代)
- 0009 = G31 特定实现
- 03 = GPU 版本 ID
二,要解决的问题
需要再EM-800上让Qt的GUI程序都够通过平台显示插件支持GPU加速
三,前期准备
EGL(eglfs)

这里GPU驱动还有服务的依赖项在EM-800上平台上都是固有的,我只需要将移植到EM-800的QT的环境准备还就可以了
要使用eglfs 只需要在交叉编译5.12.8构建配置文件时添加 -eglfs -kms,
export QT_FORCE_FEATURE_gbm=1
export QT_FORCE_PRECONFIGURED_TESTS=1
./configure \
-prefix /opt/qt_em800_5.12.8 \
-v \
-sysroot / \
-confirm-license \
-opensource \
-release \
--enable-linuxfb \
-make libs \
-xplatform linux-aarch64-gnu-g++ \
-optimized-qmake \
-pch \
-sql-sqlite \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-qt-freetype \
-tslib \
-opengl es2 \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-xcb \
-eglfs -kms \
-no-pkg-config \
-dbus \
-no-separate-debug-info \
-nomake examples \
-nomake tools \
-no-dbus \
-D QT_QWS_CLIENTBLIT \
-I /opt/tslib/include \
-I /usr/include/aarch64-linux-gnu \
-I /usr/include/drm \
-I /usr/include \
-L /opt/tslib/lib \
-L /usr/lib/aarch64-linux-gnu \
-skip qtbase/config.tests/gbm \
-skip qtbase/config.tests/drm/gbm \
'QMAKE_CFLAGS += -I/usr/include -DQT_FEATURE_gbm=1' \
'QMAKE_LIBS += -L/usr/lib/aarch64-linux-gnu -lgbm -ldrm' \
-recheck-all
如果你的环境没有编译他们依赖项或者库肯定会报错,apt安装上就好了
QT编译成功后(make->make install)成功后你因该在位于/opt/qt_em800_5.12.8/plugins/platforms看到“libqeglfs.so”

位于/opt/qt_em800_5.12.8/plugins/egldeviceintegrations看到“libqeglfs-kms-egldevice-integration.so”
这里还可以再编译完成QT基础(qtbase)模块后,编译其他的EGL设备集成插件


然后sudo make install

然后打包移植编译好的QT到设备上
# 设置Qt环境变量
export QT_ROOT=/opt/qt_em800_5.12.8
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts/
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_FB_TSLIB=1
export QT_QPA_PLATFORM=eglfs:tty=/dev/fb0 #设备实际情况修改
export QT_QPA_EGLFS_INTEGRATION=eglfs_kms_egldevice # Mali专用集成
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QT_ROOT/lib
export QTDIR=/opt/qt_em800_5.12.8
export LD_LIBRARY_PATH=$QTDIR/lib:$QTDIR/plugins/imageformats:/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$QTDIR/plugins
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
这样远行的程序就会使用EGL提供渲染了
远行不了eglfs_kms_egldevice ,改为export QT_QPA_EGLFS_INTEGRATION=eglfs_kms
Wayland

wayland的支持需要等Qt基础模块编译完成后,使用交叉编译好的qmake进行构建就好了

然后sudo make install

在使用wayland前需要运行 weston:(启动Wayland合成器)
EM-800出厂固件默认已经安装好glmark2-es2-wayland渲染性能基准测试工具,且已经加载了驱动mali_kbase.ko
1、运行 weston:(启动Wayland合成器)
Weston 的启动只能在 root 用户下启动,在普通用户下使用 sudo 也不行。
weston --tty 1 &
2、测试:
glmark2-es2-wayland --fullscreen
确认Weston基础功能正常,
weston-simple-egl
能运行说明Wayland协议栈和GPU驱动正常
显示彩色三角形 → Weston正常
weston --tty 1& 启动不了直接
weston --backend=/usr/lib/aarch64-linux-gnu/libweston-8/drm-backend.so --tty=1 &
使用wayland来提供渲染时的时候,因为前面设置过eglfsQT环境变量
我们直接指定 ./my_app -platform wayland 来远行程序,
启动了Wayland合成器
就使用不了EGL(eglfs)来渲染了
必须先关掉 sudo pkill -9 weston
四,移植后效果

五,知识总结
平台插件(位于/opt/qt_em800_5.12.8/plugins/platforms):
|
插件文件 |
平台类型 |
元数据中的关键标识(Keys) |
|
libqeglfs.so |
EGLFS |
eglfs |
|
libqlinuxfb.so |
Linux帧缓冲 |
linuxfb |
|
libqminimal.so |
最小化渲染 |
minimal |
|
libqminimalegl.so |
最小化EGL |
minimalegl |
|
libqoffscreen.so |
离屏渲染 |
offscreen |
|
libqvnc.so |
VNC远程 |
vnc |
|
libqwayland-egl.so |
Wayland-EGL |
wayland-egl |
|
libqwayland-generic.so |
Wayland通用 |
wayland |
|
libqxcb.so |
XCB(X11) |
xcb |
EGL设备插件(位于/opt/qt_em800_5.12.8/plugins/egldeviceintegrations):
|
插件文件 |
设备类型 |
元数据中的关键标识(Keys) |
|
libqeglfs-emu-integration.so |
EGLFS模拟器 |
eglfs_emu |
|
libqeglfs-kms-egldevice-integration.so |
KMS EGL设备 |
eglfs_kms_egldevice |
|
libqeglfs-kms-integration.so |
KMS通用 |
eglfs_kms |
|
libqeglfs-mali-integration.so |
Mali GPU |
eglfs_mali |
|
libqeglfs-x11-integration.so |
X11集成 |
eglfs_x11 |
更多推荐




所有评论(0)