含泪研究两周,终于实现了在RK3399+ubuntu虚拟机的交叉编译,并带opengl es 和eglfs模块,最终在板子上跑起来交叉编译后的qt3d demo,亲测gpu使用正常。

tow weeks later……

含泪又研究两周,发现并没有完全成功,对不住了各位,还是把流程和问题说一说给大家参考吧:

手上有firefly的板子(自带qt5.9.3库,ubuntu桌面系统),toybrick的板子(自带qt5.11.3库,debain桌面系统)用于测试。

toybrick板子需要执行命令sudo toybrick-mali.sh link

才能链接gpu正常使用,详情参考链接 http://t.rock-chips.com/forum.php?mod=viewthread&tid=1378&highlight=opengl

gpu测试:

Glmark2 是一款比较出名的 GPU benchmark 测试程序,支持 OpenGL 2.0 和 OpenGL ES 2.0。在 Ubuntu 系统上可以直接通过 apt install 命令安装

#安装 sudo apt install glmark2

#运行 glmark2

图不截了,有一个3D的马在转圈圈

#查看gpu占用率  cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/load

0@200000000Hz

@前面的数值表示gpu占用率,如果一直为0,说明gpu没有用起来。

关于qt库的问题

->系统自带的qt库是定制版本的(可以良好的适配桌面系统,但功能有所阉割),怎么卸载都卸载不掉,强制删库桌面系统就起不来。

->自己交叉编译的qt库,拷贝到开发板,指定环境变量后,eglfs模块运行不起来,会报错初始化egl错误。(可能还是我比较菜,eglfs模块没有编译好)

->但系统自带的qt库支持eglfs模块,所以交叉编译后的可执行程序,用系统自带的库可以运行。

所以目前我们的现状就是:

用虚拟机交叉编译了qt的库,在虚拟机上用qtcreator可以开发编译程序,编译好的程序拷贝到板子上可以用板子自带qt库运行。也就是最终没有做目录中的第5步,只是实现了交叉编译,并没有实现qt移植。

关于eglfs模块的问题

为什么要用eglfs插件?因为带opengl加速的qt需要在该插件下才能正常运行。

别的插件行不行?wayland,xcb也可以,但我没有尝试过。

怎么用eglfs插件运行程序?(确保qt库有eglfs模块,目前板子自带的qt库是有的。如果自己交叉编译qt库,需要把eglfs模块编译出来)

方式1:环境变量指定export QT_QPA_PLATFORM=eglfs    # 指定QPA平台

方式2:运行时候指定 ./example -platform eglfs

关于3399开发板自带的qt库阉割了什么功能

目前发现不能实现opengl多线程渲染,即qt自带demo中,"Scene Graph - Rendering FBOs in a thread" 这个例子不能正常运行

同时发现板子自带的qt include 目录中,没有<QtGui/qpa/qplatfromintegration.h>,甚至没有qpa这个文件夹目录,也没有相关的库

这让我们陷入了瓶颈,导致程序运行会卡,qt的opengl图形渲染和视频播放(用了QOpenGLWidget)同时放在主线程进行时,会卡的不得了

这个问题暂时没有解决,期待大神看到能指点一二

1.准备虚拟机及必备软件和库的安装

2.开发板挂载虚拟机,虚拟机共享主机文件夹

3.虚拟机安装交叉编译链

4.下载qt5.12.0源码、配置、及编译

5.编译好的qt库拷贝到开发板、开发板环境变量配置

6.运行编译好的qt程序

7.gpu使用率查看

目录里面的内容感觉其他教程里都有,有时间再详细更新吧,我只把第3,4步里面的配置贴出来给大家参考一下

主要流程参考链接 https://blog.csdn.net/hl1796/article/details/90205218

需要注意的点:

1)虚拟机上建立target目录,把开发板usr中的include和lib拷贝过来,注:目录结构最好和开发板的目录结构一样

2)qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf文件的修改:需要注意的是,文件路径一定要确保写对

#
# qmake configuration for building with aarch64-linux-gnu-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

#QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = aarch64-linux-gnu-gcc
QMAKE_CXX               = aarch64-linux-gnu-g++
QMAKE_LINK              = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        = aarch64-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY           = aarch64-linux-gnu-objcopy
QMAKE_NM                = aarch64-linux-gnu-nm -P
QMAKE_STRIP             = aarch64-linux-gnu-strip

# tell configure where to find opengl_es2 and egl
QMAKE_INCDIR_OPENGL_ES2 = /home/***/work/target/usr/include
QMAKE_LIBDIR_OPENGL_ES2 = /usr/aarch64-linux-gnu
QMAKE_LIBS_OPENGL_ES2 = -lEGL -lGLESv2 -lmali

QMAKE_INCDIR_EGL = /home/***/work/target/usr/include
QMAKE_LIBDIR_EGL = /usr/aarch64-linux-gnu
QMAKE_LIBS_EGL = -lEGL -lGLESv2 -lmali

#QMAKE_INCDIR += /home/***/work/target/usr/include
#QMAKE_LIBDIR += /usr/aarch64-linux-gnu
#QMAKE_LIBS += -lEGL -lGLESv2 -lmali

QT_QPA_DEFAULT_PLATFORM = eglfs #linuxfb

QMAKE_LIBS += -lrt

EGLFS_DEVICE_INTEGRATION = eglfs_mali

load(qt_config)

3)configure建立了一个文件auto.sh,运行auto.sh 完成configure,文件里内容如下

#!/bin/sh
./configure \
-prefix /usr/bin/qt5.12.0-arm64-eglx11 \
-sysroot /home/***/work/target \
-confirm-license \
-opensource \
-release \
-make libs \
-xplatform linux-aarch64-gnu-g++ \
-pch \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-dbus \
-no-xcb \
-no-separate-debug-info \
-opengl es2 \
-egl \
-eglfs \
-recheck-all

4)这时候configure会出错

如果是opengl es的错误找不到库或头文件的错,请再仔细检查路径的设置

openGL ES系列…………yes

EGL…………………………yes

EGLFS……………………yes

EGLFS Mali………………yes

其中EGLFS Mali通常是失败的,如下图所示,查看config.log,发现找不到fbdev_window

在EGL头文件目录中增加软链,重新编译后成功

ln -s egl.h fbdev_window.h


其他的问题,缺什么库在板子上装什么库,然后拷贝到虚拟机target目录

5)有修改后,最好make distclean后,重新编译qt

这样应该就行了,编译好qt,配置qtcreator中 kit

把可执行程序拷贝到开发板运行的时候有几点注意

1,将开发板切换的纯终端运行alt+f1(切换回来用alt+f7)

2,执行时候我们通常用 ./example -platform eglfs执行,或者加环境变量指定用eglfs插件

亲测大部分qt opengl的demo可以运行,并且使用了gpu加速

含泪研究两周,终于实现了在RK3399+ubuntu虚拟机的交叉编译,并带opengl es 和eglfs模块,最终在板子上跑起来交叉编译后的qt3d demo,亲测gpu使用正常。目录1.准备虚拟机及必备软件和库的安装2.开发板挂载虚拟机,虚拟机共享主机文件夹3.虚拟机安装交叉编译链4.下载qt5.12.0源码、配置、及编译5.编译好的qt库拷贝到开发板、开发板环境变量配置6.运行编译好的qt程序7.gpu使用率查看这次一定要更新,不更新下个月胖三斤!...
qt5 . 12.0 静态资源包,不支持directx 12版本.因为大部分window7版本以下会无法打开 qt 应用. 使用 方法为: 1.打开最新版visualStudio。创建新工程不打开项目,选择安装 qt -plugins.搜索 qt . 然后执行安装,根据提示重启VS 2.上述安装完毕后,点击创建新的 qt - quick project ,名字任意,选择我们解压的 qt 版本. 3. 环境选择x86 ,release版本 4. 右键工程,在代码生成中选择 MT 5.完毕,运行成功。 qt quick应用静态编译和动态编译的区别。就是静态编译出来会将相关用到的 qt 核心依赖库随编译一起打包出来一个exe文件,无需引入 qt core等dll。动态编译要手东windeoloy ,体积几百M,静态编译只需要10M不到
最近由于项目的需要,需要在aarch64 Ubuntu16.04中安装 QT5 ,本来系统中自 了一个 qt5 ,奈何项目要求必须是 qt5 .12的版本并且需要包含 opengl egl fs 的库,所以只能重新移植 QT5 .12到开发板中,下面把移植过程记录下。 下载 QT5 源码 下载地址:https://download. qt .io/archive/ qt / 找到自己需要的版本进行下载。 图中标出来的就是源码下载链接。随便下载哪一个都行。下载后放入ubuntu(我用的Ubuntu 16.04)系统中进行解压。
主要是为了解决前面博客最后图片不能显示问题,所以博主决定沉下心来先把一些基础知识重新整理下,所以才有了前面三篇博客: Ubuntu下的基本知识点(一)_jiug es hao的专栏-CSDN博客 Ubuntu下的基本知识点(二)_jiug es hao的专栏-CSDN博客 Ubuntu下源码编译OpenCV静态库及 使用 (勾选WITH_ QT )_jiug es hao的专栏-CSDN博客 在此基础上,博主继续做了多次尝试,终于解决了此问题。过程中也参考stack Overflow上的解决方法,然而并没有什么作用,其
本文记录了 QT 交叉编译 并移植到开发板的过程,并在虚拟机上用 QT creater 开发程序,到开发板上运行。其中重点解决了一些过程中的BUG和坑。 1、一个ubuntu系统的电脑(或虚拟机) 2、 QT 源代码软件包 qt -everywhere-opensource-src-5.9.6.tar.xz 3、linaro 交叉编译 器 4、tslib 5、sqlite3 6、开发板根文件系统,其中包含了 OpenGL ES 3的库文件和头文件。 一、 交叉编译 环境搭建 直接参考文章linux_ubuntu_
1.将rk开发板上/usr/include和/usr/lib,/lib/aarch64-linux-gnu目录拷贝到虚拟机某个目录下,来构建sysroot目录。为何需要拷贝/lib,原因是/usr/lib下用到的相关库链接到了该目录。 我构建的sysroot路径为/root/work/code/software/target,在该目录下放开发板的根目录文件,注意目录要一致。 #include_next <stdlib.h>,这个问题有遇到吗? 1 在.pro文件中添加如下两行: ​​​​​​​DEFINES += ENABLE_PRECOMPILED_HEADERS=OFF QMAKE_CFLAGS_ISYSTEM = -I 2 在.pro文件中去除如下一行: INCLUDEPATH +=/usr/include 上述方法1用了,没作用,方法2本身qt.pro没有这一项,有没有别的思路? RK3399交叉编译带opengl的qt5.12.0(eglfs-mali 、eglfs-x11)gpu使用及测试 qq_45320398: ln -s egl.h fbdev_window.h 添加了这个软连接还是失败哦 RK3399交叉编译带opengl的qt5.12.0(eglfs-mali 、eglfs-x11)gpu使用及测试 qq_45320398: 大佬 rk3399 交叉编译QT源码你成功了吗 RK3399交叉编译带opengl的qt5.12.0(eglfs-mali 、eglfs-x11)gpu使用及测试 LhStory: 您好请问下这里QMAKE_LIBDIR_OPENGL_ES2 = /usr/aarch64-linux-gnu 这个库还是用的虚拟机里的?还是板子上拷过来的库 ? RK3399交叉编译带opengl的qt5.12.0(eglfs-mali 、eglfs-x11)gpu使用及测试 LhStory: 问下他这里QMAKE_LIBDIR_OPENGL_ES2 = /usr/aarch64-linux-gnu 这个库还是用的虚拟机里的?还是板子上拷过来的库 ?