目录
所使用的环境:
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 的交叉编译环境,已经搭建完成。