如何建立Qt Creator交叉编译嵌入式Linux

Posted chocolate2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何建立Qt Creator交叉编译嵌入式Linux相关的知识,希望对你有一定的参考价值。

如何建立Qt Creator交叉编译嵌入式Linux

  1. 介绍
    1. Qt许可信息
    2. Qt 5
      1. 安装Qt Creator
      2. 用于设备创建的Qt
        1. 构建和部署目标映像
        2. 构建用于开发的SDK
    3. 安装SDK
    4. 配置Qt Creator
  2. 用OpenEmbedded层建造
    1. 构建和部署目标映像
      1. 将Qt5包添加到其他映像目标
    2. 构建用于开发的SDK
    3. 安装SDK
    4. 配置Qt Creator
      1. 添加目标设备
      2. 添加Kit
    5. 引导到嵌入式Linux的Qt
      1. 构建和部署目标映像
      2. 构建用于开发的SDK
    6. 安装SDK
    7. 配置Qt Creator
      1. 添加目标设备
      2. 添加设备

介绍
本文描述了如何在Linux上构建和配置Qt Creator开发环境,以便为基于OpenEmbedded的根文件系统交叉编译Qt应用程序。Qt Creator本身可以从你的发行库中获取,也可以在开源或商业许可下在Qt网站上下载它的安装程序。
如果您从Qt开始,本文可能不会提供最好的用户体验,尽管它提供了全面的信息来源。要获得对开发人员友好的体验,您可以遵循:
•合作伙伴演示映像-用于设备创建的Qt -使用Qt公司提供的预构建评估映像,可在Toradex Easy Installer在线订阅源上获得。
•用于Torizon的qt Debian容器——考虑使用Torizon来简化用户体验。
Qt许可信息
Qt是一个拥有不同许可的大型框架。许可证还取决于使用的Qt版本。我们的合作伙伴Qt公司可以帮助您找到正确的许可证,因此如果您有问题,请咨询Qt许可证页面以获取详细信息。
注意:使用Toradex Easy Installer安装目标模块Apalis iMX6、Colibri iMX6和Colibri iMX7的设备创建映像Qt。

• Qt Creator IDE
Qt 5
安装Qt Creator
Qt Creator为应用开发者提供了一个完整的集成开发环境,可以为嵌入式系统、移动设备、桌面等多个目标创建应用。你可以从Qt Creator的安装程序或发行库中安装它。
•qt Creator安装程序

•直接从分发存储库
要从安装程序中安装Qt Creator,请根据所选的许可证下载它。请确保始终安装最新版本。
运行安装程序:

$ ./qt-unified-linux-x64-3.0.5-online.run

注意:可能有必要将安装程序文件模式更改为可执行文件。
商业许可证支持Qt For Device Creation,它提供了一组现成的工具,用于在Qt Creator IDE中开发嵌入式系统,例如基于Yocto的引导到Qt的预构建映像,以及一系列目标设备(Apalis iMX8和iMX6、Colibri iMX6和iMX7)的交叉编译工具链。这些组件必须在Qt Creator安装期间安装。

• Installing Qt for Device Creation (click to enlarge)
有关Qt设备创建的更多信息,请参阅合作伙伴演示映像- Qt设备创建。
请访问Qt Creator手册了解更多关于IDE及其特性的信息。
在主机上安装Qt Creator之后,需要有一个支持Qt的目标设备映像以及构建的软件开发工具包(SDK)。最后,这个SDK必须在Qt Creator中配置,以便在目标模块中构建和部署应用程序。
为了使目标设备映像和SDK支持Qt,可以使用以下选项之一:
•用于设备创建的Qt:一个为多种嵌入式平台提供Qt开发框架的商业产品。
•使用OpenEmbedded Layers构建:基于OpenEmbedded Layers和Toradex Linux BSP构建自定义的映像和工具链。
•为嵌入式Linux引导到Qt: 基于Qt层和Toradex Linux BSP构建定制的映像和工具链。
下面的选项卡中描述了每个选项的步骤:
•Qt用于设备创建
•使用开放嵌入层构建
•为嵌入式Linux引导到Qt用开放的层建造
构建和部署目标映像
对于Qt 5,可以直接从Toradex Easy Installer安装一个支持Qt 5.11的映像。在目标模块上,您需要安装Qt运行时环境。
因此,需要一个带有Qt运行时库的新映像,允许在目标上执行Qt应用程序。这一步是必须的!
要使用Qt5构建映像,有必要在主机PC上设置一个环境,以便使用基于Toradex BSP和OpenEmbedded层的Yocto项目构建映像。
请参考OpenEmbedded (核心)文章,解决与环境相关的依赖项,并根据主机操作系统完成此设置。
一旦使用Toradex BSP 2.8或更新版本完成设置,就可以验证Qt5层(meta-qt5)已经包含在位于“oe-core/build/conf/bblayers.conf”的层配置文件中。

 bblayers.conf

        $TOPDIR/../layers/meta-openembedded/meta-multimedia \\
        $TOPDIR/../layers/meta-openembedded/meta-python \\
        $TOPDIR/../layers/meta-lxde \\
        $TOPDIR/../layers/meta-browser \\
        $TOPDIR/../layers/meta-qt4 \\
        $TOPDIR/../layers/meta-qt5 \\
        $TOPDIR/../layers/meta-qt5-extra \\
 Legacy information about including meta-qt5 layer

关于包括meta-qt5层的遗留信息
你可以构建以下包含所有Qt5包的映像目标:
•angstrom-qt5- X11 -image:适用于没有桌面的Qt5 X11图像

[build] $ bitbake -k angstrom-qt5-x11-image

向其他映像目标添加Qt5包
要使用BSP V2.8构建一个启用Qt 5.9的映像,需要在~/oe-core/build/conf/local.conf中添加最小的set包。

local.conf

    IMAGE_INSTALL_append = "  qtbase qtdeclarative qtimageformats qtmultimedia qtquick1 qtquickcontrols2 qtquickcontrols "

qtbase包有重要的PACKAGECONFIG选项。例如,如果你想要在你的映像中添加QSQLITE驱动程序,你需要在local.conf中相应地配置这个PACKAGECONFIG选项:

 local.conf

    IMAGE_INSTALL_append = " qtbase qtdeclarative qtimageformats qtmultimedia qtquick1 qtquickcontrols2 qtquickcontrols sqlite "
    PACKAGECONFIG_append_pn-qtbase = " sql-sqlite"

此外,您还可以使用 OpenEmbedded recipes index或搜索构建环境的layers目录来搜索Qt 5包。下面是一个搜索QtSerialPort包的例子:

$ cd <openembedded-setup-directory>
[oe-core] $ ls
build  deploy  export  layers
[oe-core] $ find ./layers/ -name "qt*serialport*.bb"
./layers/meta-qt5/recipes-qt/qt5/qtserialport_git.bb

将它和其他Qt包一起添加到local.conf中

 local.conf

  IMAGE_INSTALL_append = "  qtbase qtdeclarative qtimageformats qtmultimedia qtquick1 qtquickcontrols2 qtquickcontrols qtserialport "

使用BSP V2.8包含所有Qt 5.9包:

 local.conf

  IMAGE_INSTALL_append = " qt3d qt5-plugin-generic-vboxtouch qtbase qtcanvas3d qtcharts qtconnectivity qtdatavis3d qtdeclarative qtenginio qtgraphicaleffects qtimageformats qtlocation qtmultimedia qtquick1 qtquickcontrols2 qtquickcontrols qtscript qtsensors qtserialport qtsvg qtsystems qttools qttranslations qtvirtualkeyboard qtwebchannel qtwebkit-examples qtwebkit qtwebsockets qtxmlpatterns openssh-sftp-server gdb gdbserver "

关于早期Qt版本包的信息
其他启用Qt 5的映像配置
要在EGLFS中使用framebuffer(仅在iMX6上支持),并在没有X11和LXDE桌面环境的情况下构建映像,请使用console-tdx-image目标,并将以下内容添加到"build/conf/local.conf"。除了上面的:
注意:每次修改DISTRO_FEATURES时,必须删除所有的build输出和状态缓存,在我们的设置中删除build/out* build/sstate-cache or build/tmp* build/sstate-cache deploy目录,如果有任何以前的构建存在的话。

  • 目标映像 *
    修改local.conf后,你现在可以为各自的特性集构建以下任意一个映像目标:
    •Angstrom - LXDE -image:用于Qt 5 X11,包含在我们的常规Angstrom LXDE桌面环境映像中

[build] $ bitbake -k angstrom-lxde-image

•console-tdx-image: 对于Qt 5,常规控制台映像中包含帧缓冲区EGLFS,不包含X11

[build] $ bitbake -k console-tdx-image

这可能需要几个小时。当构建完成时,图像文件将位于"/oe-core/deploy/images/"。
注意:有关如何将新构建的映像安装到目标上的更多信息,请参阅以下文章之一。
构建用于开发的SDK
注意:参见Linux SDKs
为了编译所需的库,首先需要有一个完整的OpenEmbedded构建环境(请参阅构建和部署目标映像)。
我们需要一个完整的Qt工具链,它除了提供交叉GCC和GDB之外,还提供要包含的Qt头文件和要链接的库。
要构建它,运行:

[build] $ bitbake image-name -c populate_sdk

工具链将位于"/oe-core/deploy/sdk".
安装SDK
在您的开发计算机上安装Qt工具链(如果使用32位机器,则将x86_64替换为i686):

[build] $ cd ../deploy/sdk/
[sdk] $ ./angstrom-glibc-x86_64-armv7at2hf-neon-v2016.12-toolchain.sh

现在启动qmake应该成功并显示以下输出:

$ /usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/qt5/qmake
Usage: /usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/qt5/qmake [mode] [options] [files]
...

配置Qt Creator
在开始Qt Creator之前,我们必须导出一些构建环境变量。Qt使用特殊的配置文件来描述被称为mkspecs的构建环境(它们指定要使用哪个编译器、链接器或其他工具)。但是,这些配置文件仍然需要知道编译器(在本例中是交叉编译器)的位置。SDK创建了一个脚本来完成所有艰苦的工作。
使用使用OpenEmbedded layers构建的SDK,源脚本导出环境变量如下:

. /usr/local/oecore-x86_64/environment-setup-armv7at2hf-neon-angstrom-linux-gnueabi

警告: 每次在运行Qt Creator的同一终端会话中,都需要源脚本导出环境变量。
然后环境变量OE_QMAKE_CXX应该显示如下内容:

$ echo $OE_QMAKE_CXX
arm-angstrom-linux-gnueabi-g++ -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=/usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi

现在,在脚本来源所在的shell中启动Qt Creator。
使用直接从存储库安装的Qt Creator:
qtcreator
对于从安装程序安装的Qt Creator,转到安装路径并运行qtcreator.sh文件脚本:
Qt/Tools/QtCreator/bin/qtcreator.sh
注意:建议导出qtcreator.sh脚本中的环境变量的脚本。
添加目标设备
进入工具→选项。在左侧面板中,单击Devices,添加一个代表目标Apalis模块的新设备:
•按“添加”键,选择“Generic Linux Device”
o指定一个名称(例如Apalis iMX8)
o填写设备的IP地址
o我们模块的默认身份验证:密码,用户“root”,空密码
• Qt Creator - Devices

添加Kit
在左侧面板中,点击工具包,在以下选项卡中进行配置:
•qt版本:
o按Add
o选择/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/qt5/qmake
o填写一个名字


Qt Creator - Qt Versions

•编译器:
o按Add → Gcc→C++
o名字: G+±LXDE
o编译路径: /usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-g++
o abi(应该自动检测到):arm-linux-generic-elf-32bit


Qt Creator - Compilers

•按“Add → Gcc→C”
•名称:GCC-LXDE
•编译路径: /usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gcc
abi(应该自动检测到): arm-linux-generic-elf-32bit


Qt Creator - Compilers

•调试器:

o按Add

o名称:GDB-LXDE

o路径:/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gdb

Qt Creator - Debugger

•工具箱

o按Add

o名称:Toradex Qt Embedded

o设备:Apalis iMX8

o Sysroot: /usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/

o编译器:G+±LXDE

o编译器:GCC-LXDE

o调试器:GDB-LXDE

o Qt版本:Qt 5.9.4(LXDE)

o Qt mkspec: /usr/local/oecore-x86_64/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/usr/lib/qt5/mkspecs/linux-oe-g++

Qt Creator - Kit
现在可以使用新工具包创建一个新项目。Qt Creator自动为交叉编译工具包配置构建配置。
为了确保二进制文件被部署到根主文件夹中,在你的.pro文件中添加以下内容:

 *.pro

target.path = /home/root
INSTALLS += target

如果您有一个现有的项目,您可以在左侧的project选项卡下配置Build & Run Configurations。转到Add Kit,我们现在可以使用新创建的工具包LXDE。
用于设备创建的Qt
构建和部署目标映像
对于Qt 5,可以直接从Toradex Easy Installer安装一个支持Qt 5.11的镜像。
在目标模块上,需要安装Qt运行时环境。因此,需要一个带有Qt运行时库的新映像,允许在目标上执行Qt应用程序。这一步是必须的!
有了商业许可,就可以让Qt用于设备创建,它的关键特性之一是提供一个预构建的引导到Qt映像。如果你的模块无法使用Toradex简易安装程序,点击几下Qt Creator顶部栏选项Tools → Flash Boot to Qt device,就可以把你的映像放入SD卡。
构建用于开发的SDK
注意:参见Linux SDKs
我们需要一个完整的Qt工具链,它除了提供交叉GCC和GDB之外,还提供要包含的Qt头文件和要链接的库。
通过商业许可,可以启用Qt来创建设备,它可以自动为所支持设备的已安装组件提供工具链。
安装SDK
参见上面的部分。
配置Qt Creator
在开始Qt Creator之前,我们必须导出一些构建环境变量。Qt使用特殊的配置文件来描述被称为mkspecs的构建环境(它们指定要使用哪个编译器、链接器或其他工具)。但是,这些配置文件仍然需要知道编译器(在本例中是交叉编译器)的位置。SDK创建了一个脚本来完成所有艰苦的工作。
使用商业许可证,支持的模块的编译工具包是开箱即用的,但是需要配置目标设备。
进入Tools→Options并选择设备。
添加目标设备并选择Boot2Qt设备。

• 填写您的设备名称和IP地址:
• 将配置好的设备添加到自动检测套件中。
• Add Boot2Qt Device to auto detected SDK
打开现有项目或Qt示例的扩展列表之一并启用此工具包:

引导到嵌入式Linux的Qt
警告:Toradex没有维护也不支持嵌入式Linux的引导到Qt。如果您使用商用许可证,您可以在Qt论坛上发布您的问题或联系Qt公司支持。
构建和部署目标映像
对于Qt 5,可以直接从Toradex Easy Installer安装一个支持Qt 5.13的映像。在目标模块上,需要安装Qt运行时环境。
因此,需要一个带有Qt运行时库的新映像,允许在目标上执行Qt应用程序。这一步是必须的!
要使用Qt5构建映像,有必要在主机PC上设置一个环境,使用基于Toradex BSP的Yocto项目构建映像,并引导到嵌入式Linux的Qt。
请参考构建您自己的嵌入式Linux映像文章,以解决与环境相关的依赖项,并根据您的主机操作系统完成此设置。
在解决了所指出的依赖项之后,有必要在您的主机上下载存储库,以便为嵌入式Linux构建引导到Qt。

$ mkdir b2qt
$ cd b2qt
$ git clone -b pyro git://code.qt.io/yocto/meta-boot2qt.git
$ cd meta-boot2qt

在此步骤中,可以导出环境变量并设置目标设备。要检查可用的设备配置,请运行:

[meta-boot2qt]$ ./b2qt-init-build-env list-devices

本文介绍如何使用Apalis iMX8作为目标设备

[meta-boot2qt] $ ./b2qt-init-build-env init --device apalis-imx8
[meta-boot2qt] $ export MACHINE=apalis-imx8
[meta-boot2qt] $ source ./setup-environment.sh
[build-apalis-imx8] $ 

要构建映像,请运行:

[build-apalis-imx8] $  bitbake -k b2qt-embedded-qt5-image

这可能需要几个小时。当构建完成后,图像文件将位于"/b2qt/meta-boot2qt/build-apalis-imx8/tmp/deploy/images/apalis-imx8"。
在构建时,如果你得到错误以下,

ERROR: The following required tools (as specified by HOSTTOOLS) appear to be unavailable in PATH, please install them in order to proceed:
  git-lfs

然后请使用安装git-lfs,

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs

注意:关于如何将新构建的映像安装到目标上的更多信息,请参阅Toradex Easy Installer。如果你的模块不被Toradex Easy安装程序支持,看看下面的文章之一。
构建用于开发的SDK
注意:参见Linux sdk
为了编译所需的库,首先需要一个完整的OpenEmbedded构建环境(参见构建和部署Qt的目标映像)。
我们需要一个完整的Qt工具链,它除了提供交叉GCC和GDB之外,还提供要包含的Qt头文件和要链接的库。
要构建工具链,运行:

[build-apalis-imx8] $  bitbake -k image-name -c populate_sdk

工具链将位于“/b2qt/meta-boot2qt/build-apalis-imx8/tmp/deploy/sdk”。
安装SDK
在您的开发计算机上安装Qt工具链(如果使用32位机器,则将x86_64替换为i686):

[build-apalis-imx8] $ cd tmp/deploy/sdk
[sdk] $ ls b2qt-x86_64-meta-toolchain-b2qt-embedded-qt5-sdk-apalis-imx8.sh 
b2qt-x86_64-meta-toolchain-b2qt-embedded-qt5-sdk-apalis-imx8.sh

安装工具链如下所示,

[build-apalis-imx8] $ ./b2qt-x86_64-meta-toolchain-b2qt-embedded-qt5-sdk-apalis-imx8.sh
Boot to Qt for Embedded Linux SDK installer version 2.3.4
=========================================================
Enter target directory for SDK (default: /opt/b2qt/2.3.4): 
You are about to install the SDK to "/opt/b2qt/2.3.4". Proceed[Y/n]? y

现在启动qmake应该成功了,并显示如下输出:
$ /opt/b2qt/2.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/qmake
Usage: /opt/b2qt/2.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/qmake [mode] [options] [files]

配置Qt Creator
在开始Qt Creator之前,我们必须导出一些构建环境变量。Qt使用特殊的配置文件来描述被称为mkspecs的构建环境(它们指定要使用哪个编译器、链接器或其他工具)。但是,这些配置文件仍然需要知道编译器(在本例中是交叉编译器)的位置。SDK创建了一个脚本来完成所有艰苦的工作。
使用Boot to Qt Embedded Linux SDK,将脚本源代码设置为导出环境变量,如下所示:

. /opt/b2qt/2.3.4/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

警告:每次在运行Qt Creator的同一终端会话中导出环境变量时,都需要source脚本。
然后,环境变量OE_QMAKE_CXX应显示以下内容:

$ echo $OE_QMAKE_CXX
arm-poky-linux-gnueabi-g++ -march=armv7ve -marm -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/opt/b2qt/2.3.4/sysroots/cortexa7hf-neon-poky-linux-gnueabi

现在,在脚本来源所在的shell中启动Qt Creator。
使用从存储库直接安装的QtCreator:
qtcreator
从安装程序中安装的Qt Creator,进入安装路径并运行qtcreator.sh脚本:

Qt/Tools/QtCreator/bin/qtcreator.sh

注意:建议导出qtcreator.sh脚本中的环境变量的脚本。
添加目标设备
进入Tools → Options。在左侧面板中,单击Devices,添加一个代表目标Apalis模块的新设备:
•按“添加”键,选择“Generic Linux Device”
o指定一个名称(例如Apalis iMX8)
o填写设备的IP地址
o我们模块的默认身份验证:密码,用户“root”,空密码


Qt Creator - Devices

添加工具包

在左侧面板中,单击Kits并在以下选项卡中进行配置:

•Qt版本:

o按Add

o选择/opt/b2qt/2.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/qmake

o填写名称

Qt Creator - Qt Version

•编译器:
o按“Add → Gcc→C++”
o名字: G+±B2Qt
o编译器路径: /opt/b2qt/2.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++
o abi(应该自动检测到):arm-linux-generic-elf-32bit


Qt Creator - Compilers

•按“Add→Gcc→C”
•名称:GCC-B2Qt
•编译器路径: /opt/b2qt/2.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc
abi(应该自动检测到):arm-linux-generic-elf-32bit


Qt Creator - Compilers

•调试器:
o按Add
o名称:GDB-B2Qt
o路径:/opt/b2qt/2.3.4/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb

•工具箱

o按Add

o名称:B2Qt

o设备:Apalis iMX8

o系统根:/opt/b2qt/2.3.4/Sysroot/cortexa7hf-neon-poky-linux-gnueabi/

o编译器:G+±B2Qt

o编译器:GCC-B2Qt

o调试器:GDB-B2Qt

o Qt版本:Qt 5.11

o Qt mkspec: /opt/b2qt/2.3.4/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib/mkspecs/linux-oe-g++

Qt Creator - Kits
现在可以使用新的工具包创建一个新项目。Qt Creator自动为交叉编译工具包配置生成配置。
要确保将二进制文件部署到根主文件夹,请将以下内容添加到.pro文件中:

 *.pro

target.path = /home/root
INSTALLS += target

如果您有一个现有的项目,您可以在左侧的“项目”选项卡下Build & Run Configurations。转到添加工具包,我们现在可以使用新创建的工具包B2Qt。

以上是关于如何建立Qt Creator交叉编译嵌入式Linux的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式V3s交叉编译 tslib和QT4.8.7,并使用Qt Creator编译项目

Qt creator交叉编译带图片的程序出现问题,版本4.7

Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程,图解

Qt Creator的安装与Qt交叉编译的配置

如何在Linux下用QT creator搭建mips-linux交叉编译开发环境,如果您熟悉ARM-linux环境搭建的话也希望你能指

用于命令行的 Qt Creator 标准输入,可部署到远程 Linux 主机