浅析 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,即可测试通过
相关推荐
古译汉书3 小时前
【IoT死磕系列】Day 9:架构一台“自动驾驶物流车”,看8种协议如何协同作战
网络·arm开发·单片机·物联网·tcp/ip·架构·自动驾驶
特别关注外国供应商8 小时前
SSH PrivX™ OT 案例 - 某船舶运营商为数千艘船舶实现了远程访问,用于诊断、维护和物联网数据采集
物联网·ssh·数据采集·ad·远程访问·多因素身份验证·privx
ada0_ada110 小时前
qt模块学习记录
开发语言·qt·学习
knighthood200110 小时前
Qt5.15+VTK9.3.0实现点云点选功能
开发语言·qt
北京耐用通信11 小时前
工业自动化领域耐中达讯自动化CC-Link IE转EtherCAT技术解决方案
人工智能·物联网·网络协议·自动化·信息与通信
xyx-3v12 小时前
qt创建新工程
开发语言·c++·qt
大神的风范13 小时前
QT部署YOLO11实时检测
驱动开发·深度学习·qt·目标检测·计算机视觉
cpp_learner13 小时前
Linux ARM架构 使用 linuxdeployqt 打包QT程序
qt
泉飒13 小时前
C2001: 常量中有换行符-QT解决办法-逆向思路
开发语言·qt
泉飒15 小时前
QT的报错
qt