一、移植SSH的原因
日常调试开发板的Linux系统都是通过ARM的debug串口UART来调试的,当我们的产品封装之后,一般很少留出debug串口为嵌入式工程师提供调试接口。但是网口作为产品与网络交互的唯一接口,对于我们来说是可用的。在ARM调试时候,我们通过的是Linux的shell,通过的是串口与shell进行交互。现在,我遇到一个问题,如何通过网口与ARM的shell进行交互呢?下面我又两种想法:第一种就是通过移植SSH服务
通过产品板上安装ssh服务,然后通过网口进行交互。这种想法来自于我常用的一款免费软件。xshell这款软件支持了串口、ssh等多种交互方式。
在我用ssh服务进行连接时,需要Ubuntu系统安装SSH服务。但是Ubuntu系统有自己的源和软件库。可以通过apt-get命令进行非常方便的安装,产品板上想要安装SSH服务就需要对源码进行交叉编译后进行移植。本篇文章的移植方法来自于这篇博客,然后结合自己开发板的实际情况来进行移植。
http://blog.youkuaiyun.com/xy010902100449/article/details/50343733
二、移植SSH的准备
(1)在官网下载SSH移植源码:
https://www.openssl.org/source/old/0.9.x/
https://fastly.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
http://www.zlib.net/
分别下载zlib、openssl、openssh源码
(2)Ubuntu系统中进行交叉编译
在Ubuntu系统中创建工作目录,并把压缩文件拷贝进去,用tar zxvf命令解压
<1> zlib的交叉编译:
先读README文件
编译所有文件或者运行test程序都要去遵循Makefile.in文件,所以我们再去看这个文件:
此文件主要告诉我们如何使用Makefile来进项工程编译:在进行交叉编译的第一步就是指定你的交叉编译链:
而在Makefile文件中只有两行代码:
在未配置之前,会打印出让你配置的提示信息,清除操作。
所以我们用 ./configure –prefix=/自己的想要存放编译结果的路径。这里我的路径为、home/fluency/workspace/ssh/install/
修改Makefile文件,把红线位置的修改为交叉编译工具链
然后make
make install
生成的目标文件存在install文件中
<2> ssl源码编译
当然首先还是看README文件
./configure –prefix=/home/fluency/workspace/ssh/install_ssl/ 配置目标文件生成目录
./configure os/compiler:arm-linux-gcc 配置交叉编译链。
同样的套路 make (但是在编译的时候出现了一个小小的插曲,在make编译时没编过去,出现一个无法识别格式的报错!!! 用make clean命令清除一下,重新编译。就完成了。原因不明。)
make install (出现一个权限错误,加sudo就可以了。)
<3> ssh源码编译
进入ssh文件目录
./configure -host=arm-linux -with-libs -with-zlib=/home/fluency/workspace/ssh/install
-with-ssl-dir=/home/fluency/workspace/ssh/install_ssl/ -disable-etc-default-login
CC=/home/fluency/workspace/arm-gcc/arm-linux-gcc/usr/bin/arm-linux-gcc AR=/home/fluency/workspace/arm-gcc/arm-linux-gcc/usr/bin/arm-linux-ar
(3) 移植ssh
(1)移植生成的可执行文件、配置文件和库文件
cp scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan /usr/local/bin/
cp moduli ssh_config sshd_config /usr/local/etc/
cp sftp-server ssh-keysign /usr/lib/
cp sshd /usr/sbin/
(2)在Ubuntu系统中生成用到的KEY
ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
ssh-keygen -t dsa -f ssh_host_ed25519_key -N ""
ssh-keygen -t rsa1 -f ssh_host_key -N ""
生成的文件拷贝到开发板
cp ssh_host_* /usr/local/etc/
三、运行sshd
(1)库文件缺失
在运行/uar/sbin/sshd时、缺少了两个库文件
在/lib根文件目录的lib目录中存在libcrypto.so.0.9.7f、但是它找不到libcrypto.so.5这个库。我们需要给这个库创建一个链接
ln -s libcrypto.so.0.9.7f libcrypto.so.5
第二个zlib.so.1这个库在zlib源码中,把它拷贝到lib中就可以了
(2)用户缺失
在添加库文件后又出现用户不存在的情况、解决办法,添加用户到passwd文件中
sshd:x:74:74::/var/empty/sshd:/sbin/nologin
(3)登录失败
需要更改一次密码、把密码改成123456
再次登录就可以了
这样就实现了通过 ssh 服务来实现远程登录开发板了。
四、制作到文件系统
把第三步操作的步骤加入到buzybox制作好的文件系统中。把passwd文件替换掉,把库文件加入。在rcS文件中添加启动sshd命令/uar/sbin/sshd
然后通过jffs2工具制作好文件系统。
然后我们烧录的文件系统就可以自己支持ssh服务了。不需要再每次都移植了。
有两个远程登录的服务器都做好了
另一个Telnet远程登录、参考我的博客:http://blog.youkuaiyun.com/qq_37474534/article/details/78626270