搜索

121

主题

128

帖子

665

积分

网站编辑

Rank: 8Rank: 8

积分
665
发表于 2021-6-16 10:04:20 5848 浏览 0 回复

i.MX6开发板QT系统移植ssh服务

整个移植过程是比较简单的,而且我们没有做任何协议方面的了解,只是“配置”+“编译”就完成了整个工作,现在大家应该对移植开源软件有了基本的了解。入门视频教程中,给 Windows 系统安装了 ssh 客户端,给 Ubuntu 安装了 ssh 服务器,这样就可以通过ssh 在 Windows 和虚拟机 Ubuntu 之间传输文件。其实在开发板上也是可以移植和安装 ssh 服务器,这样就可以通过网络,在 Windows 和开发板之间传输文件。配套资料在网盘资料的“iTOP-i.MX6开发板资料汇总(不含光盘资料)\08_iTOP-i.MX6开发板Linux系统开发资料\06-Linux系统移植ssh服务”目录下。
我们要完成的目标是能够通过 ssh 在开发板在 Windows 和开发板之间传输文件,当然也是可以使用 ssh 控制台。
这个实验比前面的“串口文件传输工具”教程在工程(实用性)上是更加有用的,假如在实际的产品中,运行的是根文件系统,没有界面,如果数据需要在开发板和 Windows 传输数据,对于普通用户来说,是一个很好的选择,操作起来比较简单,只需要登陆然后直接将文件拖来拖去即可。
这个实验的难度要比“串口文件传输工具”要大一点,ssh 服务器需要依赖其他的库文件,所以需要开发者先移植完成所有依赖的库文件,最后才能移植 ssh 服务器。
SSH 官网和下载地址
本小节的地址在作者没有代理的情况下,测试可用。
OpenssL 下载官网地址,如下所示。就是罗永浩捐过 100 万的那个开源组织。
https://www.openssl.org/source/
OpenssL 的 github 下载地址,如下所示。
https://github.com/openssl/openssl
ssh 开源组织官网地址,如下所示。
http://www.openssh.com/
HXng KXng(o 用 X 替代,以防文档上传之后被屏蔽)的 ssh 下载地址,测试可以用,
如下所示。
https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
zlib 官网地址,如下所示。
详细移植过程
1安装交叉编译工具链
1编译的时候需要用到交叉编译工具,这里安装的是 arm-2009q3 编译器,在网盘目录
“02_iTOP-iMX6 开发板编译系统所需要的工具包等\05-arm-2009q3 编译器”下,如下图所示,压缩包“arm-2009q3.tar.bz2”。
2使用 SSH 工具将交叉编译工具拷贝到 Ubuntu14系统的文件夹“usr”-- >“local”-->“arm”中,local 下默认没有 arm 文件夹,可以新建一个。如下图所示。
拷贝编译器之后如下图所示。
3 然后在 Ubuntu 系统中将压缩包解压到当前目录下。
使用命令“cd /usr/local/arm/”进入/usr/local/arm 文件夹,然后使用解压命令“tar - vxf arm-2009q3.tar.bz2”解压压缩包,如下图所示。
4 修改交叉编译工具路径,需要修改环境变量,具体操作如下:
在 Ubuntu 命令行中,执行命令“cd /root”和“vim .bashrc”,打开环境变量文件 “.bashrc”,如下图所示。
然后在“.bashrc”文件中的最后一行添加如下信息:
“export PATH=$PATH:/usr/local/arm/arm-2009q3/bin” 如下图所示。
修改完成后保存退出。
5 执行下列命令,更新环境变量“source .bashrc”的命令,如下图所示。
6最后,在 Ubuntu 命令行中输入命令“arm”,然后按 TAB 键,如果在命令行中能够看到 arm 编译器的信息,就表明交叉编译工具安装成功,如下图所示。
7 作者是在 “/home/topeet/iMX6Q/ssh”目录下,放三个需要移植的文件,如下图所示
移植文件的安装目录是“/home/topeet/iMX6Q/ssh”目录下的“install”文件夹。install下新建两个文件夹“openssl-0.9.8h”和“zlib-1.2.3”,后面编译之后需要安装到这个目录下。
1 移植 Zlib
1 使用命令“tar -vxf zlib-1.2.3.tar.gz”解压,得到“zlib-1.2.3”文件夹,使用命令“cd zlib-1.2.3”进入“zlib-1.2.3”文件夹,如图所示
2 接着使用命令“./configure --prefix=/home/topeet/iMX6Q/ssh/install/zlib-1.2.3”,设置配置文件,如图所示。
3 使用命令“vim Makefile”修改编译参数,将所有 gcc 修改为“arm-none-linux-gnueabi-gcc”,如图所示。
4接着使用编译命令“make”,如图所示。
5 执行make 无报错后,接着使用安装命令“make install”,如图 75.2.1.5所示。
6现在已经安装好了zlib库,在后面编译 SSH 的时候,需要用到 zlib 库,作者这里的路径是“/home/topeet/iMX6Q/ssh/install/zlib-1.2.3”,后面配置的时候需要对应生成的库文件,如图所示,zlib-1.2.3文件夹下面就是生成的zlib库。
7这部分移植其实就是修改了编译器,修改编译器之后编译出的文件和不修改编译出来的文件是不一样的。在移植过程中,可能因为没有将编译器配置为目标系统的编译器,那么编译出来的一定运行不了。这里可以通过 linux 的 strings 命令查看非文本文件中的可读内容(libz.a),通常可以和 grep 命令搭配使用。
如下图所示,使用命令“strings -a /home/topeet/iMX6Q/ssh/install/zlib-1.2.3/lib/libz.a”可以查看到所有可读信息,可读信息比较多,可以保存为文本再查看,使用命令“strings -a /home/topeet/iMX6Q/ssh/install/zlib-1.2.3/lib/libz.a > log.my”重定位一下输出即可。
这里需要用到的命令是“strings -a /home/topeet/iMX6Q/ssh/install/zlib-1.2.3/lib/libz.a | grep “GCC””,如图所示。
如上图所示,可以看到编译器版本是“2009q3-67-4.4.1”的,说明这个库是使用我们设置的编译编译的,编译出的库文件当然也是 arm 上使用的。
2 移植 Openssl
1 接着来移植 openssl 库,使用命令
“tar -vxf openssl-0.9.8h.tar.gz”解压,得到“openssl-0.9.8h”文件夹,使用命令“cd openssl-0.9.8h”进入“openssl-0.9.8h”文件夹,如图所示。
2 接着使用命令“./Configure linux-elf-arm -DB_ENDIAN linux:'arm-none-linux-gnueabi-gcc' --prefix=/home/topeet/iMX6Q/ssh/install/openssl-0.9.8h”配置编译文件,如图所示。
配置完成,如图所示。
3使用编译命令“make”编译完成,如下图所示。
4最后使用安装命令“make install”,编译完成,如下图所示。
如下图所示,可以看到/home/topeet/iMX6Q/ssh/install/openssl-0.9.目录下生成了后面移植 ssh 需要的对应的库文件。
和前面 libz.a 小节类似,可以使用命令查看一下编译出来的文件到底有没有配置正确。
3 移植 SSH
1接着来移植 openssh,使用命令“tar -vxf openssh-4.6p1.tar.gz”解压,得到“openssh-4.6p1”文件夹,使用命令“cd openssh-4.6p1/”进入“openssh-4.6p1”文件夹,如图所示。
2这里看一下 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/topeet/iMX6Q/ssh/install/zlib-1.2.3 --with-ssl-dir=/home/topeet/iMX6Q/ssh/install/openssl-0.9.8h --disable-etc-default-login CC=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc AR=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-ar配置编译文件,如图所示。
配置完成,如下图所示
3使用编译命令“make”,编译完成,如图所示
编译完成,最后肯定是需要安装到开发板上的,如下图所示。最后在目录下
“/home/topeet/project/ssh-arm/openssh-4.6p1”有这几个二进制文件“scp 、sftp 、ssh、 sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”需要安装到开发板上。最终编译出来的二进制文件,可以使用 file 命令查看文件属性,如下图所示,使用命令“file scp”,可以看到“scp”文件是 32 位 ARM 上使用的可执行文件
4 安装测试 4.1 基本文件的安装
1拷贝QT5.7文件系统到home/topeet/iMX6Q目录下,如下图所示
2在QT文件系统上新建“/usr/libexec“、“/usr/local/etc ”、“/usr/local/bin ”三个目录。
3在虚拟机 Ubuntu 上,将 openssh-4.6p1 下的生成“scp 、sftp、ssh、sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”可执行文件拷贝到QT文件系统“/usr/local/bin”目录下,拷贝完成,如图所示。
4将openssh-4.6p1 下的“moduli、ssh_config、sshd_config”拷贝到开发板的“/usr/local/etc”目录下,拷贝完成,如下图所示。
5将openssh-4.6p1 下“sftp-server、ssh-keysign”拷贝到开发板的“/usr/libexec”目录下,拷贝完成, 如下图所示。
4.2 生成 Key 文件,并安装
1使用“ssh-keygen”生成个四个 key 文件“ssh_host_rsa_key”“ssh_host_dsa_key”
“ssh_host_ecdsa_key”和“ssh_host_ed25519_key”。
① 在虚拟机 Ubuntu 控制台,“/home/topeet/project/ssh-arm/openssh-4.6p1”目录下,使用命令“ssh-keygen -t rsa -f ssh_host_rsa_key -N ""”,可以生成“ssh_host_rsa_key ”文件
② 接着使用剩下的三条命令:
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”文件,拷贝到QT文件系统的“/usr/local/etc/”目录下,然后将其权限 修改为 600,如下图所示。
4.3 修改目标板密钥文件
在文件系统中,使用命令“vi etc/passwd”,打开 ssh 密钥文件,如下图所示:
在 “etc/passwd”文件底行添加以下内容:
sshd:x:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin
添加完成之后,如下图所示,然后保存,密钥文件修改完成。
4.4 打包文件系统
我们使用命令
tar -zcvf rootfs.tgz bin etc lib mnt proc sbin system topeet var dev home linuxrc opt root sys tmp usr version
将文件系统打包
输入命令:chmod 777 -R rootfs.tgz赋予权限。
4.5 烧写文件系统
1.烧写前,我们先来修改mfgtools烧写工具的一些配置。
修改cfg.init如图所示:
2.将rootfs.tar.bz2通过ssh软件放入mfgtools烧写目录
mfgtools_for_6\Profiles\Linux\OS Firmware\files\linux下面,uboot和kernel使用本文档配套资料包里面的
3.拨码开关设置成USB烧写,然后点击图3按钮进行烧写。
图3
烧写完成进度条会变成绿色,如图所示:
4.6 测试
1 将开发板的拨码开关拨成EMMC启动模式,如下图所示
2然后启动进入uboot模式,设置选择屏幕
5 寸屏幕:setenv lcdtype 5.0
9.7 寸屏幕:setenv lcdtype 9.7
10.1 寸屏幕:setenv lcdtype 10.1
塑胶壳 7 寸屏幕:setenv lcdtype 7.0
金属框 7 寸屏幕:setenv lcdtype 1024x600
HDMI 显示器:Setenv lcdtype hdmi
保存配置的命令:saveenv
3 设置系统参数:在 uboot 的命令行中,使用命令“setenv bootsystem qt”设置环境变量参数为“qt”启动模式,然后使用“saveenv”保存。
4  最后在输入重启命令:reset  重启完毕,我们可以看到板子启动。
5 作者的开发板连接路由器,PC 机的 Windows 系统也是连接路由器,所以首先要确保开发板和 PC 机是可以 Ping 通的,也就是设置在同一网段,修改文件系统的/etc/eth0-setting文件。
作者的 PC 的 IP 为:192.168.1.5,如图 75.3.4.1所示。
开发板的 IP 为:192.168.1.230,/etc/eth0-setting文件已经修改过。
6使用 ping 命令测试,如图所示,网络通畅
7 接着在开发板上新建 root 账户,如图所示,使用命令“passwd root”,它会提示输入密码,需要重复输入两次以防输错。
8 然后在开发板上运行 sshd 二进制文件,使用命令“/usr/local/bin/sshd”,如果出现提示如图 ,解决方法如下,如果没有遇到这个问题,可以跳过此步骤。
再去Ubuntu查看下ssh可执行文件,file sshd
在串口控制台输入 ln -sv /lib/ld-2.19-2014.08-1-git.so /lib/ld-linux.so.3  建立软链接,如图所示:
然后使用工具 ssh 测试是否和 PC 联通能否正常通信,如图所示,使用命令
“/usr/local/bin/ssh 192.168.123.224”,这里的 IP 是作者 PC 的 IP。
9 控制台输入“/usr/local/bin/sshd”虽然报错了,但是不影响使用。如果提示缺少动态库,前面的库文件如果拷贝不全,可能出现这种问题,如果用户使用迅为电子的根文件系统,经过测试各种文件都拷贝没错误,一般是不会提示缺少什么库的。
10接着在 PC 上使用 ssh 工具(XShell)连接开发板,使用方法和连接 Ubuntu 上的 ssh 类似,如图所示。
11 然后传一个文件测试下,如下图所示。
说明成功完成了文件传输移植工作。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

登录或注册

官方客服

QQ:2551456065

官方QQ群

195631883

扫一扫关注迅为公众号

群号652692981

 
快速回复 返回顶部 返回列表