文章目录
- 一、前言
- 二、远端部署环境要求
- 三、远端部署及执行流程
- [四、远程 Debug](#四、远程 Debug)
- [五、QT 版本不提供 ssh密码登录方案](#五、QT 版本不提供 ssh密码登录方案)
-
- 步骤
-
- [1、获取pc 密钥对](#1、获取pc 密钥对)
- 2、将公钥复制到板端
- 3、终端登录
- [4、qt 连接远端设备](#4、qt 连接远端设备)
一、前言
- 使用 qt 进行嵌入式程序开发时,常规方法需要生成,然后在板端进行运行。当需要 debug 时操作较为复杂。这里分享一种方案:首先使用 scp将 可执行文件部署到远程端,然后进行远程执行。使用 gdb-multiarch 进行远端debug。
二、远端部署环境要求
- PC端(ubuntu)需安装:
openssh、scp、sshpass(用于自动输入 ssh密码) - 嵌入式设备:安装
openssh、scp(用于文件传输)
三、远端部署及执行流程
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,即可测试通过