浅析 QT远程部署及debug方案

文章目录

一、前言

  • 使用 qt 进行嵌入式程序开发时,常规方法需要生成,然后在板端进行运行。当需要 debug 时操作较为复杂。这里分享一种方案:首先使用 scp将 可执行文件部署到远程端,然后进行远程执行。使用 gdb-multiarch 进行远端debug。

二、远端部署环境要求

  • PC端(ubuntu)需安装:opensshscpsshpass(用于自动输入 ssh密码)
  • 嵌入式设备:安装opensshscp(用于文件传输)

三、远端部署及执行流程

1、QT 创建远程设备

  • qt 选项中创建远程设备,并在kits 中设置设备


2、.pro 中添加配置

  • 在 qt 的 .pro 文件中添加远程设备执行路径,例如要放在远端 /remotePath 下:
c 复制代码
qnx: target.path = /$${TARGET}/bin
else: unix:!android: target.path = /remotePath
!isEmpty(target.path): INSTALLS += target

3、远程部署

  • 在 run 中,禁用默认的 sftp文件传输,添加 自定义处理步骤 (即更改本地运行的指令,由于远端没有 sftp服务,改用 scp 进行远程部署)

  • 命令设置为 sshpass,假设远端主机名为 root,密码为 remotePassword,ip 为 remoteHostIp,要将本地文件 hostBinPath 拷贝到 remoteHostPath,则参数设置为:

shell 复制代码
-p remotePassword scp hostBinPath remoteHostName@remoteHostIp:remoteHostPath
  • 该指令使用 sshpass 给 scp 自动输入密码

4、远程执行

  • 远程执行档 即为 .pro 中添加的内容,需要确保和远程部署时设置的文件名相同

  • 到此,远程部署执行功能已实现。

四、远程 Debug

  • 在上面流程基础上,目标机需要额外安装 gdb,pc端额外安装 gdb-multiarch, kits debug 选择 gdb-multiarch。在选择 gdb 版本时,需要根据交叉编译器的版本选择兼容的 gdb。例如
    gcc6.3,生成可执行文件的 dwarf 版本为4, 而 gdb7.10 支持 4版本。

五、QT 版本不提供 ssh密码登录方案

  • 在创建远程设备时,部分 qt版本不提供 ssh密码登录功能,此时需要使用密钥登录。将 客户端(pc)的 私钥提供给 服务器(板端)来实现免密码登录

步骤

1、获取pc 密钥对

  • 在 pc 执行:ssh-keygen ,一路默认回车即可 生成到 home/userName/.ssh/ ,其中 id_rsa 为私钥

2、将公钥复制到板端

  • 执行 ssh-copy-id root@remoteIp,将在板端生成 .ssh/authorized_keys, 此时 pc端 ssh 连接板端就不需要密码了

3、终端登录

  • 执行 ssh root@remoteIp,确认服务器的公钥后即可登录

4、qt 连接远端设备

  • 添加远程设备的ssh 中选择default,文件选择 pc的私钥文件 id_rsa,即可测试通过

接远端设备

  • 添加远程设备的ssh 中选择default,文件选择 pc的私钥文件 id_rsa,即可测试通过
相关推荐
hnsoyon7 小时前
依托物联网工程守护城市地下管网运行安全
物联网·物联网工程·地下管网监测
qq_316411038 小时前
物联网大健康管理平台的功能模块与技术架构详解
物联网
SL-staff11 小时前
技术实践:解决IoT网关单点故障导致子设备批量‘失联’问题
物联网·zigbee·边缘缓存·jvs·iot架构·物模型设计·设备生命周期
布莱克60512 小时前
单例模式详解:什么是单例模式,它能解决哪些问题?
开发语言·qt·单例模式
TDengine (老段)12 小时前
TDengine 应用案例 — 能源与电力监控
大数据·数据库·物联网·能源·时序数据库·tdengine·涛思数据
qq7621182212 小时前
windows Qt mingw 编译libzip
开发语言·windows·qt
skr爱码士12 小时前
10_Qt Designer 与 UI 文件(.ui 原理、uic 编译、动态加载)
c++·qt·ui·客户端
IT爱学堂13 小时前
QT原理与源码分析可以学到什么 QT视频课程 QT课程推荐 最新推荐
开发语言·qt
躺着听Jay13 小时前
QT交叉编译
开发语言·qt
Quz13 小时前
QML 焦点导航:Tab 顺序与方向键移动
qt