海思Hi3559AV100移植Qt5.9.9(三)

目录

前言

1 准备

2 编译Qt应用

2.1 编译环境准备

2.2 编译Qt应用

3 Qt运行环境配置

3.1 运行时文件准备

3.1.1 Qt运行库

3.1.2  Tslib它运行库

3.1.3 海思平台库

3.1.4  字体库

3.2 环境变量配置

4 运行Qt程序

5 总结


前言

海思Hi3559AV100平台性能强悍,支持H264、H265 编码,分辨率可达16K,帧率可达120fps,应用于安防、无人机、智能机器人、人工智能、教育、车载设备、会议等诸多行业。但海思官方SDK并没有提供GUI组件,用户开发图形界面应用十分不便。

Qt 是一个跨平台的C++应用程序开发框架。它提供给开发者建立图形用户界面所需的功能,广泛用于开发图形用户界面程序,也可用于开发非图形用户界面(比如命令行界面)程序。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。如果将Qt移植到Hi3559A平台,将极大地方便用户开发图形应用程序。

本系列将以Qt5.9.9为例详细介绍移植Qt全过程,包括:

  1. 从零搭建海思交叉编译环境;
  2. 交叉编译Qt5.9.9;
  3. H3559AV100平台运行Qt程序;
  4. 如何使Qt支持QML(GPU/EGLFS);
  5. 如何支持多点触控。

本文是Hi3559AV100移植Qt系列的第三篇,主要介绍交叉编译Qt应用程序,并配置目标板上的Qt运行环境,保证Qt应用程序可以正常运行。

【参考】

  1. 海思Hi3559av100移植Qt5.9.7https://blog.csdn.net/year12/article/details/96170989
  2. 海思3559A QT 5.12移植(带webengine 和 opengl es)https://blog.csdn.net/weixin_30273175/article/details/95689400
     

1 准备

Qt源码:https://download.qt.io/archive/qt/5.9/5.9.9/single/qt-everywhere-opensource-src-5.9.9.tar.xz

需要用到Qt源码中examples,前面下载过的不需要重复下载。

2 编译Qt应用

2.1 编译环境准备

上一篇博文(海思Hi3559AV100移植Qt5.9.9(二))中提到,Qt安装完成之后的目录如下:

/opt/qt5.9.9_hi3559a/
├── bin
├── doc
├── include
├── lib
├── mkspecs
├── plugins
├── qml
└── translations

其中,bin目录下包含了host端交叉编译需要用到的工具,需要把这个目录加入到环境变量PATH中

$ sudo vim /etc/profile

source使能配置生效,运行qmake校测是否配置成功。

xiaoli@xiaoli-virtual-machine:~$ source /etc/profile
xiaoli@xiaoli-virtual-machine:~$
xiaoli@xiaoli-virtual-machine:~$
raigor@xiaoli-virtual-machine:~$ qmake -v
QMake version 3.1
Using Qt version 5.9.9 in /opt/qt5.9.9_hi3559a/lib
xiaoli@xiaoli-virtual-machine:~$

2.2 编译Qt应用

Qt源码中包含很多示例demo,我们以mainwindow的example为例,说明其编译过程。

~~$ cd qtbase/examples/widgets/mainwindows/mainwindow/
~~$ ls
colorswatch.cpp  main.cpp        mainwindow.h    mainwindow.qrc  titlebarCenter.png  titlebarRight.png  toolbar.h
colorswatch.h    mainwindow.cpp  mainwindow.pro  qt.png          titlebarLeft.png    toolbar.cpp
~~$ qmake
~~$ make
~~$ ls
colorswatch.cpp  main.cpp    mainwindow.cpp  mainwindow.pro  Makefile  titlebarCenter.png  titlebarRight.png  toolbar.h
colorswatch.h    mainwindow  mainwindow.h    mainwindow.qrc  qt.png    titlebarLeft.png    toolbar.cpp

编译成功后,将生成可执行程序mainwindow,这个文件后续将拷贝到Hi3559A平台上运行

3 Qt运行环境配置

3.1 运行时文件准备

Qt运行时需要以下库支撑:

  1. Qt运行库
  2. TsLib运行库
  3. 海思平台库
  4. 字体库

这些库为方便管理,统一放到/mnt/mmc下,当然这个目录不是必须的,可以根据实际情况放到其他目录下。

3.1.1 Qt运行库

上一篇博文(海思Hi3559AV100移植Qt5.9.9(二))中提到,Qt安装完成之后的目录如下:

/opt/qt5.9.9_hi3559a/
├── bin
├── doc
├── include
├── lib
├── mkspecs
├── plugins
├── qml
└── translations

该目录包含了运行时库和host工具,简单的操作是把该目录整体拷贝到单板中,本人拷贝到了/mnt/mmc/lib。

/mnt/mmc/lib # ls             
qt5.9.9_hi3559a

3.1.2  Tslib它运行库

上一篇博文(海思Hi3559AV100移植Qt5.9.9(二))中提到,tslib安装在/opt/tslib_hi3559av100下,同上,简单操作操作是把整个目录拷贝到单板中,本人拷贝到了/mnt/mmc。

/mnt/mmc # ls
fonts              lib                tslib_hi3559av100

使用tslib需要运行ts_calibrate对其进行校准:

运行./ts_calibrate,依次点击屏幕出现的图标即可。

/mnt/mmc/tslib_hi3559av100 # cd bin/
/mnt/mmc/tslib_hi3559av100/bin # ./ts_calibrate
xres = 1920, yres = 1200
Took 1 samples...
Top left : X = 1873 Y = 1160
Took 1 samples...
Top right : X =   34 Y = 1149
Took 1 samples...
Bot right : X =   47 Y =   65
Took 1 samples...
Bot left : X = 1864 Y =   57
Took 1 samples...
Center : X =  946 Y =  625
1909.696777 -0.995569 -0.001831
1213.880493 0.000821 -1.005666
Calibration constants: 125153888 -65245 -120 79552872 53 -65907 65536
/mnt/mmc/tslib_hi3559av100/bin #

3.1.3 海思平台库

海思运行时位于海思的SDK中,具体位置如下:


~~$ pwd
/home/xiaoli/work/Hi3559AV100_SDK_V2.0.2.0/mpp/out/linux/multi-core/lib
~~$ ls
libaacdec.a      libdpu_rect.a   libhiavslut.a        lib_hidehaze.so           libhive_ANR.so     libive.so       libpciv.a              libsns_imx290.a         libsvpruntime.so
libaacdec.so     libdpu_rect.so  libhiavslut.so       lib_hidrc.a               libhive_common.so  libmd.a         libpciv.so             libsns_imx290.so        libtde.a
libaacenc.a      libdsp.a        lib_hiawb.a          lib_hidrc.so              libhive_EQ.so      libmd.so        libpos_query.a         libsns_imx334.a         libtde.so
libaacenc.so     libdsp.so       lib_hiawb_natura.a   libhifisheyecalibrate.a   libhive_HPF.so     libmfnr_ap.a    libpos_query.so        libsns_imx334_slave.a   libupvqe.a
libdetail_ap.a   libhdmi.a       lib_hiawb_natura.so  libhifisheyecalibrate.so  libhive_record.so  libmpi.a        libsecurec.a           libsns_imx334_slave.so  libupvqe.so
libdnvqe.a       libhdmi.so      lib_hiawb.so         lib_hildci.a              libhive_RES.so     libmpi_photo.a  libsecurec.so          libsns_imx334.so        libVoiceEngine.a
libdnvqe.so      libhdr_ap.a     libhi_cipher.a       lib_hildci.so             libisp.a           libmpi.so       libsfnr_ap.a           libsns_imx477.a         libVoiceEngine.so
libdpu_match.a   lib_hiae.a      libhi_cipher.so      libhive_AEC.so            libisp.so          libnnie.a       libsns_imx277_slvs.a   libsns_imx477.so        libxml_ap.a
libdpu_match.so  lib_hiae.so     lib_hidehaze.a       libhive_AGC.so            libive.a           libnnie.so      libsns_imx277_slvs.so  libsvpruntime.a


~~$ pwd
/home/raigor/work/Hi3559AV100_SDK_V2.0.2.0/mpp/component/gpu/release/lib
~~$ ls
libEGL.so  libGLESv1_CM.so  libGLESv2.so  libmali.so  libOpenCL.so  libpano2view.so

将该目录所有内容拷贝到单板下的/mnt/mmc/lib和/mnt/mmc/lib/gpulib中:

/mnt/mmc # ls /mnt/mmc/lib/
gpulib                    libhi_cipher.a            libmtdev.so.1
libVoiceEngine.a          libhi_cipher.so           libmtdev.so.1.0.0
libVoiceEngine.so         libhiavslut.a             libnnie.a
lib_hiae.a                libhiavslut.so            libnnie.so
lib_hiae.so               libhifisheyecalibrate.a   libpciv.a
lib_hiawb.a               libhifisheyecalibrate.so  libpciv.so
lib_hiawb.so              libhive_AEC.so            libpos_query.a
lib_hiawb_natura.a        libhive_AGC.so            libpos_query.so
lib_hiawb_natura.so       libhive_ANR.so            libqlinuxfb.so
lib_hidehaze.a            libhive_EQ.so             libsecurec.a
lib_hidehaze.so           libhive_HPF.so            libsecurec.so
lib_hidrc.a               libhive_RES.so            libsfnr_ap.a
lib_hidrc.so              libhive_common.so         libsns_imx277_slvs.a
lib_hildci.a              libhive_record.so         libsns_imx277_slvs.so
lib_hildci.so             libiperf.a                libsns_imx290.a
libaacdec.a               libiperf.la               libsns_imx290.so
libaacdec.so              libiperf.so               libsns_imx334.a
libaacenc.a               libiperf.so.0             libsns_imx334.so
libaacenc.so              libiperf.so.0.0.0         libsns_imx334_slave.a
libdetail_ap.a            libisp.a                  libsns_imx334_slave.so
libdnvqe.a                libisp.so                 libsns_imx477.a
libdnvqe.so               libive.a                  libsns_imx477.so
libdpu_match.a            libive.so                 libsvpruntime.a
libdpu_match.so           libmd.a                   libsvpruntime.so
libdpu_rect.a             libmd.so                  libtde.a
libdpu_rect.so            libmfnr_ap.a              libtde.so
libdsp.a                  libmpi.a                  libupvqe.a
libdsp.so                 libmpi.so                 libupvqe.so
libhdmi.a                 libmpi_photo.a            libxml_ap.a
libhdmi.so                libmtdev.la               qt5.9.9_hi3559a
libhdr_ap.a               libmtdev.so               qt5.9.9_hi3559a_release

3.1.4  字体库

Qt运行时需要使用及字体库,目标版本至少需要中英文两种字体库,否则字符会出现方框。ttf字体网上download即可,下载完成后把字体库放到/mnt/mmc/fonts目录下:

/mnt/mmc # ls fonts/
LiberationMono-Bold.ttf         LiberationSerif-Bold.ttf
LiberationMono-BoldItalic.ttf   LiberationSerif-BoldItalic.ttf
LiberationMono-Italic.ttf       LiberationSerif-Italic.ttf
LiberationMono-Regular.ttf      LiberationSerif-Regular.ttf
LiberationSans-Bold.ttf         cantarell
LiberationSans-BoldItalic.ttf   ttf
LiberationSans-Italic.ttf       wenquanyi.ttf
LiberationSans-Regular.ttf

3.2 环境变量配置

修改profile文件:

/mnt/mmc # vi /etc/profile

在profile文件中添加如下内容:

export TSLIB_DIR=/mnt/mmc/tslib_hi3559av100
# 触摸事件节点,需要根据实际情况配置
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_DIR/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0

export QTDIR=/mnt/mmc/lib/qt5.9.9_hi3559a
#export QTDIR=/mnt/nfs/qt-everywhere-opensource-src-5.9.9/qtbase/
export LD_LIBRARY_PATH=/mnt/mmc/lib:/mnt/mmc/lib/gpulib:$QTDIR/lib:$QTDIR/plugins/imageformats:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/

export QT_QPA_PLATFORM=eglfs:fb=/dev/fb0:offset=0x0:nographicsmodeswitch
export QML2_IMPORT_PATH=$QTDIR/qml
export QT_QPA_EGLFS_WIDTH=1920
export QT_QPA_EGLFS_HEIGHT=1200
export QT_QPA_EGLFS_PHYSICAL_WIDTH=216
export QT_QPA_EGLFS_PHYSICAL_HEIGHT=135
export QT_QPA_FONTDIR=/mnt/mmc/fonts
export QT_QPA_FB_TSLIB=1
export QT_QPA_FB_HIDECURSOR=0

编辑完成后执行 source /etc/profile或者reboot,完成配置

4 运行Qt程序

将编译的Qt应用mainwindow拷贝到单板上运行:

5 总结

以上就是Qt运行环境的搭建过程。需要注意的是ts_calibrate最好校准后使用。当然tslib在电容屏的天下并不适合,后续再多点触控中会使用其他方法替换掉。上述环境中虽然使用了eglfs,但实际上只能运行widget程序,并不能运行qml程序,下一篇会介绍如何支持qml程序运行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值