首页 > 编程语言 >14_一键烧写QT程序到开发板

14_一键烧写QT程序到开发板

时间:2024-04-17 17:25:19浏览次数:27  
标签:14 烧写 如下 ssh 所示 开发板 local usr

一键烧写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”文件夹, 如下图

img

"mkdir ssh_install"

接着使用命令“./configure --prefix=/home/ssh/ssh_install/zlib-1.2.3” , 设
置配置文件,

其中--prefix=/home/ssh/ssh_install/zlib-1.2.3指定了zlib的安装路径。

如下图所示 :

img

使用命令“ vim Makefile” 修改编译参数, 将所有 gcc 修改为“ arm-none-linux-gnueabi-gcc”
如下图所示

img

接着使用编译命令“make” , 如下图所示

img

执行 make 无报错后, 接着使用安装命令“make install” , 如下图所示

img

现在已经安装好了 zlib 库, 在后面编译 SSH 的时候, 需要用到 zlib 库, 作者这里的路径是“/home/ssh/ssh_install/zlib-1.2.3” , 后面配置的时候需要对应生成的库文件, 如下图所示

img

(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” 文件夹, 如下图所示。

img

接着使用命令“./Configure linux-elf-arm -DB_ENDIAN linux:'arm-none-linux-gnueabi-gcc' --prefix=/home/ssh/ssh_install/openssl-0.9.8h” 配置编译文件, 如
下图所示。 img

使用编译命令“make” 编译完成, 如下图所示

img

最后使用安装命令“make install” , 如果在安装过程提示以下错误,如下图所示:

img

执行命令rm -f /usr/bin/pod2man可以解决,如下图所示:

img

然后再次执行make install即可安装成功,如下图所示:

img

(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” 文件夹, 如下图所示

img

这里看一下 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

如下图所示:

img

执行成功如下图所示:

img

使用编译命令“make” , 编译完成, 如下图所示

img

编译完成, 最后肯定是需要安装到开发板上的, 如下图所示。 最后在目录下
“/home/ssh/openssh-4.6p1” 有这几个二进制文件“scp 、 sftp 、 ssh、 sshd、
ssh-add、 ssh-agent、 ssh-keygen、 ssh-keyscan” 需要安装到开发板上。 最终编译出来的二进制文件, 可以使用 file 命令查看文件属性, 如下图所示, 使用命令“file scp” , 可以看到“scp” 文件是 32 位 ARM上使用的可执行文件

img

二.安装ssh

​ 我们把之前我们做好的QT的文件系统拷贝到Ubuntu上,然后新建一个名为root的文件夹,在这个文件夹下解压我们拷贝到Ubuntu的QT的文件系统或者将没有打包的文件系统放进去。因为我们要把编译好的ssh安装到文件系统里面。如下图所示:

img

在解压或者拷贝到的文件系统“/usr/libexec“、 “/usr/local/etc ” 、 “/usr/local/bin ” 三个目录, 使用命令“mkdir -p ./usr/libexec ./usr/local/etc ./usr/local/bin” , 如下图所示

img

在虚拟机 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/"

img 将“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/"

img将“sftp-server、 ssh-keysign” 拷贝到开发板的“/usr/libexec” 目录下, 拷贝完成,

"cp ../openssh-4.6p1/sftp-server ./usr/libexec/
cp ../openssh-4.6p1/ssh-keysign ./usr/libexec/"

如下图所示

img

(四)生成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 ” 文件

如下图所示:

img
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/"

img

然后我们回到文件系统的解压目录,使用tar命令将文件系统打包,如果是其他格式的文件系统,如img,按照具体开发板使用手册的工具打包即可。如下图所示:

img

然后我们将打包完的文件系统烧写到开发板。

二.修改目标板秘钥文件

​ 在文件系统中, 使用命令“vi /etc/passwd” , 打开 ssh 密钥文件, 在 “/etc/passwd” 文件底行添
加以下内容:

sshd:x:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin

添加完成之后, 如下图所示, 然后保存, 密钥文件修改完成

img

三.测试

​ 保证开发板和虚拟机是可以ping通的前提下,在开发板上新建 root 账户, 如下图所示, 使用命令“passwd root” , 它会提示输入密码, 需要重复输入两次以防输错

img

然后在开发板上运行 sshd 二进制文件, 使用命令“/usr/local/bin/sshd” , 提示如下

img

虽然提示出错了,但是作者实际测试并不影响使用, 所以我们先跳过这个错误。

然后使用工具 ssh 测试是否和 PC 联通能否正常通信,我们打开ssh工具,然后输入开发板的IP和用户名,如下图所示:

img

根据软件的提示输入我们之前设置的密码:

img

可以发现我们已经成功的连接上了开发板。如下图所示,这样我们的ssh就移植成功了。

img

二.在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目录里面,如下图所示:

img

(2) 然后我们在 ubuntu 下打开终端, 切换为 root 用户, 我们使用命令“chmod 777 qt-opensource-linux-x64-5.5.1.run” 修改安装包权限。 如下图所示

img

(3) 接下来使用命令“./qt-opensource-linux-x64-5.5.1.run” 执行安装。 如下图所示

img

(4) 欢迎界面点击“next” 继续。 如下图:

img

(5)然后到输入账号密码界面, 点击“ skip” 跳过。 如下图

img

(5) 继续点击“ next” 下一步。 如下图:

img

(6)然后选择安装路径, 我们不用修改( 后面我们好多地方会用到这个路径, 尽量不要修改) , 点击“next” 下一步。

img

(7)接下来我们选择安装的组件, 勾选图中几个选项即可, 如下图所示:

img

(8)然后选择第一项已同意并阅读条款。 再点击下一步。 如下图

img

(9)然后点击“install” 安装 qt, 如下图

img

(10)等待装完成, 点击“ finish” 结束安装即可。 如下图

img

(11) 安装完成后我们可以通过“ search your computer” 搜索 qt。 如img

(12) 打开QT之前,我们需要安装一些必要的库文件。

apt-get install libqt4-dev
apt-get install libgstreamer0.10-dev
apt-get install libgstreamer-plugins-base0.10-dev

(13) 安装好依赖以后,我们打开QTcreator,然后新建一个工程,创建工程的方法和在Windows上使用QTcreator创建的方法一样,这里就不在赘述了。创建一个以后,我们点击一下编译,如果可以编译成功,则说明我们的环境搭建正确,如下图所示:

img

三.配置编译套件

(1)点击菜单栏中的Tools->选择Options,如下图所示:

img

(2)然后点击Build&Run,选择QT Versions,点击add,如下图所示

img

(3)在弹出来的窗口,我们选择编译QT源码生成的qmake,选中以后点击open,如果大家不清楚要怎么编译QT源码,请看交叉编译QT源码章节,如下图所示:

img

(4)然后点击Apply,QT版本就设置完成了。

img

(5)接着我们点击Compilers,点击里面的Add,如下图所示:

img

(6)接着我们选择里面的GCC,如下所示:

img

(7)接着我们在Name那些写上arm-linux-gcc,编译器目录选择编译QT5.7源码的编译器里面的g++,然后点击Apply,如下图所示:

img

(8)接着来设置gdb,我们点击Debuggers,选择add,然后把Name写上arm-linu-gdb,PATH的路径选择我们编译QT源码的编译器所在的路径,并选择这个编译器的gdb,如下图所示:然后点击Apply。

img

(9)然后我们点击Kits,点击里面的add,在弹出的设置界面,我们把Name改成ARM-QT5.7,Compiler选项里面选择我们之前设置arm-linux-g++,Debugger里面选择我们之前设置的arm-linux-gdb,QT version里面选择我们新添加的QT版本QT5.7,如下图所示:

img

(10)接着我们把Device type设置成Generic Linux Device,然后点击Device里面的Manage,如下图所示:

img

(11)然后在弹出来的界面我们点击add,选择Generic Linux Device,选择完成以后点击Start Wizard,如下图所示:

img

(12)在弹出来的界面我们把IP设置成开发板的IP,username设置成root,密码设置成我们在移植ssh里面设置的密码,然后点击next,如下图所示:

img

(13)在弹出来的界面,我们点击finish,如图出现成功的字样,则说明已经设置成功,如果不成功,请检查使用ssh软件是不是可以跟开发板连接,还有上一步的设置是不是正确的。如下图所示:

img

(14)点击ok,退出编译器设置界面,如下图所示:

img

(15)然后我们点击qtcreator里面的Projects,把编译器切换成我们的刚才设置的编译器,如下图所示:

img

(16)然后我们打开在我们要编译的QT代码的pro文件里面添加以下代码,

这俩行代码的意思是说把我们的可执行程序下载到开发板的/opt目录下并执行。

target.path=/opt
INSTALLS+=target

如下图所示:

img![img](file:///C:/Users/机械革命/AppData/Local/Temp/msohtmlclip1/01/clip_image113.png)img

(17)然后取消掉构建的路径,接在我们点击一下编译,可以在我们的开发板的屏幕上看到我们QT程序直接在开发板运行了,

img

标签:14,烧写,如下,ssh,所示,开发板,local,usr
From: https://www.cnblogs.com/mzx233/p/18141260

相关文章

  • 11_QT跨平台运行之把QT程序交叉编译到ARM开发板
    QT跨平台运行之把QT程序交叉编译到ARM开发板交叉编译QT代码步骤一:给QT程序布局,然后在构造函数添加自动设置屏幕大小的代码。代码如下:#include<QDesktopWidget>#include<QStyle>#include<QRect>QDesktopWidget*deskTopWidget=QApplication::desktop();QRectdeskRec......
  • 10_QT系统移植之在开发板上部署QT运行环境
    QT系统移植之在开发板上部署QT运行环境一.开始部署1.我们在Ubuntu新创建一个文件夹,然后把我们用busybox做好的文件系统拷贝到这个文件下。如下图所示:2.然后我们解压这个根文件系统到当前所在的路径下。3.我们在这个解压出来的根文件系统下新创建一个opt的文件夹,如下图所示:......
  • 暖风机/寻线仪防干扰/防静电LCD液晶段码屏驱动芯片VK1C21A/B/C/D/DA/E/EA具备显示效果
    产品型号:VK1C21A/B产品品牌:永嘉微电/VINKA封装形式:SSOP48/LQFP48可定制裸片:DICE(COB邦定片);COG(邦定玻璃用) 概述:VK1C21A/B是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM)的LCD屏,也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发送显示数据,......
  • 持续性学习-Day14(前端基础HTML5)
    参考教学视频:秦疆 HTML(HyperTexctMarkupLanguage)超文本标记语言W3C:WorldWideWebConsortium万维网联盟W3C标准包括:结构化标准语言(HTML、XML)表现标准语言(CSS)行为标准(DOM、EXMAScript)1.基本标签<!--标题标签--><!--h1-h5--><!--段落标签--><p></p><!--......
  • P4145 上帝造题的七分钟 2 / 花神游历各国
    原题链接题解1.由于每个点最多修改6次,所以我们可以暴力循环遍历所有点进行修改。然后可以把无需再修改的点跳过,即并查集,指向右端第一个仍然需要修改的值的下标这样就是单点修改加区间查询,树状数组时间复杂度\(6·n·log(n)\)(单点修改)+\(m·2·log(n)\)(区间查询)code#inc......
  • cmake调用VS2019的v140(VS2015)的工具链编译通过
    最近的工作基本上在Linux上做。但是,也有一个小工具需要同时支持Windows/Linux,工具依赖于Qt,从官方下载的版本上有qt5.6.3/5.12.12,这两个版本都有MSVC2015。因此搞了一个Win7的虚拟机,VS2015实在太大了,从VS2019的社区版看到可以定制仅安装C++工具链即可。VS2019裁剪最小项C++核......
  • day14_我的Java学习笔记 (常用API、Lambda、常见算法)
    1.常用API1.1Date类【案例】:计算出当前时间往后走1小时121秒之后的时间是多少。1.2SimpleDateFormat【练习】:秒杀活动1.3Calendar2.JDK8新增日期类2.1概述、LocalTime/LocalDate/LocalDateTime2.2Ins......
  • A7-100T的图像处理开发板
    深圳市飞录科技有限公司一:概述   开发板主控采用XilinxArtix-7系列FPGA,型号为XC7A100T-2FGG676C,具有100KLUTs,240个DSP,芯片集成了LVDS、DDR3,6.6GSerdes等控制器。XilinxArtix-7作为中规模FPGA的典范,选用28nm工艺,性能与解决方案非常成熟,在通信及图像市场的应用非常广......
  • 洛谷题单指南-数学基础问题-P1403 [AHOI2005] 约数研究
    原题链接:https://www.luogu.com.cn/problem/P1403题意解读:计算1~n每个数的约数个数之和。解题思路:1、数学方法1~n的约数范围也在1~n,要计算每个数的约数个数之和可以从约数出发,比如约数是x,那么在1~n中一共有n/x个数包含x这个约数x从1一直枚举到n,就可以得出每个约数是多少个......
  • 4月14日每日总结
    SpringBoot与日志管理今天我学习了如何在SpringBoot应用中进行日志管理,以便更好地监控和调试应用的运行状态。我首先了解了SpringBoot默认的日志配置和日志输出格式,以及如何通过配置文件来修改日志级别和输出目标。随后,我学习了如何使用Logback和Log4j等日志框架来扩展和定制S......