从编译到上板:手把手教你用Qt Creator远程调试正点原子I.MX6U的Qt应用(含SCP/SSH配置)
从编译到上板:手把手教你用Qt Creator远程调试正点原子I.MX6U的Qt应用(含SCP/SSH配置)
在嵌入式Linux开发中,Qt应用程序的远程调试一直是让开发者头疼的环节。特别是当面对正点原子I.MX6U这样的ARM Cortex-A7平台时,如何高效地将编译好的程序部署到开发板并进行调试,直接关系到开发效率。本文将深入探讨Qt Creator中那些鲜为人知的部署技巧,带你突破SFTP的限制,用更灵活的SSH+SCP方案实现一键部署与调试。
1. 环境准备与基础配置
1.1 开发环境检查清单
在开始之前,请确保你的工作环境满足以下要求:
- 主机系统:Ubuntu 18.04 LTS(推荐)或16.04
- Qt版本:5.12.9 LTS(与正点原子出厂系统保持一致)
- 交叉编译工具链:fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5
- 开发板环境:正点原子I.MX6U-ALPHA开发板,运行出厂Qt文件系统
- 网络连接:开发板与主机在同一局域网,SSH服务已启用
提示:可以通过在开发板终端执行
systemctl status sshd确认SSH服务状态
1.2 网络配置关键点
稳定的网络连接是远程调试的前提。建议按照以下步骤配置:
固定开发板IP:
# 在开发板终端执行(临时生效) ifconfig eth0 192.168.1.100 netmask 255.255.255.0测试基础连通性:
# 在主机终端测试 ping 192.168.1.100 ssh root@192.168.1.100免密登录配置(可选但推荐):
# 主机生成密钥 ssh-keygen -t rsa ssh-copy-id root@192.168.1.100
2. Qt Creator设备配置详解
2.1 创建设备配置文件
在Qt Creator中配置开发板连接需要特别注意以下参数:
| 参数项 | 示例值 | 说明 |
|---|---|---|
| 设备名称 | I.MX6U-Debug | 自定义标识 |
| 设备类型 | 通用Linux设备 | 必须选择 |
| 主机地址 | 192.168.1.100 | 开发板实际IP |
| SSH端口 | 22 | 默认端口 |
| 用户名 | root | 出厂系统默认 |
| 认证类型 | 密码或密钥 | 根据实际配置选择 |
2.2 常见连接问题排查
当遇到连接失败时,可以按照以下流程检查:
基础网络测试:
telnet 192.168.1.100 22应看到SSH版本信息
防火墙检查:
# 开发板执行 iptables -LSSH服务日志:
# 开发板执行 journalctl -u sshd --no-pager
3. 自定义部署流程实战
3.1 替代SFTP的SCP方案
正点原子出厂系统未预装SFTP服务,我们需要用SCP+SSH组合实现部署:
创建目标目录(通过SSH):
ssh -p %{Device:SshPort} %{Device:UserName}@%{Device:HostAddress} \ "mkdir -p %{CurrentRun:Executable:Path}"传输可执行文件(通过SCP):
scp -P %{Device:SshPort} %{CurrentRun:Executable:FileName} \ %{Device:UserName}@%{Device:HostAddress}:%{CurrentRun:Executable:FilePath}
3.2 Qt Creator配置步骤
在项目配置界面,需要精确设置以下参数:
删除默认部署步骤:
- 在"Run"配置中移除"Deploy via SFTP"
添加自定义步骤:
Command: ssh Arguments: -p %{Device:SshPort} %{Device:UserName}@%{Device:HostAddress} 'mkdir -p %{CurrentRun:Executable:Path}'添加文件传输步骤:
Command: scp Arguments: -P %{Device:SshPort} %{CurrentRun:Executable:FileName} %{Device:UserName}@%{Device:HostAddress}:%{CurrentRun:Executable:FilePath}
4. 高级调试技巧与优化
4.1 远程调试配置
要实现完整的调试功能,还需要配置gdbserver:
开发板端准备:
# 在开发板安装gdbserver opkg update opkg install gdbserverQt Creator调试配置:
Debugger: /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-gdb
4.2 性能优化建议
对于I.MX6U这类资源有限的平台,建议:
编译选项优化:
QMAKE_CXXFLAGS += -O2 -mfpu=neon -mfloat-abi=hardQt模块裁剪:
./configure -no-opengl -no-icu -no-glib -no-cups -no-iconv部署后自动启动:
ssh -p %{Device:SshPort} %{Device:UserName}@%{Device:HostAddress} \ "export DISPLAY=:0 && %{CurrentRun:Executable:FilePath}"
5. 实战问题解决方案
5.1 常见错误代码处理
| 错误代码 | 可能原因 | 解决方案 |
|---|---|---|
| 255 | SSH连接失败 | 检查网络和SSH服务状态 |
| 127 | 命令未找到 | 检查开发板PATH环境变量 |
| 13 | 权限不足 | 使用root用户或配置sudo权限 |
| 2 | 文件不存在 | 检查部署路径是否正确 |
5.2 日志收集与分析
建议在自定义部署步骤中添加日志输出:
# 在Custom Process Step中添加 Command: ssh Arguments: -p %{Device:SshPort} %{Device:UserName}@%{Device:HostAddress} \ "echo 'Deploy started at $(date)' >> /var/log/qt_deploy.log"在开发板上可以通过以下命令查看实时日志:
tail -f /var/log/qt_deploy.log