本文转自迅为开发板:http://www.topeetboard.comlinux
在前面实战教程中,移植了“串口文件传输工具”,整个移植过程是比较简单的,并且我git
们没有作任何协议方面的了解,只是“配置”+“编译”就完成了整个工做,如今你们应该对github
移植开源软件有了基本的了解。vim
入门视频教程中,给 Windows系统安装了 ssh 客户端,给 Ubuntu 安装了 ssh 服务器,服务器
这样就能够经过 ssh 在 Windows和虚拟机 Ubuntu 之间传输文件。其实在开发板上也是能够网络
移植和安装 ssh 服务器,这样就能够经过网络,在 Windows和开发板之间传输文件。ssh
“实战教程-ssh 服务器移植到开发板”,咱们要完成的目标是可以经过 ssh 在开发板在工具
Windows和开发板之间传输文件,固然也是可使用 ssh 控制台。测试
这个实验比前面的“串口文件传输工具”教程在工程(实用性)上是更加有用的,假如在spa
实际的产品中,运行的是根文件系统,没有界面,若是数据须要在开发板和 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 KXng(o 用 X 替代,以防文档上传以后被屏蔽)的 ssh 下载地址,测试能够用,
以下所示。
https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
zlib 官网地址,以下所示。
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、
sshd、ssh-add、ssh-agent、ssh-keygen、ssh-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 、sftp、ssh、sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”可执行文件拷贝到开发板的
“/usr/local/bin”目录下,拷贝完成,以下图所示。
将“moduli、ssh_config、sshd_config”拷贝到开发板的“/usr/local/etc”目录下,
拷贝完成,以下图所示。
将“sftp-server、ssh-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,首先就须要英文过关,而后还须要有移植的基础知识。在编译的过程当中,它会提示缺
少各类库,经过编译,也是能够一步一步找出依赖库的。