海思平台QT 5.15.15移植入门
海思平台QT 5.15.15移植入门
前言:
QT,一个C++ UI框架,广泛应用于嵌入式平台,但在海思平台上,由于HIFB/GFBG的存在,导致许多工程师在QT的移植上遇到了不少困难,以下以SS928V100平台为例,记录下海思平台下的QT移植思路,通用于所有海思平台,文章最后会附上海思平台SS928V100、Hi3519DV500、SS524V100的QT移植文件以及编译好的文件,可按需下载使用。
一、QT源码下载
QT源码的下载可以通过以下链接去官网下载,也可以通过文章末尾链接进行下载。
https://download.qt.io/archive/qt/
二、QT源码编译
注意:以下操作基于虚拟机Ubuntu 18.04以及安装好交叉编译器环境,编译器安装说明请参考SDK相关文档。
1.解压QT源码到Linux主机或者虚拟机。
tar -xvf qt-everywhere-opensource-src-5.15.15.tar.xz
2.进入qt-everywhere-src-5.15.15/qtbase/mkspecs/
目录,复制一份linux-aarch64-linux-gnu-g++
为aarch64-mix210-linux-g++
,也可以直接复制文章末尾链接下载文件到该目录下。
3.进入aarch64-mix210-linux-g++
目录,根据SS928V100的信息修改qmake.conf文件。
4.回到源码目录qt-everywhere-src-5.15.15
,配置交叉编译选项。
以下配置做了一定的裁剪,可按需进行一定的修改,但需要注意以下几个配置:
-prefix "$PWD"/SS928V100_QT_INTASLL
:安装路径配置为源码目录SS928V100_QT_INTASLL
。
-xplatform aarch64-mix210-linux-g++
:指定编译器为前面配置的aarch64-mix210-linux-g++
。
./configure -prefix "$PWD"/SS928V100_QT_INTASLL \
-opensource \
-confirm-license \
-release -strip \
-no-eglfs -linuxfb \
-qt-zlib \
-no-gif \
-qt-libpng \
-qt-libjpeg \
-qt-freetype \
-no-rpath \
-no-pch \
-no-avx \
-no-openssl \
-no-cups \
-no-dbus \
-no-pkg-config \
-no-glib \
-no-iconv \
-xplatform aarch64-mix210-linux-g++ \
-no-opengl \
-nomake examples \
-nomake tools \
-no-sqlite \
-optimize-size \
-skip qtgamepad \
-skip qtandroidextras \
-skip qtmacextras \
-skip qtx11extras \
-skip qtsensors \
-skip qtserialbus \
-skip qtserialport \
-skip qtwebengine \
-skip qtwebchannel \
-skip qtwebsockets \
-skip qtlocation \
-skip qtquickcontrols \
-skip qtpurchasing \
-skip qtconnectivity \
-skip qtscxml \
-skip qtxmlpatterns \
-skip qtnetworkauth \
-skip qtspeech \
-skip qtscript \
-skip qtremoteobjects \
-skip qtcharts \
-skip qtdatavis3d \
-skip qtwebview \
-skip qt3d \
-skip qtquick3d \
-skip qtdoc \
-skip qttranslations \
-skip qtwayland \
-skip qtwayland \
-skip qtwebglplugin \
-skip qtwinextras \
-skip qttools
出现以下信息则说明配置没问题。
5.编译QT源码,直接make执行,可按电脑配置-j开启多线程编译。
经过漫长等待后,出现以下信息则说明QT交叉编译完成。
6.安装,编译完成后执行make install
即可将QT安装在源码目录的SS928V100_QT_INTASLL
。
7.为了养成良好的开发环境习惯,将进行以下操作:
①.将编译好的文件SS928V100_QT_INTASLL
拷贝到Linux主机的/opt/Qt5.15.15/aarch64-mix210-linux
目录。
②.在原有交叉编译器路径创建软链接aarch64-mix210-linux-qmake
。
mkdir -p /opt/Qt5.15.15/
cp -r SS928V100_QT_INTASLL /opt/Qt5.15.15/aarch64-mix210-linux/
ln -s /opt/Qt5.15.15/aarch64-mix210-linux/bin/qmake /opt/linux/x86-arm/aarch64-mix210-linux/bin/aarch64-mix210-linux-qmake
二、HIFB/GFBG适配
参考文档以及代码:
·ReleaseDoc\zh\01.software\board\MPP\GFBG 开发指南.pdf
·ReleaseDoc\zh\01.software\board\MPP\GFBG API 参考.pdf
·SS928V100_SDK_V2.0.2.2/smp/a55_linux/mpp/sample/gfbg/sample_gfbg.c
HIFB/GFBG相关说明可参考以上文档,以下不进行详细描述,只总结以下两个要点:
①.HIFB/GFBG开启前,必须先打开VO设备。
②.colorkey功能能让QT层设置成配置的颜色时透明,从而达到显示视频层的效果。
1.进入源码目录qt-everywhere-src-5.15.15/qtbase/src/plugins/platforms
,复制一份linuxfb
并改名为linuxfb_ss928v100
。
2.修改qlinuxfbscreen.cpp代码进行以下修改:
注意:以下代码中执行了SS928V100R001C02SPC022\02.only for reference\software
目录的ref_patch.sh
,打上了SS928V100_REF_V2.0.2.2.tgz
补丁,所以相关函数和变量均为hi样式。
①.为减少数据量,采用ARGB1555。
②.在initialize函数中添加HIFB/GFBG配置,相关代码参考于SS928V100_SDK_V2.0.2.2/smp/a55_linux/mpp/sample/gfbg/sample_gfbg.c
,注意配置COLORKEY为0x0。
③.绘制函数doRedraw中修改为对HIFB/GFBG画布更新。
④.析构QLinuxFbScreen时也别忘了释放相关资源。
3.linuxfb.pro文件适配。
①.拷贝HIFB/GFBG相关库文件和头文件到qt-everywhere-src-5.15.15/qtbase/src/plugins/platforms/linuxfb_ss928v100
目录下,相关库文件和头文件可从SDK目录SS928V100_SDK_V2.0.2.2/smp/a55_linux/mpp/out
中获取,可以先一次性复制lib和include目录。
②.修改linuxfb.pro文件,添加相关头文件路径和库文件。
③.经测试,仅需要部分库,可以将多余的库删除。
4.编译生成linuxfb_ss928v100.so
在目录qt-everywhere-src-5.15.15/qtbase/src/plugins/platforms/linuxfb_ss928v100
执行aarch64-mix210-linux-qmake
即可生成makefile文件。
执行make操作,即可在目录qt-everywhere-src-5.15.15/qtbase/plugins/platforms
生成libqlinuxfb_ss928v100.so
文件。
总结,经过以上操作即可完成板端所使用的libqlinuxfb_ss928v100.so
文件,以上相关操作中可能并不是最好的,部分机制,比如多buffer、TDE加速等机制并没有整合,有相关经验或者建议的可在评论区提出,后续再做优化处理。
三、板端环境适配
1.拷贝交叉编译后的QT文件到板端,以下以/opt/lib
目录为例。
通过挂载NFS将QT库拷贝到/opt/lib
目录,仅拷贝测试验证相关库,如果程序中依赖了其他QT库,也需要拷贝到该目录下:
cp -d libQt5Core.so* libQt5Gui.so* libQt5Widgets.so* /opt/lib/
2.拷贝libqlinuxfb_ss928v100.so
文件到/opt/plugins
目录,该目录为自行创建。
3.拷贝字库文件到/opt/lib/fonts
目录,该目录为自行创建,OPlusSans3-Medium.ttf
为一加开源免费使用的字库。
4.在板端/etc/profile文件中添加QT相关环境变量。
找到位置/etc/profile,进入编辑状态,并添加以下参数:
export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/plugins
export LD_LIBRARY_PATH=/opt/lib/
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1920x1080:offset=0x0:nographicsmodeswitch
export QT_QPA_FONTDIR=/opt/lib/fonts
四、QT程序测试
1.修改并编译QT测试程序,以qt-everywhere-src-5.15.15/qtbase/examples/widgets/animation/moveblocks
为例。
在该目录执行aarch64-mix210-linux-qmake
即可生成Makefile文件,执行make
即可生成测试程序moveblocks
。
2.将测试程序moveblocks
拷贝到板端,由于HIFB/GFBG的运行依赖VO设备的开启,板端需运行相关程序例如sample_vdec
打开VO设备。
以下为串口运行sample_vdec
程序打开VO设备,另为通过网络telne进板端运行测试程序moveblocks
。
3.此时板端现象为四个色块透明直接显示视频层。
4.在板端/etc/profile
文件中添加QT相关环境变量。
vi /etc/profile
#添加以下参数
export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/plugins
export LD_LIBRARY_PATH=/opt/lib/
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1920x1080:offset=0x0:nographicsmodeswitch
export QT_QPA_FONTDIR=/opt/lib/fonts
总结,以上过程主要验证QT移植后程序运行效果,相关QT工程搭建需自行网上查找资料搭建,或者后续再更新相关文件。
五、文件说明
网盘文件链接:https://pan.baidu.com/s/1rTHX_H4VEuEfPJs6uvhjHg?pwd=8iik
文章中提到的所有文件均已上传至百度网盘,可以按需进行下载,以下对相关文件进行补充说明:
SS524V100:SS524V100平台所适配的文件,详细文件说明参考下面SS928V100平台的文件说明。
SS928V100:SS928V100平台所适配的文件,详细文件说明参考下面进行展开。
Hi3519DV500:Hi3519DV500平台所适配的文件,详细文件参考下面SS928V100平台的文件说明。
fonts:上文提到的字体文件。
moveblocks:上文提到的QT测试程序修改后的代码。
X86:X86平台已移植好的QT 5.15.15库。
QT 5.15.15源码:从官网链接下载的QT 5.15.15源码。
以SS928V100平台为例:
aarch64-mix210-linux-g++:QT源码编译中提到的SS928V100平台编译配置文件,拷贝至qt-everywhere-src-5.15.15/qtbase/mkspecs/目录使用。
SS928V100_QT5.15.15_调试记录.txt:编译过程中所使用的命令。
SS928V100_QT_INTASLL.tar.xz:编译好的QT文件。
linuxfb_ss928v100.tar.xz:适配好的linuxfb源码。
moveblocks:修改代码并编译好的QT测试程序。
文件说明.txt:该目录下的文件说明。
以上为本文的所有内容,如有疑问,欢迎评论交流。
- 分享
- 举报
-
浏览量:1155次2023-09-01 13:29:58
-
浏览量:7451次2021-03-18 08:54:25
-
浏览量:1811次2023-10-12 16:48:04
-
浏览量:1371次2024-06-06 09:47:33
-
浏览量:1501次2023-11-04 15:07:11
-
浏览量:4600次2020-07-31 13:45:09
-
浏览量:1126次2024-01-03 17:15:03
-
浏览量:3442次2020-08-18 20:09:59
-
浏览量:5006次2021-04-17 18:58:36
-
浏览量:3464次2020-04-21 20:28:40
-
浏览量:2240次2020-04-21 20:27:00
-
浏览量:728次2024-02-23 17:34:00
-
浏览量:2971次2020-08-21 19:39:43
-
浏览量:6682次2021-09-02 16:11:45
-
浏览量:3664次2020-07-27 15:12:15
-
浏览量:3313次2020-07-29 11:49:25
-
浏览量:997次2024-01-24 15:46:44
-
浏览量:1256次2024-01-04 17:47:00
-
浏览量:2043次2024-01-02 16:35:00
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
UncleRoderick
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明