保姆级教程:在Ubuntu 18.04上为I.MX6U开发板配置Qt 5.12.9交叉编译环境(含远程调试)
刚拿到正点原子I.MX6U开发板时,最让人头疼的就是如何快速搭建一套能用的Qt开发环境。作为一款基于Cortex-A7架构的嵌入式平台,I.MX6U的性能足以流畅运行Qt应用程序,但跨平台编译的配置过程却让不少新手望而却步。本文将用最直白的语言,带你一步步完成从工具链安装到远程调试的完整流程。
我遇到过太多因为环境配置不当导致的编译失败问题——从工具链版本不匹配到库文件缺失,从权限问题到网络连接异常。这些问题往往需要花费数小时甚至数天才能解决。本文特别注重这些"坑点",确保你能一次性配置成功。我们将使用官方推荐的Qt 5.12.9 LTS版本,这是目前最稳定的长期支持版,特别适合嵌入式开发。
1. 准备工作与环境检查
在开始之前,我们需要确保基础环境符合要求。打开终端,执行以下命令检查系统版本:
lsb_release -a确认你的Ubuntu版本是18.04(建议使用LTS版本)。虽然16.04也可以工作,但18.04对Qt 5.12.9的支持更完善。接下来检查磁盘空间:
df -h提示:整个工具链安装需要约5GB空间,建议预留10GB以上空闲空间
安装必要的依赖库:
sudo apt update sudo apt install -y build-essential libgl1-mesa-dev libxcb-xinerama0-dev这些库是Qt运行的基础依赖,缺少它们可能导致编译或运行时出现奇怪的问题。特别要注意libgl1-mesa-dev,它提供了OpenGL支持,对Qt的图形界面至关重要。
2. 安装交叉编译工具链
正点原子官方提供了专为I.MX6U优化的工具链,我们需要先下载并安装:
wget http://download.atomicpi.com/toolchain/fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh chmod +x fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh sudo ./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。安装完成后,需要设置环境变量:
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi为了方便后续使用,可以将这行命令添加到~/.bashrc文件中:
echo "source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi" >> ~/.bashrc source ~/.bashrc验证工具链是否安装成功:
arm-poky-linux-gnueabi-gcc --version如果看到类似下面的输出,说明安装正确:
arm-poky-linux-gnueabi-gcc (GCC) 7.3.03. 安装配置Qt Creator
Qt Creator是Qt官方推荐的集成开发环境,我们需要下载并安装5.12.9版本:
wget http://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.run chmod +x qt-opensource-linux-x64-5.12.9.run sudo ./qt-opensource-linux-x64-5.12.9.run安装过程中需要注意几个关键点:
- 需要注册Qt账号(免费)
- 选择安装组件时,确保勾选"Qt 5.12.9"下的所有选项
- 安装路径建议保持默认
/opt/Qt5.12.9
安装完成后,我们需要配置Qt Creator以支持交叉编译。启动Qt Creator:
/opt/Qt5.12.9/Tools/QtCreator/bin/qtcreator.sh在Qt Creator中,按以下步骤配置:
- 打开"工具"→"选项"→"Kits"
- 添加新的Qt版本,路径选择:
/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/qmake - 添加新的编译器,选择:
/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++ - 创建新的Kit,配置如下:
- 名称:I.MX6U-Qt5.12.9
- 设备类型:通用Linux设备
- 编译器:选择刚才添加的ARM编译器
- Qt版本:选择刚才添加的Qt版本
- Qt mkspec:填写
linux-oe-g++
4. 创建并编译测试项目
现在我们来创建一个简单的测试项目,验证环境是否配置正确:
- 选择"文件"→"新建文件或项目"→"Application"→"Qt Widgets Application"
- 项目名称填写
HelloIMX6U - 在选择Kit步骤,同时勾选桌面版和I.MX6U版
- 其他选项保持默认,完成项目创建
修改mainwindow.cpp文件,添加一个简单的按钮:
#include <QPushButton> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { QPushButton *button = new QPushButton("Hello I.MX6U", this); button->setGeometry(50, 50, 200, 50); }先使用桌面Kit编译运行,确保代码没有语法错误。然后切换到I.MX6U Kit进行编译:
- 点击左下角的"项目"按钮
- 选择"I.MX6U-Qt5.12.9" Kit
- 点击"构建"按钮(不要点击运行)
编译成功后,在项目目录下的build-HelloIMX6U-I.MX6U-Qt5.12.9-Release文件夹中可以找到生成的可执行文件。
5. 远程部署与调试
由于正点原子出厂系统没有sftp服务,我们需要使用ssh/scp进行远程部署。首先确保开发板与电脑在同一网络,并知道开发板的IP地址。
在Qt Creator中配置远程设备:
- 打开"工具"→"选项"→"设备"→"添加"→"通用Linux设备"
- 设备名称:I.MX6U-Board
- 主机地址:开发板IP
- 用户名:root(默认)
- 密码:留空(默认无密码)
配置项目的部署步骤:
- 打开"项目"→"运行"设置
- 删除默认的"通过SFTP上传"步骤
- 添加"自定义处理步骤":
- 命令:
ssh - 参数:
-p %{Device:SshPort} %{Device:UserName}@%{Device:HostAddress} 'mkdir -p %{CurrentRun:Executable:Path}'
- 命令:
- 再添加一个"自定义处理步骤":
- 命令:
scp - 参数:
-P %{Device:SshPort} %{CurrentRun:Executable:FileName} %{Device:UserName}@%{Device:HostAddress}:%{CurrentRun:Executable:FilePath}
- 命令:
现在点击运行按钮,Qt Creator会自动将程序上传到开发板并执行。如果一切正常,你将在开发板的LCD屏上看到一个带有"Hello I.MX6U"按钮的窗口。
6. 常见问题排查
在实际操作中,可能会遇到以下问题:
问题1:编译时报错找不到库文件
解决方案:
export LD_LIBRARY_PATH=/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib问题2:远程连接失败
检查步骤:
- 确认开发板IP正确
- 在终端测试是否能ping通开发板
- 尝试手动ssh连接:
ssh root@开发板IP
问题3:程序在开发板上运行时报段错误
可能原因:
- 工具链版本不匹配
- 使用了开发板不支持的Qt模块
解决方案:
- 确认使用的工具链版本与开发板系统匹配
- 在Qt Creator的"项目"设置中,取消勾选不必要的Qt模块
7. 性能优化建议
为了让Qt程序在I.MX6U上运行更流畅,可以考虑以下优化:
启用硬件加速: 在
main.cpp中添加:QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);减少资源使用:
- 使用
QWidget代替QML(除非必须) - 压缩图片资源
- 避免使用透明效果
- 使用
编译优化: 在
pro文件中添加:QMAKE_CXXFLAGS_RELEASE += -O2 CONFIG += release
经过这些优化后,即使是相对复杂的Qt界面也能在I.MX6U上流畅运行。