原创 嵌入式 ARM 平台交叉编译Qt5源代码

2019-7-11 16:07 340 0 分类: MCU/ 嵌入式

By Toradex秦海

1). 简介

Qt图形开发框架作为嵌入式ARM平台配合Embedded Linux系统最常用的图形界面开发工具已经被广泛使用,针对基于Ycoto项目编译的Embedded Linux系统,可以非常方便的通过OpenEmbedded开发环境将特定版本的Qt开源版本运行库集成到Embedded Linux系统里面,比如Ycoro release 2.4支持的是Qt 5.9 版本,而当所需要的Qt版本不是这个版本的时候,比如Qt 5.12,那么就需要通过源代码进行交叉编译,本文即进行相关测试示例。

 

本文演示所使用的ARM平台来自Toradex基于NXP iMX6Q SoC平台的Apalis iMX6 ARM核心板。

 

2). 准备

a). Apalis iMX6Q ARM核心版配合Apalis Evaluation Board载板,连接调试串口UART1(载板X29)到开发主机方便调试。更多关于Apalis iMX6配合Apalis Evaluation Board载板的说明请参考Datasheet开发上手指南

 

b). Apalis iMX6Q 安装Toradex Linux BSP V2.8 Embedded Linux,系统基于Ycoto Project/OpenEmbedded 编译环境,编译方法请参考这里,编译好的Linux Image安装方法请参考这里

 

 

3). 编译环境配置

a). 首先下载Apalis iMX6对应的SDK

./ 下载地址 - https://developer1.toradex.com/files/toradex-dev/uploads/media/Colibri/Linux/SDKs/

选择对应的版本和模块进行下载,这里进入 2.8/apalis-imx6/angstrom-lxde-image/ 下进行下载

 

b). 安装SDK,可以安装到默认目录 /usr/local/oecore-x86_64,也可以安装到其他定制目录,如 $home 下面

-----------------------

user@host:~$ cd

user@host:~$ chmod +x angstrom-glibc-x86_64-armv7at2hf-neon-v2016.12-toolchain.sh

user@host:~$ ./angstrom-glibc-x86_64-armv7at2hf-neon-v2016.12-toolchain.sh

Angstrom SDK installer version nodistro.0

=========================================

Enter target directory for SDK (default: /usr/local/oecore-x86_64):

You are about to install the SDK to "/usr/local/oecore-x86_64". Proceed[Y/n]? y

-----------------------

 

c). 修改安装目录下的环境变量输出配置文件

默认环境变量配置文件为 - /usr/local/oecore-x86_64/environment-setup-armv7at2hf-neon-angstrom-linux-gnueabi,修改为如下:

https://github.com/simonqin09/Qt5.12_source_code_compile/blob/master/environment-setup-qt-default

 

 

4). Qt 5.12 源代码下载以及配置

a). 从下面地址下载并解压Qt 5.12 开源版最新源代码 tar.xz 压缩包,本文当前最新版本是5.12.4

https://download.qt.io/archive/qt/5.12/

-----------------------

$ wget https://download.qt.io/archive/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz

$ tar Jxf qt-everywhere-src-5.12.4.tar.xz

$ cd qt-everywhere-src-5.12.4

-----------------------

 

b). 配置文件

./ 首先,因为是交叉编译,因此要使用 qtbase/mkspecs/devices/ 目录下的嵌入式设备对应的qmake配置文件,不过由于预置的针对 NXP iMX6 linux-imx6-g++ 对应的qmake.conf默认是针对 eglfs 文件系统的,而本文测试使用的Toradex默认 Linux BSP是基于X11显示的,因此需要做相应修改。

 

qtbase/mkspecs/devices/linux-imx6-g++/qmake.conf 修改为如下:

https://github.com/simonqin09/Qt5.12_source_code_compile/blob/master/qmake.conf 

 

./ 然后创建configure 配置文件 build_configure.sh如下,主要用于coonfigure配置参数设置,选定xcbX11)支持等,也可以通过 -skip- 来忽略编译某些qt模块,本文默认编译全部。

https://github.com/simonqin09/Qt5.12_source_code_compile/blob/master/build_configure.sh

 

更多的configure选项可以通过 configure --help 来查看,一个完整的help相关打印输出参考如下:

https://github.com/simonqin09/Qt5.12_source_code_compile/blob/master/qt5.12_configure-help-printout

 

 

5). Qt 5.12 源代码交叉编译

a). 首先输出上面章节3准备好的编译环境环境变量

-----------------------

$ source /usr/local/oecore-x86_64/environment-setup-qt-default

-----------------------

 

b). 然后在同一个shell下面执行 build_configure.sh 来进行configure

-----------------------

$ ./ build_configure.sh

-----------------------

 

Configure成功后,会打印罗列要编译的相关组件,可以再次确认下是否符合要求

-----------------------

Configure summary:

 

Building on: linux-g++ (x86_64, CPU features: mmx sse sse2)

Building for: devices/linux-imx6-g++ (arm, CPU features: neon)

Target compiler: gcc 6.2.1

Configuration: cross_compile use_gold_linker compile_examples enable_new_dtags largefile neon shared rpath release c++11 c++14 concurrent dbus reduce_exports stl

Build options:

  Mode ................................... release

  Optimize release build for size ........ no

  Building shared libraries .............. yes

  Using C standard ....................... C11

  Using C++ standard ..................... C++14

  Using ccache ........................... no

  Using gold linker ...................... yes

  Using new DTAGS ........................ yes

  Using precompiled headers .............. no

  Using LTCG ............................. no

  Target compiler supports:

    NEON ................................. yes

  Build parts ............................ libs

OpenGL:

    Desktop OpenGL ....................... no

    OpenGL ES 2.0 ........................ yes

    OpenGL ES 3.0 ........................ yes

    OpenGL ES 3.1 ........................ no

    OpenGL ES 3.2 ........................ no

X11 specific:

    XLib ................................. yes

    XCB Xlib ............................. yes

    EGL on X11 ........................... yes

-----------------------

 

c). 执行make进行编译,由于完整编译需要时间比较长,可以先尝试单独编译qtbase组件,如果编译成功再进行完整编译以提高效率

-----------------------

# compile qt-base

$ make module-qtbase

# compile all components

$ make

-----------------------

 

d). make成功没有错误后,再执行make install进行安装,安装目录通过上面 build_configure.sh脚本 -prefix 参数定义,比如本文则位于 ${SDKTARGETSYSROOT}/usr/local/Qt-5.12.4

-----------------------

$ make install

-----------------------

 

e). 安装成功后,将Qt编译输出目录打包上传以便在Apalis iMX6系统中部署测试

-----------------------

# pack Qt related outputs

$ cd ${SDKTARGETSYSROOT}/usr/local/

$ tar cvf Qt-5.12.4.tar.bz2 Qt-5.12.4/

# scp tar package to Apalis iMX6 Linux $HOME

$ scp Qt-5.12.4.tar.bz2 root@apalis_imx6_ipaddress:/home/root

-----------------------

 

 

6). Qt 5.12 部署测试

a). 首先将Qt 5.12 相关文件部署到Apalis iMX6 Linux /opt 目录下

-----------------------

root@apalis-imx6$ cd /opt

root@apalis-imx6$ tar xvf ~/ Qt-5.12.4.tar.bz2

-----------------------

 

b). 准备测试应用,分别使用下面两个Qt Widget  Qt Quick 应用来测试

./ helloworldUI - Qt Widget 应用,调用GPIO来驱动LED,详细代码和说明参考这里

./ videotest – Qt Quick 应用,通过QtMultimedia组件来播放视频以及调用摄像头,详细代码和说明参考这里

 

将上述两个项目针对Apalis iMX6编译好的可执行文件以及所需要的视频文件复制到Apalis iMX6 Linux $HOME

-----------------------

$ scp helloworldUI videotest ready-player-one-trailer-2_h720p.mov root@apalis_imx6_ipaddress:/home/root

-----------------------

 

c). Apalis IMX6 Linux $HOME 下创建如下测试脚本 qttest.sh, 并通过分别注释领一个应用的方式来测试上述两个应用。

./ qttest.sh - https://github.com/simonqin09/Qt5.12_source_code_compile/blob/master/qttest.sh

 

./ 测试 helloworldUI 应用,如下可见界面显示以及GPIO控制都正常工作,电阻式触摸也工作正常

                                              image001.png

./ 测试 videotest 应用,如下可见界面显示,视频播放以及摄像头捕获均工作正常,电阻式触摸也工作正常

image002.png

 

 

7). 总结

本文示例了基于ARM嵌入式平台对Qt 5.12 源代码进行交叉编译以及部署。


作者: hai.qin_651820742, 来源:面包板社区

链接: https://www.mianbaoban.cn/blog/uid-me-1864768.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
hai.qin_651820742 2019-10-21 11:05
嵌入式 ARM 平台使用Python和PyQT开发界面应用程序
By Toradex秦海1). 简介随着Python在互联网人工智能领域的流行,大家也慢慢感受到Python开发的便利,本文就基于嵌入式ARM平台,介绍使用Python配合PyQT5模块来开...
hai.qin_651820742 2019-10-18 15:16
基于NXP iMX8 进行安卓Android编译和开发
By Toradex 胡珊逢简介安卓 Android 因其丰富的生态环境,以及快捷的应用开发和分发,获得了广泛的市场关注。Toradex最新基于 NXP iMX...
hai.qin_651820742 2019-10-15 16:55
在 NXP iMX8 上进行 Qt5移植和开发
By Toradex 胡珊逢简介高清多媒体,甚至是 4K 视频不仅在消费领域有着旺盛的需求,在行业领域同样也获得广泛的关注。NXP 最新的IMX8 处理器不仅配有强劲的 CPU和GPU,还对多媒体应用...
hai.qin_651820742 2019-10-11 11:37
在 NXP iMX8 上进行 4K 视频播放测试
By Toradex 胡珊逢 1). 简介 高清多媒体,甚至是 4K 视频不仅在消费领域有着旺盛的需求,在行业领域同样也获得广泛的关注。NXP 最新的IMX8 处理器不仅配有强劲的 C...
hai.qin_651820742 2019-09-18 11:31
使用 eMMC 闪存设备的磨损估计
​几十年来,闪存一直是嵌入式系统的一个重要课题。与其他存储技术相比,它允许大幅改进电子设备的大小和鲁棒性。闪存存储的其他优势包括缺少移动部件和降低功耗。然而,闪存的挑战并没有在消费类电子产品中广为宣传...
hai.qin_651820742 2019-08-08 17:02
嵌入式 ARM 平台使用dm-crypt加密磁盘分区
By Toradex秦海 1). 简介 出于安全考虑,嵌入式设备有时需要将某个数据分区甚至整个文件系统进行加密处理,本文就介绍在嵌入式Linux系统下基于dm-crypt进行加密示例,d...
我要评论
0
0
广告
关闭 热点推荐上一条 /1 下一条