如何建立Qt Creator交叉编译嵌入式Linux
Posted chocolate2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何建立Qt Creator交叉编译嵌入式Linux相关的知识,希望对你有一定的参考价值。
如何建立Qt Creator交叉编译嵌入式Linux
- 介绍
- Qt许可信息
- Qt 5
- 安装Qt Creator
- 用于设备创建的Qt
- 构建和部署目标映像
- 构建用于开发的SDK
- 安装SDK
- 配置Qt Creator
- 用OpenEmbedded层建造
- 构建和部署目标映像
- 将Qt5包添加到其他映像目标
- 构建用于开发的SDK
- 安装SDK
- 配置Qt Creator
- 添加目标设备
- 添加Kit
- 引导到嵌入式Linux的Qt
- 构建和部署目标映像
- 构建用于开发的SDK
- 安装SDK
- 配置Qt Creator
- 添加目标设备
- 添加设备
- 构建和部署目标映像
介绍
本文描述了如何在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搭建过程,图解
如何在Linux下用QT creator搭建mips-linux交叉编译开发环境,如果您熟悉ARM-linux环境搭建的话也希望你能指