【ARM嵌入式Linux】正点原子I.MX6U-ALPHA的QT交叉编译环境搭建

目录

1、安装出厂系统Qt交叉编译器

2、搭建 Qt Creator  交叉 编译 环境

2.1 下载Qt Creator

2.2 安装 Qt Creator

2.3 配置 Qt Creator Kits

2.4 验证搭建的交叉编译 Kits

2.5 远程调试 Qt  程序

3、Ubuntu  本机 Kits  编译 Qt 应用程序


所使用的环境:

Qt 5.12.9 LTS版本

正点原子出厂文件系统Qt

Ubuntu 16.04或18.04

Windows 10 64bits


1、安装出厂系统Qt交叉编译器

交叉编译器fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh 

执行下面指令修改脚本权限,修改权限后可以看到此脚本颜色(绿色)显示改变,说明修改成功。

chmod u+x fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh

直接执行脚本安装交叉编译工具,默认安装到/opt/fsl-imx-x11/4.1.15-2.1.0 这个默认目录

./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh 

使用方法也十分简单,根据上面打印出来的提示,直接使能环境变量就可以了。但是在不同终端或者切换用户时需要重新使能环境变量方可使用。

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

使能环境变量后可以使用 env 指令查看生效的环境变量,下图为部分截图,可以看出使能了这个环境变量后 gcc 已经配置好编译时所用的参数,如硬浮点参数-mfpu=neon -mfloat-abi=hard。使用硬浮点交叉编译,可以使用 CPU 自带 FPU。

下图为环境变量部分截图。

env

使用 arm-poky-linux-gnueabi-gcc -v 指令可以查看 gcc 版本,表明环境变量已经生效。

arm-poky-linux-gnueabi-gcc --version

2、搭建 Qt Creator  交叉 编译 环境

2.1 下载Qt Creator

在 Ubuntu 平台开发 Qt,那么必须要有相应的 IDE 环境,那么 Qt Creator 就是 Qt的 IDE(集成环境),我们就可以使用 Qt Creator 快速编程了。进入网址 http://download.qt.io/archive/qt/5.12/5.12.9/下载 Qt 5.12.9。Qt 官方已经把 Qt Creator 封装在下面这个

qt-opensource-linux-x64-5.12.9.run。我们需要下载这个 qt-opensource-linux-x64-5.12.9.run 直接在 Ubuntu 安装即可。

或用指令下载,复制上面的下载地址

直接在 Ubuntu 终端使用 wget 指令下载

wget http://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.run

2.2 安装 Qt Creator

下载完成得到 qt-opensource-linux-x64-5.12.9.run 这个文件。赋予该文件可执行权限,再执行安装。

chmod u+x qt-opensource-linux-x64-5.12.9.run
sudo ./qt-opensource-linux-x64-5.12.9.run // 建议加 sudo,否则安装在当前目录下。

如无意外,则弹出 Qt 5.12.9 欢迎安装界面。

这里需要填写 Qt 帐号,去 Qt 官网 https://www.qt.io/注册一个账号。填写后再点击 Next。

同意使用条款。按如下步骤操作。

欢迎安装界面,直接点击下一步。

选择安装目录,建议默认即可。会安装在/opt 目录下。点击下一步。

按需要安装,除了安卓选项我们都选择安装。点击下一步。

同意许可协议,点击下一步。

准备安装,点击安装

安装完成,点击完成

2.3 配置 Qt Creator Kits

Kit 译作套件,也就是开发编译环境套件,我们可以搭建不同平台的套件,以不同的套件编译出不同平台的应用程序,也验证了 Qt 跨平台的特性!

若安装时安装的目录一样则可以使用如下指令打开 Qt Creator。 “&”的作用是后台运行。

/opt/Qt5.12.9/Tools/QtCreator/bin/qtcreator.sh &

也可以在左上角的软件中心栏输入搜索出“Qt Creator”图标后再单击打开

打开 Tools(工具),打开 Options(选项)。

配置 Qt Versions,点击添加,选择已安装的交叉编译器路径下的 qmake,路径为/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/qmake,用于生成 Makefile,以编译程序。

同时改版本名称为 ATK-I.MX6U Qt %{Qt:Version}。

点击添加,选择 C++。

配置编译器,编译器的路径为已安装的交叉编译器。路径为/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++。

将“名称”改为 ATK-I.MX6U-GCC。

配置 Kits,将“名称”改为 ATK-I.MX6U。在 Qt mkspec 处写上“linux-oe-g++”。其他按下图操作设置。不要漏了其中一项,否则可能编译错误。

2.4 验证搭建的交叉编译 Kits

新建工程

选择 Application 项目和 Qt Widgets Application 模板。

项目命名为 test,选择工程的位置,这里位置不要随便选择,建议放在家目录下(/home/用户名)。

默认使用 qmake,点击下一步。

选择类模板,默认 QMainWindow 类即可。

是否选择文件翻译,默认无,点击下一步。

选择套件,这里可以两个套件一起选,编译时切换选择 I.MX6U ARM 平台的套件,如下。

默认,点击 Finish,完成。

如下图选择 ATK-I.MX6U Kit 编译,其中可以看到 Qt Creator 把程序中的类当作未识别的类,原因可能是 ARM 平台的 Qt 类未在 X86_64 的 Qt Creator 上识别,暂时不知道是不是 QtCreator 自身的问题,具体原因不去探究了。

不过对我们编写程序没影响,我们写程序时可以使用安装 Qt 时自带的编译器 Desktop Qt5.12.9 GCC 64bit 去编写和编译验证是否有语法错误。当想要编译 ARM 平台的应用程序时,我们再切换到 ATK-I.MX6U 去编译即可。

开始编译,点击构建,不要点击运行!在 Ubuntu 平台上是运行不了用 ARM 编译器编译出来的程序的!

在 test 工程的同级目录下找到 build-test-ATK_I_MX6U-Debug 文件夹,查看编译出来的可执行程序 test。我们拷贝到出厂文件系统目录下,在串口终端直接执行./test 就可以了。

2.5 远程调试 Qt  程序

在 Qt Creator 中默认情况下,会使用 sftp 或 rsync 发送程序到板卡。由于正点原子 I.MX6U 出厂 Qt 文件系统里没有 sftp 或 rsync,所以我们需要换另外一种方法。原理很简单,就是使用 ssh 和 scp 把程序发送到板卡上再执行。

打开菜单栏的工具,打开选项。

点击设备处,把名称命名为“I.MX6U”。在第 6 步填写在开发板的 ip 地址。默认端口为 22。

将我们设置的“设备”,在 ATK-I.MX6U Kits 里选择设备类型为我们刚才设置的“I.MX6U”设备。

确保目前是选择 ATK-I.MX6U 套件 Debug 模式构建。

点击项目处,选择 ATK-I.MX6U 设备,选择 Run。删除通过 SFTP 上传文件,因为我们出厂文件系统没有 sftp,不能通过 sftp 上传。

添加 Depoloy 步骤,选择“Custom Process Step”。

添加 Command 为 ssh,Arguments:为-p %{Device:SshPort} %{Device:UserName}@%{Device:HostAddress} 'mkdir -p %{CurrentRun:Executable:Path}'。Working directory:默认为%{buildDir}。

再添加一个 Custom Process Step

添加 Command 为 scp,Arguments:为-P %{Device:SshPort} %{CurrentRun:Executable:FileName}%{Device:UserName}@%{Device:HostAddress}:%{CurrentRun:Executable:FilePath}。Workingdirectory:默认为%{buildDir}。

返回到编辑,点击运行或按 F5 进入调试模式。下图为点击 32 步中的运行。可以看到已经把编译的程序发送到开发板上执行。开发板上的 LCD 屏也显示了一个空白的窗口。

3、Ubuntu  本机 Kits  编译 Qt 应用程序

我们在 test 工程里已经选择使用 ATK-I.MX6U Kit。那么别外一个就是 Qt Creator 安装时自带的 Kit,名字叫 Desktop Qt5.12.9 GCC 64bit。我们要在 Ubuntu 上运行,那么我们就选择此项,编译出的程序就可以在 Ubuntu 上运行啦!

点击运行,可以看到程序执行时是显示一个空白的窗口。

至此正点原子 I.MX6U 出厂系统 Qt 的交叉编译环境,已经搭建完成。

 

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Building on: linux-g++ (x86_64, CPU features: mmx sse sse2) Building for: linux-aarch64-gnu-g++ (arm64, CPU features: neon) Target compiler: gcc 6.3.1 Configuration: cross_compile use_gold_linker compile_examples enable_new_dtags largefile neon precompile_header 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 .............. yes Using LTCG ............................. no Target compiler supports: NEON ................................. yes Build parts ............................ libs Qt modules and options: Qt Concurrent .......................... yes Qt D-Bus ............................... yes Qt D-Bus directly linked to libdbus .... no Qt Gui ................................. yes Qt Network ............................. yes Qt Sql ................................. yes Qt Testlib ............................. yes Qt Widgets ............................. yes Qt Xml ................................. yes Support enabled for: Using pkg-config ....................... yes udev ................................... no Using system zlib ...................... yes Qt Core: DoubleConversion ....................... yes Using system DoubleConversion ........ no GLib ................................... no iconv .................................. yes ICU .................................... no Tracing backend ........................ Logging backends: journald ............................. no syslog ............................... no slog2 ................................ no Using system PCRE2 ..................... no Qt Network: getifaddrs() ........................... yes IPv6 ifname ............................ yes libproxy ............................... no Linux AF_NETLINK ....................... yes OpenSSL ................................ yes Qt directly linked to OpenSSL ........ no OpenSSL 1.1 ............................ no DTLS ................................... yes SCTP ................................... no Use system proxies ..................... yes Qt Gui: Accessibility .......................... yes FreeType ............................... yes Using system FreeType ................ no HarfBuzz ............................... yes Using system HarfBuzz ................ no Fontconfig ............................. no Image formats: GIF .................................. yes ICO .................................. yes JPEG ................................. yes Using system libjpeg ............... yes PNG .................................. yes Using system libpng ................ no EGL .................................... no OpenVG ................................. no OpenGL: Desktop OpenGL ....................... no OpenGL ES 2.0 ........................ no OpenGL ES 3.0 ........................ no OpenGL ES 3.1 ........................ no OpenGL ES 3.2 ........................ no Vulkan ................................. no Session Management ..................... yes Features used by QPA backends: evdev .................................. yes libinput ............................... no INTEGRITY HID .......................... no mtdev .................................. no tslib .................................. no xkbcommon .............................. no X11 specific: XLib ................................. no EGL on X11 ........................... no QPA backends: DirectFB ............................... no EGLFS .................................. no LinuxFB ................................ yes VNC .................................... yes Mir client ............................. no Qt Sql: SQL item models ........................ yes Qt Widgets: GTK+ ................................... no Styles ................................. Fusion Windows Qt PrintSupport: CUPS ................................... no Qt Sql Drivers: DB2 (IBM) .............................. no InterBase .............................. no MySql .................................. no OCI (Oracle) ........................... no ODBC ................................... no PostgreSQL ............................. no SQLite2 ................................ no SQLite ................................. yes Using system provided SQLite ......... no TDS (Sybase) ........................... no Qt Testlib: Tester for item models ................. yes Qt SerialBus: Socket CAN ............................. yes Socket CAN FD .......................... yes Qt QML: QML network support .................... yes QML debugging and profiling support .... yes QML sequence object .................... yes QML list model ......................... yes QML XML http request ................... yes QML Locale ............................. yes QML delegate model ..................... yes Qt Quick: Direct3D 12 ............................ no AnimatedImage item ..................... yes Canvas item ............................ yes Support for Qt Quick Designer .......... yes Flipable item .......................... yes GridView item .......................... yes ListView item .......................... yes TableView item ......................... yes Path support ........................... yes PathView item .......................... yes Positioner items ....................... yes Repeater item .......................... yes ShaderEffect item ...................... yes Sprite item ............................ yes Qt Scxml: ECMAScript data model for QtScxml ...... yes Qt Gamepad: SDL2 ................................... no Qt 3D: Assimp ................................. yes System Assimp .......................... no Output Qt3D Job traces ................. no Output Qt3D GL traces .................. no Use SSE2 instructions .................. no Use AVX2 instructions .................. no Aspects: Render aspect ........................ yes Input aspect ......................... yes Logic aspect ......................... yes Animation aspect ..................... yes Extras aspect ........................ yes Qt 3D Renderers: OpenGL Renderer ........................ yes Qt 3D GeometryLoaders: Autodesk FBX ........................... no Qt Wayland Client ........................ no Qt Wayland Compositor .................... no Qt Bluetooth: BlueZ .................................. no BlueZ Low Energy ....................... no Linux Crypto API ....................... no WinRT Bluetooth API (desktop & UWP) .... no Qt Sensors: sensorfw ............................... no Qt Quick Controls 2: Styles ................................. Default Fusion Imagine Material Universal Qt Quick Templates 2: Hover support .......................... yes Multi-touch support .................... yes Qt Positioning: Gypsy GPS Daemon ....................... no WinRT Geolocation API .................. no Qt Location: Qt.labs.location experimental QML plugin . yes Geoservice plugins: OpenStreetMap ........................ yes HERE ................................. yes Esri ................................. yes Mapbox ............................... yes MapboxGL ............................. no Itemsoverlay ......................... yes QtXmlPatterns: XML schema support ..................... yes Qt Multimedia: ALSA ................................... no GStreamer 1.0 .......................... no GStreamer 0.10 ......................... no Video for Linux ........................ yes OpenAL ................................. no PulseAudio ............................. no Resource Policy (libresourceqt5) ....... no Windows Audio Services ................. no DirectShow ............................. no Windows Media Foundation ............... no Qt Tools: QDoc ................................... no Qt WebEngine: Embedded build ......................... yes Pepper Plugins ......................... no Printing and PDF ....................... no Proprietary Codecs ..................... no Spellchecker ........................... yes Native Spellchecker .................... no WebRTC ................................. no Use System Ninja ....................... no Geolocation ............................ yes WebChannel support ..................... yes Use v8 snapshot ........................ yes Kerberos Authentication ................ no Building v8 snapshot supported ......... yes Use ALSA ............................... no Use PulseAudio ......................... no Optional system libraries used: re2 .................................. no icu .................................. no libwebp, libwebpmux and libwebpdemux . no opus ................................. no ffmpeg ............................... no libvpx ............................... no snappy ............................... no glib ................................. no zlib ................................. yes minizip .............................. no libevent ............................. no jsoncpp .............................. no protobuf ............................. no libxml2 and libxslt .................. no lcms2 ................................ no png .................................. no JPEG ................................. no harfbuzz ............................. no freetype ............................. no x11 .................................. no Required system libraries: fontconfig ........................... no dbus ................................. no nss .................................. no khr .................................. no glibc ................................ yes Required system libraries for qpa-xcb: libdrm ............................... no xcomposite ........................... no xcursor .............................. no xi ................................... no xrandr ............................... no xtst ................................. no Note: Also available for Linux: linux-clang linux-icc
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值