移植sshd到博创2410开发板
<!--[if !supportLists]-->一、<!--[endif]-->环境
硬件环境:
Host:X86PC
Target:博创2410开发板
软件环境:
Host:redhat linux 9.0
Target:arm-linux kernel:linux-2.4.18
<!--[if !supportLists]-->二、<!--[endif]-->移植步骤
源码包:
openssh-4.6p1.tar.gz http://www.openssh.com/portable.html
openssl-0.9.8e.tar.gz http://www.openssl.org/source
zlib-1.2.3.tar.tar http://www.zlib.net/
编译工具:
Armv4l-unkonwn-linux-gcc、Armv4l-unkonwn-linux-g++系列。
2、1、交叉编译
我在/arm(我在pc上作为nfs目录挂载到开发板上的)新建work/ssh目录
Mkdir /arm/work/ssh 工作目录
Cd /arm/work/ssh
Mkdir compressed install source compressed用于存放源码包
Install软件安装目录
Source源码包解压目录
我的源码包是在windows下下载的,由于我在linux建立了samba服务器目录为(/home/sambauser),所以所有源码包都放在在目录下,把它们拷贝到/arm/work/ssh/compressed中
Mv /home/sambauser/openssh-4.6p1.tar.gz /arm/work/ssh/compressed
Mv /home/sambauser/openssl-0.9.8e.tar.gz /arm/work/ssh/compressed
Mv /home/sambauser/zlib-1.2.3.tar.gz /arm/work/ssh/compressed
交叉编译zlib
cd /arm/work/ssh/compressed/
tar xzvf zlib-1.2.3.tar.gz -C ../source
cd ../source/zlib-1.2.3
./configure --prefix=/arm/work/ssh/install/zlib-1.2.3
vim Makefile
CC= Armv4l-unkonwn-linux-gcc
AR= Armv4l-unkonwn-linux-ar rc
CPP = Armv4l-unkonwn-linux-gcc -E
LDSHARED= Armv4l-unkonwn-linux-gcc
make
make install
交叉编译openssl
cd /arm/work/ssh/compressed/
tar zxvf openssl-0.9.8e.tar.gz -C ../source
cd ../source/openssl-0.9.8e
./Configure --prefix=/arm/work/ssh/install/openssl-0.9.8e os/compiler Armv4l-unkonwn-linux-gcc
make
make install
交叉编译openssh
cd /arm/work/ssh/compressed
tar zxvf openssh-4.6p1.tar.gz –C ../source
cd ../source/ openssh-4.6p1
./configure --host= Armv4l-unkonwn-linux --with-libs --with-zlib=/arm/work/ssh/install/zlib-1.2.3 --with-ssl-dir=/arm/work/ssh/install/openssl-0.9.8e --disable-etc-default-login CC= Armv4l-unkonwn-linux-gcc AR= Armv4l-unkonwn-linux-ar
Make
如果make的时候出现如下错误的话
strtonum.c: In function `strtonum':
strtonum.c:59: `LLONG_MIN' undeclared (first use in this function)
strtonum.c:59: (Each undeclared identifier is reported only once
strtonum.c:59: for each function it appears in.)
strtonum.c:61: `LLONG_MAX' undeclared (first use in this function)
我的处理方法是修改openssh-4.6p1目录下的config.h文件,添加如下两行:
#define LLONG_MIN -9223372036854775808
#define LLONG_MAX 9223372036854775807
把生成的sshd用Armv4l-unkonwn-linux-strip处理一下,
Armv4l-unkonwn-linux-strip sshd
2、2、安装sshd:
在安装的时候我就遇到很多问题,不过在参考网上的资料还是搞定了。因为博创2410开发板上的根文件系统是cramfs的,/usr和/etc目录下的文件无法修改也不能增加新的目录和文件,然而/mnt/yaffs/这个文件系统就可以添加新的文件和目录。我的工作分为两大块:重建根文件系统和yaffs文件系统(这个部分依个人情况而定,我是因为之前在把开发板上的东西做实验做的混乱了干脆重来的。)
2、2、1 重建根文件系统
在开发板用vivi分区时分给根文件系统的大小为3M左右,所以sshd运行时需要的一些文件就不能编进根文件系统了。我也借鉴博创自己的做法做个链接然后链接到yaffs目录下面相对应的目录和文件。我所有和根文件系统有关的东西放在/arm/root/目录下,所以下面的操作都是对这个目录下的文件操作。
在/usr/目录下新建一个链接文件local链接到/mnt/yaffs/local/目录
Cd /arm/root/
Ln –s ./usr/loca/ ./mnt/yaffs/local/
还有要修改/etc目录下的passwd和group文件,添加上sshd用户和组
Cd /arm/root/etc
Vi passwd
修改后如下所示:
root::0:0:root:/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
sshd:*:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin―――添加sshd用户
vi group
root:*:0:
daemon:*:1:
bin:*:2:
sys:*:3:
adm:*:4:
tty:*:5:
disk:*:6:
lp:*:7:lp
mail:*:8:
news:*:9:
uucp:*:10:
proxy:*:13:
kmem:*:15:
dialout:*:20:
fax:*:21:
voice:*:22:
cdrom:*:24:
floppy:*:25:
tape:*:26:
sshd:*:74:-------------添加sshd组
sudo:*:27:
audio:*:29:
ppp:x:99:
然后在/var目录下新建两个目录
Cd /arm/root/var
Mkdir empty
Mkdir run
Cd empty
Mkdir shhd
到此为止,根文件系统修改完毕,把/arm/root/制作成下载到开发板上的映像文件root.cramfs。
Cd /arm
Mkcramfs root root.cramfs
做好映像文件root.cramfs后下载到开发板上,这个参考博创的实验手册就可以了我就不罗嗦。
2、2、2 制作yaffs文件系统
因为之前在根文件系统中/usr/local/时链接到yaffs下的local目录的,所有要在yaffs下添加local目录。我的yaffs是在/arm目录下。
Cd /arm/yaffs
Mkdir local
Cd local
Mkdir bin etc libexec sbin share
以上命令是把一些用来存放文件的目录建好,然后把相应的文件拷贝进去。
切换到ssh编译的目录。
Cd /arm/work/ssh/source/openssh-4.6p1
Cp scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan /arm/yaffs/local/bin
cp moduli ssh_config sshd_config ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_key ssh_host_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub /arm/yaffs/local/etc
如果没有那些key文件的话,用如下命令产生:
ssh-keygen -t rsa1 -f ssh_host_key -N ""
ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
还有一个问题是要注意这些文件的属性,
-rw------- 1 root root 88039 Feb 15 2003 moduli
-rw-r--r-- 1 root root 1167 Feb 15 2003 ssh_config
-rw------- 1 root root 668 Nov 17 17:23 ssh_host_dsa_key
-rw-r--r-- 1 root root 590 Nov 17 17:23 ssh_host_dsa_key.pub
-rw------- 1 root root 515 Nov 17 17:23 ssh_host_key
-rw-r--r-- 1 root root 319 Nov 17 17:23 ssh_host_key.pub
-rw------- 1 root root 883 Nov 17 17:23 ssh_host_rsa_key
-rw-r--r-- 1 root root 210 Nov 17 17:23 ssh_host_rsa_key.pub
-rw------- 1 root root 2474 Feb 15 2003 sshd_config
如果你的这些文件的属性设置和上面的不一样的话,需要改过来不然启动sshd服务的时候会报错。
cp sftp-server ssh-keysign /arm/yaffs/local/libexec
cp sshd /arm/yaffs/local/sbin
这些弄好之后,把yaffs目录下所有的文件和目录压缩为一个压缩包
Cd /arm/yaffs
Tar cjvf * /arm/yaffs.tar.bz2
接下来就按照博创的手册把yaffs.tar.bz2下载到开发板然后解压。
此时的你只要等开发板启动好之后启动sshd服务了,使用绝对路径来启动。
/usr/local/sbin/sshd
用客户端测试,linux和windows下都可以通过ssh访问开发板了。
<!--[if !supportLists]-->三、<!--[endif]-->我所遇到的问题及其解决方法
[root@linuxserver ssh]# ssh -l root 192.168.1.166(这是我开发板的ip地址)
[email protected]'s password:
Permission denied, please try again.
分析:
这是使用根用户来登陆开发板,因为博创开发板的根用户没有密码,所以要修改sshd_config文件如下选项:
PermitRootLogin yes―――――允许根用户登陆
PermitEmptyPasswords yes――――允许使用空密码
UsePrivilegeSeparation no――――把安全级别降低,因为不会连接互联网
我在移植过程中遇到的问题都参照网上的文章解决了,非常感谢众多网友们的贡献,真的非常感谢。写在我前面的移植步骤里面了。
参考资料:
移植sshd到JK2410开发板 小结http://blog.chinaunix.net/u1/43047/showart_371372.html
SSH系列1: OpenSSH移植http://linux.chinaunix.net/bbs/viewthread.php?tid=988433
解决ssh不能连接的问题http://daning.javaeye.com/blog/166186