广告

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

2019-7-11 16:07 83 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-07-08 18:03
嵌入式 ARM 平台配置远程桌面
By Toradex秦海1). 简介在PC平台经远程桌面连接已经是非常方便了,而现在在嵌入式ARM平台,由于远程控制或者远程调试的需要,配置远程桌面的需求也越来越多,本文就着重演示基于嵌入式...
hai.qin_651820742 2019-06-28 17:13
关于以太网保护电路设计的讨论
以太网通信在各个领域里得到了广泛的应用,为设备之间的互联提供了便利的连接方案。而对功耗、速度和功能的追求,PHY 芯片的加工工艺也从65nm、45nm过渡到更先进的制程技术,因而对PHY 应用电路也提...
hai.qin_651820742 2019-06-26 18:08
以太网一致性测试
简介Toradex 供应稳健而可靠的嵌入式系统,它们被要求在严苛的环境能够不间断地运行。以太网是物联网 (IoT)的重要接口之一。我们将会查阅一些以太网标准并向您展示 T...
hai.qin_651820742 2019-05-14 10:34
嵌入式 ARM 平台 libsoc 开发示例
By Toradex秦海1). 简介在之前的一篇文章中已经介绍过如何基于嵌入式Linux部署libsoc支持, 本文就继续基于NXP IMX6平台演示基于libsoc分别对GPIO...
hai.qin_651820742 2019-05-08 16:23
NXP iMX7 M4 核心 SPI Slave 测试
By Toradex秦海1). 简介在之前的两篇文章中已经介绍过基于NXP iMX7 异构多核架构进行开发调试,以及iMX7 M4核心PWM驱动开发。本文就继续演示基于iMX7 M...
我要评论
0
0
广告
关闭 热点推荐上一条 /2 下一条