iTOP-IMX6UL 实战项目:ssh 服务器移植到 arm 开发板
Posted topeet
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iTOP-IMX6UL 实战项目:ssh 服务器移植到 arm 开发板相关的知识,希望对你有一定的参考价值。
实验环境:迅为提供的Ubuntu12.04.2 以及虚拟机
编译器:arm-2009q3 编译器
开发板系统:QT系统
![技术图片](https://image.cha138.com/20210730/df36655aa6ad4866a722ed797ea7fc92.jpg)
开发板使用手册中给Windows 系统安装了 ssh 客户端,给 Ubuntu 安装了 ssh
服务器,这样就可以通过ssh 在 Windows 和虚拟机 Ubuntu 之间传输文件。其实在开发
板上也是可以移植和安装ssh 服务器,这样就可以通过网络,在 Windows 和开发板之间传
输文件。“实战教程-ssh 服务器移植到开发板”,我们要完成的目标是能够通过 ssh 在开发
板在Windows 和开发板之间传输文件,当然也是可以使用 ssh 控制台。
1 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 官网地址,如下所示。
2 移植过程
源码使用迅为下载好的,编译器使用“arm-2009q3”。作者是“/home/project/ssh-
arm/”目录下,解压编译配置这三个需要移植的文件,用户如果在其它目录下,配置文件需
要根据实际情况修改,安装目录是“/home/project/ssh-arm/”目录下的“install”文件
夹,如下图所示。
![技术图片](https://image.cha138.com/20210730/2994ad35ad814c7db88c6af8b4127b4f.jpg)
如下图所示,安装目录“install”下新建两个文件夹“openssl-0.9.8h”和“zlib-
1.2.3”,后面编译之后需要安装到这个目录下。
![技术图片](https://image.cha138.com/20210730/79f5243d5595416995a2f35ea77239d2.jpg)
2.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”文件夹,如下图所示。
![技术图片](https://image.cha138.com/20210730/4928ac74347e45b782b1e4dfb37794b5.jpg)
接着使用命令“./configure --prefix=/home/project/ssh-arm/install/zlib-1.2.3”,设
置配置文件,如下图所示。
![技术图片](https://image.cha138.com/20210730/abd2217a42d44f798226ceb720ccad43.jpg)
使用命令“vim Makefile”修改编译参数,将所有 gcc 修改为“arm-none-linux-
gnueabi-gcc”,如下图所示。
![技术图片](https://image.cha138.com/20210730/b755942028064c5187c635c150f2512e.jpg)
接着使用编译命令“make”,如下图所示。
![技术图片](https://image.cha138.com/20210730/012446aefb574d0a8691a3a8cd06c325.jpg)
接着使用安装命令“make install”,如下图所示。
![技术图片](https://image.cha138.com/20210730/170b1d6b028c4a17b614533c775a4ced.jpg)
在后面编译SSH 的时候,需要用到 zlib 库,作者这里的路径是“/home/project/ssh-
arm/install”下后面配置的时候需要对应,生成的库文件,如下图所示。
![技术图片](https://image.cha138.com/20210730/5bb36ad526bd45d9be11965c8a769c5c.jpg)
这部分移植其实就是修改了编译器,修改编译器之后编译出的文件和不修改编译出来的文
件是不一样的。在移植过程中,可能因为没有将寄存器配置为目标系统的编译器,那么编译出
来的一定运行不了。这里可以通过linux 的 strings 命令查看非文本文件中的可读内容,通
常可以和grep 命令搭配使用。
如下图所示,使用命令“strings -a /home/project/ssh-arm/install/zlib-
1.2.3/lib/libz.a”可以查看到所有可读信息,可读信息比较多,可以保存为文本再查看,使用
命令“strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a > log.my”重定位一
下输出即可。
![技术图片](https://image.cha138.com/20210730/de48217c6c8d4715822dd9b1ddee3fd2.jpg)
这里需要用到的命令是“strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a |
grep “GCC””,如下图所示。
![技术图片](https://image.cha138.com/20210730/f28cdb662da140faba34d842f87fe7f4.jpg)
如上图所示,可以看到编译器版本是“2009q3-67-4.4.1”的,说明这个库是使用我们设
置的编译编译的,编译出的库文件当然也是arm 上使用的。
2.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”文件夹,如下图所示。
![技术图片](https://image.cha138.com/20210730/b7c594d0517449139d988e800a752ca0.jpg)
接着使用命令“./Configure linux-elf-arm -DB_ENDIAN linux:‘arm-none-linux-
gnueabi-gcc‘ --prefix=/home/project/ssh-arm/install/openssl-0.9.8h”配置编译文件,
如下图所示。
![技术图片](https://image.cha138.com/20210730/638e48f900464d7a963fb5574abb7f0a.jpg)
配置完成,如下图所示。
![技术图片](https://image.cha138.com/20210730/446b3d9caee34b7b8726efa1d9b7d6fa.jpg)
使用编译命令“make”,如下图所示。
![技术图片](https://image.cha138.com/20210730/ed59196e64ff4ffcb634d58128177091.jpg)
编译完成,如下图所示。
![技术图片](https://image.cha138.com/20210730/ab345125573242328e88ccd0e6825824.jpg)
最后使用安装命令“make intall”,如下图所示。
![技术图片](https://image.cha138.com/20210730/c7da3aadc13a4d3694626371b33ae96d.jpg)
编译完成,如下图所示。
![技术图片](https://image.cha138.com/20210730/1257ca3106dd43ffb443ddc7f9d16f18.jpg)
如下图所示,可以看到生成了对应的库文件,这是后面移植ssh 需要的。
![技术图片](https://image.cha138.com/20210730/b1e9ec58d854470abcdf5da5e76bd281.jpg)
和前面libz.a 小节类似,可以使用命令查看一下编译出来的文件到底有没有配置正确。
2.3 移植 ssh
接着来移植openssh,拷贝“openssh-4.6p1.tar.gz”到 Ubuntu 系统,使用命令
“tar-vxf openssh-4.6p1.tar.gz”解压,得到“openssh-4.6p1”文件夹,使用命令“cd
openssh-4.6p1/”进入“openssh-4.6p1”文件夹,如下图所示。
![技术图片](https://image.cha138.com/20210730/b6b8114e69a64aa8917510b9193adc3b.jpg)
这里看一下ssh 的 configure 的帮助文件,如下图所示,使用“ ./configure --
help”。
![技术图片](https://image.cha138.com/20210730/751ec2de223e46c18156b89c187a5e6e.jpg)
ssh 的 configure 文件中需要配置的参数
-host 表示编译出来要运行的平台
--with-libs 表示需要的额外的库文件;
--with-zlib 表示库文件 zlib 的 instal 路径 l;
--with-ssl-dir 表示 OpenSSl 文件的 install 路径;
--disable-etc-default-login 表示不使用当前环境变量的编译器,所以后面配置参数
时,最后直接配置CC 和 AR 这两个编译器;
CC 表示设置使用的编译器;
AR 表示设置使用的编译器的路径(蛮奇怪,配置文件中似乎没有这个参数,用户可以执
行验证下)。
接着使用配置命令,命令比较长,作者使用颜色给大家分段:
![技术图片](https://image.cha138.com/20210730/a0e8a1e9807b426e8f64899b8bcc0298.jpg)
配置编译文件,如下图所示。
![技术图片](https://image.cha138.com/20210730/8d68eb8c1c384a93a5edc35becc0008b.jpg)
配置完成,如下图所示。
![技术图片](https://image.cha138.com/20210730/f9c11cd3aa9e4e048dfb334ccc2e82c7.jpg)
使用编译命令“make”,如下图所示。
![技术图片](https://image.cha138.com/20210730/fa9a90dd6d55494e82343360c47477d1.jpg)
编译完成,如下图所示。
![技术图片](https://image.cha138.com/20210730/95d9f615d8a447a396a5de0823a6ac2c.jpg)
编译完成,最后肯定是需要安装到开发板上的,如下图所示。最后在目录下
“/home/project/ssh-arm/openssh-4.6p1”有这几个二进制文件“scp 、sftp 、ssh、
sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”需要安装到开发板上。最终编译
出来的二进制文件,可以使用file 命令查看文件属性,如下图所示,使用命令“file scp”,
可以看到“scp”文件是 32 位 ARM 上使用的可执行文件。
![技术图片](https://image.cha138.com/20210730/ac3ea5e7822d4231a00203d6c712eee6.jpg)
3 安装测试
3.1 基本文件的安装
在开发板上新建“/usr/libexec“、“/usr/local/etc ”、“/usr/local/bin ”三个目
录,使用命令“mkdir -p /usr/libexec /usr/local/etc /usr/local/bin”,如下图所示。
![技术图片](https://image.cha138.com/20210730/c8000db602684fbaa923e3b4e91f124f.jpg)
在虚拟机Ubuntu 上,将 openssh-6.6p1 下的生成“scp 、sftp、ssh、sshd、ssh-
add、ssh-agent、ssh-keygen、ssh-keyscan”可执行文件拷贝到开发板的
“/usr/local/bin”目录下,拷贝完成,如下图所示。
![技术图片](https://image.cha138.com/20210730/44ef3b6710eb440aa4426924270ad281.jpg)
将“moduli、ssh_config、sshd_config”拷贝到开发板的“/usr/local/etc”目录下,
拷贝完成,如下图所示。
![技术图片](https://image.cha138.com/20210730/d8d38a75ab1e421ba49f048bf029ed14.jpg)
将“sftp-server、ssh-keysign”拷贝到开发板的“/usr/libexec”目录下,拷贝完成,
如下图所示。
![技术图片](https://image.cha138.com/20210730/50a9167f935d4fad8bc383056a56997d.jpg)
3.2 生成 key 文件,并安装
使用“ssh-keygen”生成是个 key 文件“ssh_host_rsa_key”“ssh_host_dsa_key”
“ssh_host_ecdsa_key”和“ssh_host_ed25519_key”。在虚拟机 Ubuntu 控制台,
“/home/project/ssh-arm/openssh-4.6p1”目录下,使用命令“ssh-keygen -t rsa -f
ssh_host_rsa_key -N ""”,可以生成“ssh_host_rsa_key ”文件,如下图所示。
![技术图片](https://image.cha138.com/20210730/2926d8d7e9e24e2a9d3a726bec32a13c.jpg)
接着使用剩下的三条命令:
![技术图片](https://image.cha138.com/20210730/e389605af46244f19f9b0b04fb991dc0.jpg)
执行完成之后,生成的文件如下图所示。
![技术图片](https://image.cha138.com/20210730/c505cff7f46f4b80beaa725b3fa01d5c.jpg)
将生成的“ssh_host_rsa_key”“ssh_host_dsa_key”“ssh_host_ecdsa_key”和
“ssh_host_ed25519_key”文件,拷贝到开发板的“/usr/local/etc/”目录,然后将其权限
修改为600,如下图所示。
![技术图片](https://image.cha138.com/20210730/7ee93b48c95c4e2a8d9df2fbd8e73fe3.jpg)
3.3 修改目标板秘钥文件
在开发板串口控制台中,使用命令“vi /etc/passwd”,打开 ssh 秘钥文件,在
“/etc/passwd”文件底行添加以下内容:
![技术图片](https://image.cha138.com/20210730/c94f6dbd7d354849bbe8a42fd0cbc53f.jpg)
添加完成之后,如下图所示,然后保存,秘钥文件修改完成。
![技术图片](https://image.cha138.com/20210730/8fe13c3526974e969a8b9f0576d48e06.jpg)
3.4 测试
作者的开发板链接路由器,PC 机的 Windows 系统也是链接路由器,所以首先要确保
开发板和PC 机是可以 Ping 通的。接着在开发板上新建 root 账户,如下图所示,使用命
令“passwd root”,它会提示输入密码,需要重复输入两次以防输错。
![技术图片](https://image.cha138.com/20210730/867020c975f24d498a659e327d68e207.jpg)
然后在开发板上运行sshd 二进制文件,使用命令“/usr/local/bin/sshd”,如下图所
示,虽然报错了,但是不影响使用。如果提示缺少动态库,前面的库文件如果拷贝不全,可能
出现这种问题,如果用户使用迅为电子的根文件系统,经过测试各种文件都拷贝没有错误,一
般是不会提示缺少什么库的。
![技术图片](https://image.cha138.com/20210730/8db50ab5034a4317ba93a31c92f1629b.jpg)
接着使用“ps”命令,查看一下 sshd 是否在运行,如下图所示,可以看到 sshd 已经
运行了。
![技术图片](https://image.cha138.com/20210730/a9c4a12cad6346e5a7f808257bb4c03d.jpg)
然后使用工具ssh 测试是否和 PC 联通能否正常通信,如下图所示,使用命令
“/usr/local/bin/ssh 192.168.2.16”,这里的 IP 是作者 PC 的 IP。
![技术图片](https://image.cha138.com/20210730/f6050e5c20f74700b87974b3738d9cd0.jpg)
接着在PC 上使用 ssh 工具连接开发板,使用方法和连接 Ubuntu 上的 ssh 类似,如
下图所示。
接着在PC 上使用 ssh 工具连接开发板,使用方法和连接 Ubuntu 上的 ssh 类似,如
下图所示。
![技术图片](https://image.cha138.com/20210730/d80c7dba65e24b018550c58a69e2e83c.jpg)
ssh 控制台也是可以使用的,如下图所示,登陆方法和 PC 连接虚拟机 Ubuntu 的 ssh
一样。至此,ssh 移植到 arm 板上完成。
另外在安装部分,也可以将其拷贝到文件系统的源码中对应目录,重新打包编译,生成直接支持ssh 的镜像。到这里,部分用户可能会有疑惑,第一个人是如何知道 ssh 需要这两个
库文件的呢?首先,开发ssh 软件的大神,做了这个东西会提供编译和使用 demo,这样就
有了基础的英文移植文档,然后慢慢的会有中文版的,接着ssh 流传开了之后,通过网络搜
索ssh 移植到 arm 的方法的文档和博客,就随处可见了。
当然,假如将来大家工作有移植的需求,找不到中文教程,需要直接使用某个开源软件的
demo,首先就需要英文过关,然后还需要有移植的基础知识。在编译的过程中,它会提示缺
少各种库,通过编译,也是可以一步一步找出依赖库的。
http://topeetboard.com
以上是关于iTOP-IMX6UL 实战项目:ssh 服务器移植到 arm 开发板的主要内容,如果未能解决你的问题,请参考以下文章
计算机毕业设计实战项目之 [含论文+源码等]SSH超市进销存管理系统[包运行成功]