海思平台QT 5.15.15移植入门

海思平台QT 5.15.15移植入门 UncleRoderick 2025-01-13 09:47:41 274

海思平台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:该目录下的文件说明。

​ 以上为本文的所有内容,如有疑问,欢迎评论交流。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 1 1 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
UncleRoderick
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区