14_一键烧写QT程序到开发板
一键烧写QT程序到开发板
之前我们写好一个程序,都是先交叉编译完,然后在通过nfs/tftp或者其他的方法拷贝到开发板,然后在手动执行,如果我们调试程序很频繁,那我们每次都重新拷贝到开发板,那这样就太麻烦了,有没有方便一点的办法呢,这个就是接下来我们要介绍的一种方法,一键烧写QT程序到开发板,我们只需要在qtcreater上点击一下编译,那么QT程序会自动到开发板上来运行,是不是非常的方便?
一.在开发板上移植ssh
要想实现一键烧写,那么我们必须就先要在开发板上移植一个ssh,本次实验我们使用的是busybox文件系统,这个文件系统并不支持ssh,所以我们要先移植一个上去。接下来,我们一起来移植一下。
移植环境:
编译器保持和编译文件系统和QT的编译器一致:
arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
Ubuntu版本:Ubuntu16
(1)移植zlib
从迅为提供的资料中拷贝“ zlib-1.2.3.tar.gz” 到 Ubuntu 系统, 使用命令“ tar -vxf zlib-1.2.3.tar.gz” 解压, 得到“zlib-1.2.3” 文件夹, 使用命令“cd zlib-1.2.3” 进入“ zlib-1.2.3”文件夹, 如下图
"mkdir ssh_install"
接着使用命令“./configure --prefix=/home/ssh/ssh_install/zlib-1.2.3” , 设
置配置文件,
其中--prefix=/home/ssh/ssh_install/zlib-1.2.3指定了zlib的安装路径。
如下图所示 :
使用命令“ vim Makefile” 修改编译参数, 将所有 gcc 修改为“ arm-none-linux-gnueabi-gcc”
如下图所示
接着使用编译命令“make” , 如下图所示
执行 make 无报错后, 接着使用安装命令“make install” , 如下图所示
现在已经安装好了 zlib 库, 在后面编译 SSH 的时候, 需要用到 zlib 库, 作者这里的路径是“/home/ssh/ssh_install/zlib-1.2.3” , 后面配置的时候需要对应生成的库文件, 如下图所示
(2)移植 openssl
接着来移植 openssl 库, 拷贝“openssl-0.9.8h.tar.gz” 到 Ubuntu 系统, 使用命令“tar -vxf openssl-0.9.8h.tar.gz” 解压, 得到“openssl-0.9.8h” 文件夹, 使用命令“cd openssl-0.9.8h”进入“openssl-0.9.8h” 文件夹, 如下图所示。
接着使用命令“./Configure linux-elf-arm -DB_ENDIAN linux:'arm-none-linux-gnueabi-gcc' --prefix=/home/ssh/ssh_install/openssl-0.9.8h” 配置编译文件, 如
下图所示。
使用编译命令“make” 编译完成, 如下图所示
最后使用安装命令“make install” , 如果在安装过程提示以下错误,如下图所示:
执行命令rm -f /usr/bin/pod2man可以解决,如下图所示:
然后再次执行make install即可安装成功,如下图所示:
(3)移植 ssh
接着来移植 openssh, 拷贝“ openssh-4.6p1.tar.gz” 到 Ubuntu 系统, 使用命令“ tar -vxfopenssh-4.6p1.tar.gz” 解压, 得到“openssh-4.6p1” 文件夹, 使用命令“cd openssh-4.6p1/” 进入“openssh-4.6p1” 文件夹, 如下图所示
这里看一下 ssh 的 configure 的帮助文件, 如下图所示, 使用“ ./configure --help"
ssh 的 configure 文件中需要配置的参数
--host 表示编译出来要运行的平台
--with-libs 表示需要的额外的库文件;
--with-zlib 表示库文件 zlib 的 instal 路径 l;
--with-ssl-dir 表示 OpenSSl 文件的 install 路径;
--disable-etc-default-login 表示不使用当前环境变量的编译器, 所以后面配置参数时, 最后直接配置
CC 和 AR 这两个编译器;
CC 表示设置使用的编译器;
AR 表示设置使用的编译器的路径(蛮奇怪, 配置文件中似乎没有这个参数, 用户可以执
行验证下)
接着使用配置命令, 命令比较长, 作者使用颜色给大家分段:
./configure --host=arm-none-linux --with-libs --with-zlib=/home/ssh/ssh_install/zlib-1.2.3 --with-ssl-dir=/home/ssh/ssh_install/openssl-0.9.8h --disable-etc-default-login CC=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc AR=/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-ar
如下图所示:
执行成功如下图所示:
使用编译命令“make” , 编译完成, 如下图所示
编译完成, 最后肯定是需要安装到开发板上的, 如下图所示。 最后在目录下
“/home/ssh/openssh-4.6p1” 有这几个二进制文件“scp 、 sftp 、 ssh、 sshd、
ssh-add、 ssh-agent、 ssh-keygen、 ssh-keyscan” 需要安装到开发板上。 最终编译出来的二进制文件, 可以使用 file 命令查看文件属性, 如下图所示, 使用命令“file scp” , 可以看到“scp” 文件是 32 位 ARM上使用的可执行文件
二.安装ssh
我们把之前我们做好的QT的文件系统拷贝到Ubuntu上,然后新建一个名为root的文件夹,在这个文件夹下解压我们拷贝到Ubuntu的QT的文件系统或者将没有打包的文件系统放进去。因为我们要把编译好的ssh安装到文件系统里面。如下图所示:
在解压或者拷贝到的文件系统“/usr/libexec“、 “/usr/local/etc ” 、 “/usr/local/bin ” 三个目录, 使用命令“mkdir -p ./usr/libexec ./usr/local/etc ./usr/local/bin” , 如下图所示
在虚拟机 Ubuntu 上, 将 openssh-6.6p1 下的生成“scp 、 sftp、 ssh、 sshd、 ssh-
add、 ssh-agent、 ssh-keygen、 ssh-keyscan” 可执行文件拷贝到文件系统“/usr/local/bin” 目录下,拷贝完成, 如下图所示
"cp ../openssh-4.6p1/scp ./usr/local/bin/
cp ../openssh-4.6p1/sftp ./usr/local/bin/
cp ../openssh-4.6p1/ssh ./usr/local/bin/
cp ../openssh-4.6p1/sshd ./usr/local/bin/
cp ../openssh-4.6p1/ssh-add ./usr/local/bin/
cp ../openssh-4.6p1/ssh-agent ./usr/local/bin/
cp ../openssh-4.6p1/ssh-keygen ./usr/local/bin/
cp ../openssh-4.6p1/ssh-keyscan ./usr/local/bin/"
将“moduli、 ssh_config、 sshd_config” 拷贝到开发板的“/usr/local/etc” 目录下,
拷贝完成, 如下图所示。
"cp ../openssh-4.6p1/moduli ./usr/local/etc/
cp ../openssh-4.6p1/ssh_config ./usr/local/etc/
cp ../openssh-4.6p1/sshd_config ./usr/local/etc/"
将“sftp-server、 ssh-keysign” 拷贝到开发板的“/usr/libexec” 目录下, 拷贝完成,
"cp ../openssh-4.6p1/sftp-server ./usr/libexec/
cp ../openssh-4.6p1/ssh-keysign ./usr/libexec/"
如下图所示
(四)生成KEY文件,并安装
使用“ssh-keygen” 生成个四个 key 文件“ssh_host_rsa_key” “ssh_host_dsa_key”
“ssh_host_ecdsa_key” 和“ssh_host_ed25519_key” 。
1 在虚拟机 Ubuntu 控制台, “ /home/ssh/openssh-4.6p1” 目录下, 使用命
令“ssh-keygen -t rsa -f ssh_host_rsa_key -N ""” , 可以生成“ssh_host_rsa_key ” 文件
如下图所示:
2 接着使用剩下的三条命令:
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
ssh-keygen -t dsa -f ssh_host_ed25519_key -N ""
执行完成之后, 将生成的“ssh_host_rsa_key” “ssh_host_dsa_key” “ssh_host_ecdsa_key” 和
“ssh_host_ed25519_key” 文件, 拷贝到文件系统的“/usr/local/etc/” 目录下, 然后将其权限修改为 600, 如下图所示:
"cp ssh_host_rsa_key ../root/usr/local/etc/
cp ssh_host_dsa_key ../root/usr/local/etc/
cp ssh_host_ecdsa_key ../root/usr/local/etc/
cp ssh_host_ed25519_key ../root/usr/local/etc/"
然后我们回到文件系统的解压目录,使用tar命令将文件系统打包,如果是其他格式的文件系统,如img,按照具体开发板使用手册的工具打包即可。如下图所示:
然后我们将打包完的文件系统烧写到开发板。
二.修改目标板秘钥文件
在文件系统中, 使用命令“vi /etc/passwd” , 打开 ssh 密钥文件, 在 “/etc/passwd” 文件底行添
加以下内容:
sshd:x:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin
添加完成之后, 如下图所示, 然后保存, 密钥文件修改完成
三.测试
保证开发板和虚拟机是可以ping通的前提下,在开发板上新建 root 账户, 如下图所示, 使用命令“passwd root” , 它会提示输入密码, 需要重复输入两次以防输错
然后在开发板上运行 sshd 二进制文件, 使用命令“/usr/local/bin/sshd” , 提示如下
虽然提示出错了,但是作者实际测试并不影响使用, 所以我们先跳过这个错误。
然后使用工具 ssh 测试是否和 PC 联通能否正常通信,我们打开ssh工具,然后输入开发板的IP和用户名,如下图所示:
根据软件的提示输入我们之前设置的密码:
可以发现我们已经成功的连接上了开发板。如下图所示,这样我们的ssh就移植成功了。
二.在Ubuntu上搭建QT开发环境。
为了避免由于开发环境的版本差异导致的不必要的问题, 推荐用户下载和使用手册中安装的相同版本“qtcreator-3.5.1” 。 用户有两种方式可以下载。 这里需要注意的是, 如果用户想要在上位机上调试, 则需要下载对应环境的插件。 我们提供的是“qt-opensource-linux-x64-5.5.1.run” , 里面包含了在 Ubuntu 中运行的插件, 也就是编译出来的应用程序, 可以在 Ubuntu16.04.6 中运行。 然后经过简单的移植, 就可以在开发板上运行。
官网下载地址 http://download.qt.io/archive/qt/5.5/5.5.1/,
(1)安装qtcreator-3.5.1
我们将qt-opensource-linux-x64-5.5.1.run安装包通过ssh传到Ubuntu的/opt目录里面,如下图所示:
(2) 然后我们在 ubuntu 下打开终端, 切换为 root 用户, 我们使用命令“chmod 777 qt-opensource-linux-x64-5.5.1.run” 修改安装包权限。 如下图所示
(3) 接下来使用命令“./qt-opensource-linux-x64-5.5.1.run” 执行安装。 如下图所示
(4) 欢迎界面点击“next” 继续。 如下图:
(5)然后到输入账号密码界面, 点击“ skip” 跳过。 如下图
(5) 继续点击“ next” 下一步。 如下图:
(6)然后选择安装路径, 我们不用修改( 后面我们好多地方会用到这个路径, 尽量不要修改) , 点击“next” 下一步。
(7)接下来我们选择安装的组件, 勾选图中几个选项即可, 如下图所示:
(8)然后选择第一项已同意并阅读条款。 再点击下一步。 如下图
(9)然后点击“install” 安装 qt, 如下图
(10)等待装完成, 点击“ finish” 结束安装即可。 如下图
(11) 安装好后,需要修改"chmod 777 /opt/Qt5.5.1/Tools/QtCreator/bin/qtcreator"权限,防止创建项目工程时权限不足
(12) 安装完成后我们可以通过"/opt/Qt5.5.1/Tools/QtCreator/bin/qtcreator"来打开Qt
(13) 打开QT之前,我们需要安装一些必要的库文件。
apt-get install libqt4-dev
apt-get install libgstreamer0.10-dev
apt-get install libgstreamer-plugins-base0.10-dev
(13) 安装好依赖以后,我们打开QTcreator,然后新建一个工程,创建工程的方法和在Windows上使用QTcreator创建的方法一样,这里就不在赘述了。创建一个以后,我们点击一下编译,如果可以编译成功,则说明我们的环境搭建正确,如下图所示:
三.配置编译套件
(1)点击菜单栏中的Tools->选择Options,如下图所示:
(2)然后点击Build&Run,选择QT Versions,点击add,如下图所示
(3)在弹出来的窗口,我们选择编译QT源码生成的qmake,选中以后点击open,如果大家不清楚要怎么编译QT源码,请看交叉编译QT源码章节,如下图所示:
(4)然后点击Apply,QT版本就设置完成了。
(5)接着我们点击Compilers,点击里面的Add,如下图所示:
(6)接着我们选择里面的GCC,如下所示:
(7)接着我们在Name那些写上arm-linux-gcc,编译器目录选择编译QT5.7源码的编译器里面的g++,然后点击Apply,如下图所示:
(8)接着来设置gdb,我们点击Debuggers,选择add,然后把Name写上arm-linu-gdb,PATH的路径选择我们编译QT源码的编译器所在的路径,并选择这个编译器的gdb,如下图所示:然后点击Apply。
(9)然后我们点击Kits,点击里面的add,在弹出的设置界面,我们把Name改成ARM-QT5.7,Compiler选项里面选择我们之前设置arm-linux-g++,Debugger里面选择我们之前设置的arm-linux-gdb,QT version里面选择我们新添加的QT版本QT5.7,如下图所示:
(10)接着我们把Device type设置成Generic Linux Device,然后点击Device里面的Manage,如下图所示:
(11)然后在弹出来的界面我们点击add,选择Generic Linux Device,选择完成以后点击Start Wizard,如下图所示:
(12)在弹出来的界面我们把IP设置成开发板的IP,username设置成root,密码设置成我们在移植ssh里面设置的密码,然后点击next,如下图所示:
(13)在弹出来的界面,我们点击finish,如图出现成功的字样,则说明已经设置成功,如果不成功,请检查使用ssh软件是不是可以跟开发板连接,还有上一步的设置是不是正确的。如下图所示:
(14)点击ok,退出编译器设置界面,如下图所示:
(15)然后我们点击qtcreator里面的Projects,把编译器切换成我们的刚才设置的编译器,如下图所示:
(16)然后我们打开在我们要编译的QT代码的pro文件里面添加以下代码,
这俩行代码的意思是说把我们的可执行程序下载到开发板的/opt目录下并执行。
target.path=/opt
INSTALLS+=target
如下图所示:
![img](file:///C:/Users/机械革命/AppData/Local/Temp/msohtmlclip1/01/clip_image113.png)
(17)然后取消掉构建的路径,接在我们点击一下编译,可以在我们的开发板的屏幕上看到我们QT程序直接在开发板运行了,