Ubuntu18.04交叉编译OpenCV3.4.9和QT5.12.2至ARM64位平台firefly-RK3399(二)

Ubuntu18.04交叉编译OpenCV3.4.9和QT5.12.2至ARM64位平台firefly-RK3399 (二)

前言:上一篇博客里介绍了如何交叉编译opencv并将其部署至RK3399开发板上,但由于GTK的问题导致opencv无法使用gui,这篇博客就将介绍如何交叉编译QT,并将其作为gui供opencv使用。

一、环境介绍

Host :PC端ubuntu18.04 64位
Target:ARM64开发板 firefly-RK3399 lubuntu18.04 64位
版本:3.4.9
QT版本:5.9.9&5.12.2

二、PC端交叉编译QT5.9.9

如果有触摸屏需求则需要额外交叉编译tsilb,如果用不到触摸功能则可以不编译,具体可以参考以下这篇博客,写的很详细:QT5.9.6移植到ARM平台
按照步骤编译完成后部署至开发板上发现虽然选择了linuxfb作为显示驱动,但是会与RK3399上的lubuntu的图形界面冲突,虽然QT的gui程序可以正常运行,但是显示会与系统的图形界面冲突。猜测可能是5.9.9对于基于X11的嵌入式linux系统支持不够好。

三、PC端交叉编译QT5.12.2

由于上一步中交叉编译得到的Qt5.9.9在RK3399上并不能正常使用,于是在firefly的官网上查询了有关firefly-Rk3399对于QT的支持问题,在官网上找到了一个已经交叉编译好的qt5.12.2:传送门(无需积分关注我即可下载)
将其拷贝并解压至RK3399的/opt目录下,已经附带了一个说明文档如下:

# Qt 5.12.2 arm64 ubuntu18.04 Cross Compile

Firefly Qt5.12.2 ,Work Environment

*   Host(x86 PC)  : ubuntu 18.04 x86_64

*   Target(RK3399, RK3328, PX30): ubuntu 18.04 arm64

## Host Deployment

```shell
$ apt install -y crossbuild-essential-arm64
$ cd firfly_arm64_qt5.12.2_18.04
$ cp -rfd host/opt  /
$ cp host/opt/qtEnv.sh  /etc/profile.d/
reboot

Target Deployment

$ cd firfly_arm64_qt5.12.2_18.04
$ cp -rfd host/opt/firefly_qt5.12.2_arm64_18.04/ext  /opt/firefly_qt5.12.2
$ cp target/qtEnv.sh /etc/profile.d/
$ cp target/qt.conf /etc/ld.so.conf.d
$ ldconfig
$ reboot


# Install base library
$ apt install -y \
      libmtdev1 \
      libinput10 \
      libxkbcommon0 \ 
      libdouble-conversion1 \
      libicu60 \
      libharfbuzz0b

#Qt QPA Backends
# linuxfb
$ export QT_QPA_PLATFORM=LINUXFB
$ export QT_QPA_FB_DRM=1
$ demo/analogclock

#eglfs
$ export QT_QPA_PLATFORM=EGLFS
$ export QT_QPA_EGLFS_INTEGRATION=EGLFS_KMS #in minimal ubuntu, use eglfs_kms.
$ export QT_QPA_EGLFS_KMS_ATOMIC=1  #use drm atomic api or legacy api(two different)
$ export QT_QPA_EGLFS_HIDECURSOR=1  #hide cursor
$ demo/openglwindow

#xcb (Ubuntu Desktop)
$ apt install -y \
      libxcb-icccm4 \
      libxcb-image0 \
      libxcb-shm0 \
      libxcb-keysyms1 \
      libxcb-render0 \
      libxcb-render-util0  \
      libxcb-shape0 \
      libxcb-sync1 \
      libxcb-xfixes0 \
      libxcb-xinerama0 \
      libxcb-xkb1 \
      libxcb-randr0 \
      libsm6 \
      libice6 \
      libxkbcommon-x11-0

$ export QT_QPA_PLATFORM=xcb

Cross Compile on Host

$ cd example/
$ qmake
$ make

分别列举了三种不同显示驱动linuxfb/eglfs/xcb所需要安装的对应依赖,可以根据需求不同在开发板上安装好对应的依赖。

三.RK3399开发板上的部署

上述的说明文档中必须严格按照它的文件路径去安放对应文件,不然运行上述傻瓜式脚本也会出错,实际上只需要像之前一篇配置opencv一样去部署即可,后续的其它软件的移植也可仿照以下两个步骤进行部署。

1. 添加动态库加载路径

运行Vim /etc/ld.so.conf.d/qt.conf,会提示该文件不存在将新建一个新的conf文件,在打开的conf第一行里写上自己第一步解压的qt的lib地址,如

/home/firefly/wangrui/firefly_qt5.12.2/lib

若你是解压在/opt文件夹下则是:

/opt/firefly_qt5.12.2/lib

vim中输入:wq指令保存并退出,随后运行sudo ldconfig激活生效。

2. 环境变量配置

firefly官方已经给了qt环境变量配置的脚本qtEnv.sh如下:

QT5_12_2PATH="/opt/firefly_qt5.12.2"

LD_LIBRARY_PATH=$QT5_12_2PATH/lib:$LD_LIBRARY_PATH
LIBRARY_PATH=$QT5_12_2PATH/lib:$LIBRARY_PATH
C_INCLUDE_PATH=$QT5_12_2PATH/include:$C_INCLUDE_PATH
CPLUS_INCLUDE_PATH=$QT5_12_2PATH/include:$CPLUS_INCLUDE_PATH
PATH=$QT5_12_2PATH/bin:$PATH

PKG_CONFIG_PATH=$QT5_12_2PATH/lib/pkgconfig:$PKG_CONFIG_PATH
QT_QPA_PLATFORM_PLUGIN_PATH=$QT5_12_2PATH/plugins

export LD_LIBRAY_PATH
export LIBRAY_PATH
export C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH

export PKG_CONFIG_PATH
export PATH

运行Vim /etc/bash.bashrc 进入编辑模式后,在最后一行将上述的qtEnv的内容全部复制上去,再在后面选择复制对应的显示驱动方式,如export QT_QPA_PLATFORM=xcb,只需要确保第一行qt的文件路径与你开发板上的一致即可,vim中运行:wq保存退出,随后运行source ~/.bashrc激活生效。

至此qt在开发板上的部署就全部完成了,接下来可以运行qt自带的一些示例去检测一下qt是否能在开发板上正常工作。

四.实例交叉编译及运行

若之前按照第二步交叉编译了qt5.9.9则可以在交叉编译后的/qt5.9.9/examples文件夹下找到已经编译好的可执行程序,若没有则可以到5.12.2的源码的example里qmake & make去交叉编译想要测试的程序,这里选择了qt两个示例程序analogclock和dials,时钟显示的gui以及有鼠标交互的旋钮程序,将交叉编译好的程序拷贝至开发板任意目录,并在此目录中运行指令./dials即可,开发板上运行效果如下:
在这里插入图片描述
在这里插入图片描述至此代表qt的交叉编译及移植已经成功,下一步就是要将openCV和qt二者结合,在开发板上实现openCV处理qt作为gui显示。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值