qtcreator远程调试arm程序通过ssh

来源:互联网 发布:程序员离职前放木马 编辑:程序博客网 时间:2024/06/05 08:37

环境:
Qt Creator:qtcreator2.7.1
Qt:qt4.7.0
ubuntu:12.04
arm-Linux-gcc:4.5.1
openssh-6.6p1
openssl-1.0.1t
zlib:zlib-1.2.11
一:移植openssh到嵌入式开发板上
(1)新建目录/home/yangtq/ssh,下面新建三个目录compressed,source,install;install目录下新建ssh,ssl,zllib
(2)下载源码包到compressed目录下
openssh http://www.openssh.com/portable.html
openssl http://www.openssl.org/source
zlib http://www.zlib.net/
(3)解压文件到source目录下
zlib:tar xvf zlib-1.2.11.tar.xz -C /home/yangtq/ssh/source/
openssl: tar xvf openssl-1.0.1t.tar.gz -C /home/yangtq/ssh/source/
openssh:tar xvf openssh-6.6p1.tar.gz -C /home/yangtq/ssh/source/
(4)编译zlib
4.1:cd /home/yangtq/ssh/source/zlib-1.2.11
./configure –prefix=/home/yangtq/ssh/install/zlib
4.2:vi Makefile
CC=arm-linux-gcc
AR=arm-linux-ar rc
CPP =arm-linux-gcc -E
LDSHARED=arm-linux-gcc
4.3:make -j4 && make install
(5)编译openssl
5.1:cd /home/yangtq/ssh/source/openssl-1.0.1t
5.2:./Configure –prefix=/home/yangtq/ssh/install/openssl-0.9.8e os/compiler:arm-linux-gcc
5.3: make -j4 && make install
(6)编译ssh
6.1:cd /home/yangtq/ssh/source/openssh-6.6p1
6.2:./configure –host=arm-linux –with-libs –with-zlib=/home/yangtq/ssh/install/zlib –with-ssl-dir=/home/yangtq/ssh/install/openssl –disable-etc-default-login CC=arm-linux-gcc AR=arm-linux-ar
6.3:make
(7)操作开发板
(7.1)确保目标板上有以下目录,若没有,则新建:
/usr/local/bin/
/usr/local/sbin/
/usr/local/etc/
/usr/local/libexec/
/var/run/
/var/empty/
(7.2)从PC机上将以下文件拷贝到目标板Linux系统中
PC机 /home/yangtq/ssh/source/openssh-6.6p1 目录下的
scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 拷贝到目标板/usr/local/bin
moduli ssh_config sshd_config拷贝到目标板 /usr/local/etc
sftp-server ssh-keysign 拷贝到目标板 /usr/local/libexec
sshd 拷贝到目标板 /usr/local/sbin/
(7.3)生成Key文件
在PC机 /home/yangtq/ssh/source/openssh-6.6p1/ 目录下运行:
ssh-keygen -t rsa -f ssh_host_rsa_key -N “”
ssh-keygen -t dsa -f ssh_host_dsa_key -N “”
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N “”
ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N “”
将生成的 ssh_host_*_key这3个文件copy到目标板的 /usr/local/etc/目录下
我的生成之后拷贝到目标板上发现用不了,于是我就在目标板上执行语句
(7.4)修改目标板passwd文件。
在/etc/passwd 中添加下面这一行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
(7.5)假如目标板root用户没有使用passwd root
(7.6)测试
在目标板上运行:
/usr/local/sbin/sshd
可以用ps命令查看sshd是否在工作
如果运行的过程中有提示缺少动态连接库,可以在主机上搜索相应文件,拷贝到目标板/lib/目录下面,注意创建软连接!
OK!不出意外的话可以成功,
主机上:
ssh root@10.0.0.26(开发板的ip)
然后输入开发板的root密码就就可以了。
//root密码就是你开发板上root的密码,如果之前root没有密码,需要重新设置,用passwd root,然后输入密码即可
二:远程部署程序到开发板上
(1)qtcreator->工具->选项->设备配置如下图
这里写图片描述
主机名称:开发板的ip地址;用户名和密码都是开发板的设置的。最后设置玩应用看是否连接成功。
(2)配置好上面的 device,就可以在 调试>开始调试->启动关联到进程的远程调试服务器. 选项卡,打开下面的界面,选择你要调试的进程,QtCreator 会自动的通过 ssh 通道调用 /usr/bin/gdbserver,将 gdbserver attach 到要调试的进程上去(通过 pid attach 到进程)
这里写图片描述
使用这种方法,我们不用登录到设备内部,手动调用 gdbserver 去打开程序。。。
(3)开启sshd后,没有找到sftp-server服务。如secure-crt软件在连接时就出现以下错误,虽然还可以用终端,不过不能传输文件,还是很不爽的:
Failed to connect SFTP subsystem: Remote host may not have sftp-server installed : java.io.IOException: inputstream is closed
问题分析:明显的,这是没有找到sftp子服务。
问题解决:打开/usr/local/etc/sshd_config,找到这么一行:
Subsystem sftp /usr/libexec/sftp-server
看出问题了吧?配置文件中指明的sftp子服务并不是我们放的目录,所以修改为:
Subsystem sftp /usr/local/libexec/sftp-server
然后kill掉sshd,再启动就可以用sftp-server了。
三:远程部署程序到开发板上通过ssh
(1)远程部署linux设备添加打开工具》选项》设备》设备配置选项卡添加一个通Linu设备,这里需要输入设备名称,主机名称是(ARM)目标板IP地址,SSH端口默认是22,用户名和密码是你需要登录的账户,当然我建议登录root,当然这里填写自己目标板的root账户名密码。
这里写图片描述
(2)配置构建套件如下图的gdbserver
这里写图片描述
设备类型:选择上个步骤配置的FriendArmyangtq
编译器:选择嵌入式编译器
调试器:选择arm-linux-gdb
qt:选择嵌入式qt即可
(3)新建工程项目
(4)将工程添加远程部署
目的是把执行文件拷贝到目标板指定目录
点击左侧《编辑》选项卡,打开
XXX.pro
工程文件,添加如下代码
target.path = /opt
INSTALLS += target
上面代码的意思添加目标板文件路径,添加代码后点击左侧《项目》选项卡,打开运行《设置》标签,对该项目添加远程部署,点击添加,选择《部署到远程Linux主机》,配置设备选择①中添加的设备。
(5)配置项目如下图下面就可以看到刚才添加的目标文件路径,目标板可执行文件就存放在这里
这里写图片描述
(6)运行设置–>运行;目的是程序在目标板运行,而且将打印信息显示在本地,从而实现远程运行点击《添加》选择在《远程设备是运行》,参数选项的-qws如果目标板之前有窗口程序那么你就需要加上它。
(7)在程序中先设置断点,构建然后点击调试按钮,如果正常运行,执行结果如下
这里写图片描述
就可以开始调试了
参考:
(1)http://www.eeworld.com.cn/mcu/2015/1009/article_22810.html
(2)http://www.cnblogs.com/pied/p/6526969.html
(3)https://wenku.baidu.com/view/3f691962f524ccbff0218430.html

原创粉丝点击