参考我上篇SSH移植文章
移植后就可以一键远程发送运行程序了,可参看下面的“运行调试程序一节”
最近换了个文件系统重新弄QT居然出下面的错误了
SSH connection failure: SSH Protocol error: Host key of machine "192.168.10.110" has changed.
说是我开发板的密钥对更改了,我重新删除了~/.ssh/known_hosts里的内容,在terminal连接更新后,终端是能登录了,可QT还是出这个错,无语了,怎么弄都错,后来没办法,用终端ssh时会出现条错误信息:
sign_and_send_pubkey: signing failed: agent refused operation
在PC机上先删除所有./ssh/id*密钥对,然后依次使用 ssh-add -D
—> ssh-add
(不删除id*好像不能ssh-add,不知道为什么),然后ssh-keygen
重新生成密钥对,这会再次ssh-add
也没错了,先在开发板上设置个密码,使用ssh-cpy-id root@ip
将PC上的密钥发布给开发板。将qt里的DEVICE设备全删了,重新新建个居然OK了,自己都不知道怎么就行了。
查看qt说明:Supported GDB Versions
Starting with version 3.1, Qt Creator requires the Python scripting extension. GDB builds without Python scripting are not supported anymore and will not work.
The minimum supported version is GDB 7.5 using Python version 2.7, or 3.3, or newer.
For remote debugging using GDB and GDB server, the minimum supported version of GDB server on the target device is 7.0.
本地最低版本要7.5并且带Python的,如果不支持python不能正常调试,而远程调试使用的gdb server版本最少要7.0
由于调试时gdb运行在PC上,gdb server运行在开发板上,调试的程序是作为 gdb server的子程序运行的,gdb对gdb server发调试命令控制被调试程序的运行,所以这里说的gdb的移植包括gdb 在PC平台的编译 和 gdb server移植到ARM板上。
查看PC机上的版本,下载能用的最好与你PC上的gcc一致的版本
下载地址
tar -xf gdb-7.11.tar.xz
cd gdb-7.11/
./configure --target=arm-linux --with-python
anzyelay@ubuntu:gdb-7.11$ make
anzyelay@ubuntu:gdb-7.11$ sudo make install
anzyelay@ubuntu:gdb-7.11$ ls /usr/local/bin/
arm-none-linux-gnueabi-gdb ccmake cpack gcore gdbserver
arm-none-linux-gnueabi-run cmake ctest gdb
安装后多出了arm-none-linux-gnueabi-gdb和arm-none-linux-gnueabi-run,名字虽然是这样,但这两货可是在PC上运行的。
anzyelay@ubuntu:gdb-7.11$ cd gdb/gdbserver/
anzyelay@ubuntu:gdb-7.11$ ./configure --host=arm-linux
anzyelay@ubuntu:gdb-7.11$ make
将编译出来的gdbserver拷贝到开发板上
anzyelay@ubuntu:gdbserver$ cp gdbserver ~/Desktop/arm/myrootfs/bin/
在开发板上运行sshd
/usr/local/sbin/sshd
本节参考官方说明文档Qt Creator Manual->Connecting Embedded Linux Devices,
Qt Creator提供了对开发板的远程编译、调试、运行和应用程序的分析,首先需要你安装了交叉编译工具,并在Qt Creator里配置好,如下:
Select Tools > Options > Build & Run > Qt Versions > Add to add the Qt version for the embedded Linux.
Select Tools > Options > Build & Run > Compilers > Add to add the compiler for building the applications.
具体可参考我上篇文章QT creator交叉编译配置。文章介绍了如何添加上述两个配置,而要想远程运行调试,先要把远程设备加入进来,具体如下:
Select Tools > Options > Devices > Add > Generic Linux Device > Start Wizard.
在此处ADD 选择”Generic Linux Device“添加进来,连接的保护有PASSWORD和SSH KEY两种方式,随意选一种(DEVICE上必须先有SSH的支持),然后填写开发板的IP一路点OK之类就行,完成后它会测试下能否连通,成功如下:
测试好后在KIT中选择device type
在工程建立时选择交叉编译KIT,或在PROJECT里ADD KIT ,然后 点击到RUN如下图:
此时的远程路径是空的。具体设置看参考:
Qt Creator Manual->Deploying Applications to Embedded Linux Devices
在工程文件中添加如下两条保存:
target.path = /root //程序传送(deploy)到开发板的目录位置。
INSTALLS += target
保存后在看如下图多出来了可执行文件的HOST和DEVICE保存路径,,在参数栏加上qws如下;
此时点击运行就能看到程序在开发板上运行了。可以看到调试窗口显示:
同样的,调试前要先配置,在调试器项里选择我们刚才编译好的gdb如下:
在kit里将交叉编译的KIT里的调试器换成我们刚才设置的
配置好调试器后,在QT里选择DEBUG
然后点击调试就行了
具体错误信息:
使用密钥验证过不了。
Connecting to host...
SSH connection failure: Server rejected key.
Device test failed.
原因及解决方法:
设置的公钥没有加到开发板的公钥列表里,手动加入即可
anzyelay@ubuntu:tmp$ ssh-copy-id -i /home/anzyelay/.ssh/qtc_id.pub root@192.168.10.110
Now try logging into the machine, with "ssh '[email protected]'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
anzyelay@ubuntu:tmp$
具体错误信息:
Connecting to host...
SSH connection failure: SSH Protocol error: Server and client capabilities don't match. Client list was: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss.
Server list was ssh-ed25519.
Device test failed.
原因及解决方法:
Server和client的通信协议不一致。qt里的使用的SSH是QT自带的不是PC机上的,我服务器只使能了ed25519,修改配置使能ecdsa就可
HostKey /etc/ssh/ssh_host_ecdsa_key
具体错误信息:
ssh以经移植好并用command试过是可用的,但在用QT配置devices时TEST过不了。Devices test显示如下:
Connecting to host...
SSH connection failure: The remote host closed the connection
Device test failed.
具体错误信息:
checking whether to use python... yes
checking for python... /usr/bin/python
checking for python2.7... no
configure: error: python is missing or unusable
make[1]: *** [configure-gdb] Error 1
make[1]: Leaving directory `/home/anzyelay/Downloads/gdb-7.11'
make: *** [all] Error 2
原因及解决方法:
查看版本是OK的,而PC中也是有python2.7的。
anzyelay@ubuntu:gdb-7.11$ python -V
Python 2.7.3
网上说是缺少 python headers,尝试如下安装了-DEV后OK。
anzyelay@ubuntu:gdb-7.11$ sudo apt-get install python2.7-dev