本文转自迅为开发板: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 KXng(o 用 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、

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,首先就需要英文过关,然后还需要有移植的基础知识。在编译的过程中,它会提示缺

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

iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板的更多相关文章

  1. iTOP-IMX6UL 实战项目:ssh 服务器移植到 arm 开发板

    实验环境:迅为提供的Ubuntu12.04.2 以及虚拟机 编译器:arm-2009q3 编译器 开发板系统:QT系统   开发板使用手册中给Windows 系统安装了 ssh 客户端,给 Ubunt ...

  2. 用grunt搭建自动化的web前端开发环境实战教程(详细步骤)

    用grunt搭建自动化的web前端开发环境实战教程(详细步骤) jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用!前端自动化, ...

  3. 以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)

    第一节 简介 欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链.星际文件系统(IPFS).Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售 ...

  4. 微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/a1786223749/article/ ...

  5. mybatis实战教程(mybatis in action)之一:开发环境搭建

    mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载. 首先建立一 ...

  6. Apache 2 移植到Arm开发板

    第一步,安装pcre: tar -xvzf pcre-8.31.tar.gz cd pcre-8.31 ./configure --prefix=$ARMROOTFS/usr/pcre 的错误,如下图 ...

  7. minicom移植到ARM开发平台

    minicom需要ncurses库的支持.arm-linux-gcc中并没有此库故需要交叉编译ncurses,否则出现很多头文件.库函数找不到. 软件环境: ncurses-6.0 下载网址:http ...

  8. 1.mybatis实战教程mybatis in action之一开发环境搭建

    转自:https://www.cnblogs.com/shanheyongmu/p/5652471.html 什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框 ...

  9. mybatis实战教程(mybatis in action),mybatis入门到精通

    转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过hibernate了那这个就非常的简单) (再加 ...

随机推荐

  1. struts2 中 result type="stream"

    Stream result type是Struts2中比较有用的一个feature.特别是在动态生成图片和文档下载的情况下 1:图片验证码: Action类,action主要要提供一个获取InputS ...

  2. adbi命令【转】

    本文转载自:https://zmywly8866.github.io/2015/01/24/all-adb-command.html   ADB很强大,记住一些ADB命令有助于提高工作效率. 获取序列 ...

  3. YTU 2430: C语言习题 链表建立,插入,删除,输出

    2430: C语言习题 链表建立,插入,删除,输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 576  解决: 280 题目描述 编写一个函数creatlink,用来建立一个动态链表 ...

  4. YTU 2416: C语言习题 成绩输出

    2416: C语言习题 成绩输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 1111  解决: 417 题目描述 输入n(<=10)个学生的姓名.学号和成绩,将其中不及格者的姓 ...

  5. Jquery与Dom对象相互转化

    Jquery与Dom对象相互转化   jQurey对象和DOM对象的相互转换 在讨论jQurey对象和DOM对象的相互转换之前,我们先约定定义变量的风格.如果我们获取的对象是jQuery对象,那么我们 ...

  6. JAVA web简单的登录界面jsp实现

    此次试验所用到的软件是myeclipse10,tomcat7,Dreamweaver,sqlserver2008数据库.可以实现用户使用用户名和密码登录.如果登录成功,页面会显示登录成功,如果密码错误 ...

  7. 四:多线程--NSOperation简单介绍

    一.NSOperation简介 1.NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQu ...

  8. codeforces 125 A-E 补题

    A Measuring Lengths in Baden 进制转换 水题 #include<bits/stdc++.h> using namespace std; int main() { ...

  9. bzoj3995

    线段树 额 计蒜客竟然把这个出成noip模拟题... 这个东西很像1018,只不过维护的东西不太一样 然后我参考了fuxey大神的代码,盗一波图 具体有这五种情况,合并请看代码,自己写了一个结果wa了 ...

  10. jquery操作ID带有变量的节点

    var indexNode='content'+index;$("#"+indexNode).show( 'puff', { }, 500, callback );