iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板

本文转自迅为开发板:http://www.topeetboard.com

 

在前面实战教程中,移植了“串口文件传输工具”,整个移植过程是比较简单的,而且我

们没有做任何协议方面的了解,只是“配置”+“编译”就完成了整个工作,现在大家应该对

移植开源软件有了基本的了解。

入门视频教程中,给 Windows系统安装了 ssh 客户端,给 Ubuntu 安装了 ssh 服务器,

这样就可以通过 ssh Windows和虚拟机 Ubuntu 之间传输文件。其实在开发板上也是可以

移植和安装 ssh 服务器,这样就可以通过网络,在 Windows和开发板之间传输文件。

“实战教程-ssh 服务器移植到开发板”,我们要完成的目标是能够通过 ssh 在开发板在

Windows和开发板之间传输文件,当然也是可以使用 ssh 控制台。

这个实验比前面的“串口文件传输工具”教程在工程(实用性)上是更加有用的,假如在

实际的产品中,运行的是根文件系统,没有界面,如果数据需要在开发板和 Windows传输数

据,对于普通用户来说,是一个很好的选择,操作起来比较简单,只需要登陆然后直接将文件

拖来拖去即可。

这个实验的难度要比“串口文件传输工具”要大一点,ssh 服务器需要依赖其他的库文

件,所以需要开发者先移植完成所有依赖的库文件,最后才能移植 ssh 服务器。

 

 

1 ssh官网和下载地址

本小节的地址在作者没有代理的情况下,测试可用。

OpenssL 下载官网地址,如下所示。就是罗永浩捐过 100 万的那个开源组织。

https://www.openssl.org/source/

OpenssL github 下载地址,如下所示。

https://github.com/openssl/openssl

ssh 开源组织官网地址,如下所示。

http://www.openssh.com/

HXng KXngo X 替代,以防文档上传之后被屏蔽)的 ssh 下载地址,测试可以用,

如下所示。

https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/

zlib 官网地址,如下所示。

http://www.zlib.net/

 

2 详细移植过程

源码使用迅为下载好的,编译器使用arm-2009q3”。作者是在

/home/project/ssh-arm/”目录下,解压编译配置这三个需要移植的文件,用户如果在其

它目录下,配置文件需要根据实际情况修改,安装目录是/home/project/ssh-arm/”目录

下的install”文件夹,如下图所示。

 

 

 

 

 

 

 

如下图所示,安装目录install”下新建两个文件夹“openssl-0.9.8h”和“zlib-1.2.3”,后面编译之后需要安装到这个目录下。

 

 

 

 

 

 

 

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”文件夹,如下

图所示。

 

 

 

 

 

接着使用命令./configure --prefix=/home/project/ssh-arm/install/zlib-1.2.3”,设

置配置文件,如下图所示。

 

 

 

 

 

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

 

 

 

 

 

 

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

 

 

 

 

 

接着使用安装命令make install”,如下图所示。

 

 

 

 

 

在后面编译 SSH 的时候,需要用到 zlib 库,作者这里的路径是“/home/project/ssh-arm/install”下后面配置的时候需要对应,生成的库文件,如下图所示。

 

 

 

 

 

 

这部分移植其实就是修改了编译器,修改编译器之后编译出的文件和不修改编译出来的文

件是不一样的。在移植过程中,可能因为没有将寄存器配置为目标系统的编译器,那么编译出

来的一定运行不了。这里可以通过 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”重定位一

下输出即可。

 

 

 

 

 

 

 

这里需要用到的命令是strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a | grep GCC””,如下图所示。

 

 

 

 

 

 

 

如上图所示,可以看到编译器版本是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”文件夹,如下图所示。

 

 

 

 

 

 

 

接着使用命令./Configure linux-elf-arm -DB_ENDIAN linux:'arm-none-linux-gnueabi-gcc' --prefix=/home/project/ssh-arm/install/openssl-0.9.8h”配置编译文件,

如下图所示。

 

 

 

 

 

 

配置完成,如下图所示。

 

 

 

 

 

 

 

使用编译命令make”,如下图所示。

 

 

 

 

 

 

编译完成,如下图所示。

 

 

 

 

 

 

最后使用安装命令make intall”,如下图所示。

 

 

 

 

 

编译完成,如下图所示。

 

 

 

 

 

如下图所示,可以看到生成了对应的库文件,这是后面移植 ssh 需要的。

 

 

 

 

 

 

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

 

 

 

 

这里看一下 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/project/ssh-arm/install/zlib-1.2.3 --with-ssl-dir=/home/project/ssh-arm/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

配置编译文件,如下图所示。

 

 

 

 

 

 

配置完成,如下图所示。

 

 

 

 

 

 

使用编译命令make”,如下图所示。

 

 

 

 

 

 

 

编译完成,如下图所示。

 

 

 

 

 

 

编译完成,最后肯定是需要安装到开发板上的,如下图所示。最后在目录下

/home/project/ssh-arm/openssh-4.6p1”有这几个二进制文件“scp sftp ssh

sshdssh-addssh-agentssh-keygenssh-keyscan”需要安装到开发板上。最终编译

出来的二进制文件,可以使用 file 命令查看文件属性,如下图所示,使用命令“file scp”,

可以看到scp”文件是 32 ARM 上使用的可执行文件。

 

 

 

 

 

 

3 安装测试

3.1 基本文件的安装

在开发板上新建/usr/libexec“、“/usr/local/etc ”、“/usr/local/bin ”三个目

录,使用命令mkdir -p /usr/libexec /usr/local/etc /usr/local/bin”,如下图所示。

 

 

 

 

 

 

 

在虚拟机 Ubuntu 上,将 openssh-6.6p1 下的生成“scp sftpsshsshdssh-addssh-agentssh-keygenssh-keyscan”可执行文件拷贝到开发板的

/usr/local/bin”目录下,拷贝完成,如下图所示。

 

 

 

 

 

 

 

modulissh_configsshd_config”拷贝到开发板的“/usr/local/etc”目录下,

拷贝完成,如下图所示。

 

 

 

 

 

 

 

sftp-serverssh-keysign”拷贝到开发板的“/usr/libexec”目录下,拷贝完成,

如下图所示。

 

 

 

 

 

 

 

 

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 ”文

件,如下图所示。

 

 

 

 

 

 

 

接着使用剩下的三条命令:

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,如下图所示。

 

 

 

 

3.3 修改目标板秘钥文件

在开发板串口控制台中,使用命令vi /etc/passwd”,打开 ssh 秘钥文件,在

/etc/passwd”文件底行添加以下内容:

sshd:x:74:74:Privilege-separated

SSH:/var/empty/sshd:/sbin/nologin

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

 

 

 

 

 

 

3.4 测试

作者的开发板链接路由器,PC 机的 Windows系统也是链接路由器,所以首先要确保开

发板和 PC 机是可以 Ping 通的,如下图所示。

作者的 PC IP 为:192.168.2.12,如下图所示。

 

 

 

 

 

 

 

开发板的 IP 为:192.168.2.230,如下图所示。

 

 

 

 

 

 

 

使用 ping命令测试,如下图所示,网络通畅,另外按键“Ctrl+c 可以结束 ping

作。

 

 

 

 

 

 

 

接着在开发板上新建 root 账户,如下图所示,使用命令“passwd root”,它会提示输

入密码,需要重复输入两次以防输错。

 

 

 

 

 

 

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

示,虽然报错了,但是不影响使用。如果提示缺少动态库,前面的库文件如果拷贝不全,可能

出现这种问题,如果用户使用迅为电子的根文件系统,经过测试各种文件都拷贝没有错误,一

般是不会提示缺少什么库的。

 

 

 

 

 

 

接着使用ps”命令,查看一下 sshd 是否在运行,如下图所示,可以看到 sshd 已经运

行了。

 

 

 

 

然后使用工具 ssh 测试是否和 PC 联通能否正常通信,如下图所示,使用命令

/usr/local/bin/ssh 192.168.2.12”,这里的 IP 是作者 PC IP

 

 

 

 

接着在 PC 上使用 ssh 工具连接开发板,使用方法和连接 Ubuntu 上的 ssh 类似,如下图

所示。

 

 

 

 

 

 

然后传一个文件测试下,如下图所示。

 

 

 

 

 

 

然后通过 ssh 直接拖到到 pc 上,如下图所示,内容不变,说明成功完成了文件传输移植

工作。

 

 

 

 

ssh 控制台也是可以使用的,如下图所示,登陆方法和 PC 连接虚拟机 Ubuntu ssh

样。

 

 

 

 

 

另外在安装部分,也可以将其拷贝到文件系统的源码中对应目录,重新打包编译,生成直

接支持 ssh 的镜像。

到这里,部分用户可能会有疑惑,第一个人是如何知道 ssh 需要这两个库文件的呢?首

先,开发 ssh 软件的大神,做了这个东西会提供编译和使用 demo,这样就有了基础的英文移

植文档,然后慢慢的会有中文版的,接着 ssh 流传开了之后,通过网络搜索 ssh 移植到 arm

的方法的文档和博客,就随处可见了。

当然,假如将来大家工作有移植的需求,找不到中文教程,需要直接使用某个开源软件的

demo,首先就需要英文过关,然后还需要有移植的基础知识。在编译的过程中,它会提示缺

少各种库,通过编译,也是可以一步一步找出依赖库的。

 

posted on 2018-05-14 18:37  topeet  阅读(1799)  评论(0编辑  收藏  举报

导航