一,平台环境

  1. 软件环境

交叉编译Qt5.12.8(aarch64)详细交叉编译过程

EM500 QT5.12.8移植 
 提取码: nzes

  1. 硬件环境

平台架构:瑞萨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

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐