最近项目需要用到armv8 cpu的嵌入式精简的文件系统,但是busybox生成的文件系统只支持telnet,不支持ssh连接,而openssh的库又很大,不符合精简文件系统,想到了轻量级的dropbear,下面就编译dropbear的步骤和遇到的问题进行一下说明。
目标环境: NXP的armv8
交叉编译链:aarch64-fsl-linux-gcc
工具下载: dropbear-2016.74.tar.bz2
地址:http://matt.ucc.asn.au/dropbear/releases/
涉及到的lib库:
libz.so.1.2.8、libutil-2.20-2014.11.so、libcrypt-2.20-2014.11.so
由于本人交叉编译链已经有相应的库,这里就不在对相应库的交叉编译进行说明了,如果交叉编译链中没有以上库请先自行编译。
将dropbear-2016.74.tar.bz2放到/home/freescale/test,解压缩dropbear
tar -xvf dropbear-2016.74.tar.bz2
进入dropbear目录,配置dropbear
cd dropbear-2016.74
./configure --prefix=/home/freescale/test/build/dropbear
修改生成的Makefile
CC=aarch64-fsl-linux-gcc(根据所使用的交叉工具链修改)
AR=aarch64-fsl-linux-ar
RANLIB=aarch64-fsl-linux-ranlib
编译并安装
make
make scp
make install
拷贝scp到安装目录
cp scp /home/freescale/test/build/dropbear/bin
strip所有的可执行文件
aarch64-fsl-linux-strip /home/freescale/test/build/dropbear/bin/*
aarch64-fsl-linux-strip /home/freescale/test/build/dropbear/sbin/*
把所有bin目录和sbin目录文件拷贝到精简文件系统对应的bin和sbin目录中,拷贝上述涉及到的lib库到精简文件系统的lib目录,创建dropbear配置目录,并生成密钥
mkdir /etc/dropbear
cd /etc/dropbear
dropbearkey -t rsa -f dropbear_rsa_host_key
dropbearkey -t dss -f dropbear_dss_host_key
ln -s /bin/dbclient /bin/ssh
ln -s /lib/libz.so.1.2.8 /lib/libz.so.1
ln -s /lib/libutil-2.20-2014.11.so /lib/libutil.so.1
ln -s /lib/libcrypt-2.20-2014.11.so /lib/libcrypt.so.1
dropbear即为服务端,dbclient即为客户端,添加系统启动服务
vi /etc/init.d/rcS
添加
/usr/sbin/dropbear
到此处dropbear准备工作已经完毕,重启系统后,用PC通过ssh远程登录
如果是正常文件系统应该不会出现问题,但是笔者是自己做的精简文件系统,用ssh登录后,ssh要求输入用户名、密码的界面出来了,发现输入用户名、密码之后一直提示密码错误。可以确定的是用户名和密码是一定没有输错的。
而将dropbear前台启动: /usr/bindropbear -E -F 发现单板一直打印不存在的用户登录
原来是linux认证搞得鬼,此问题需要两个文件:
vi /etc/shells
添加
/bin/sh
/bin/bash
/bin/bash64
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
/bin/ksh
/bin/zsh
ln -s /lib/libnss_files-2.20-2014.11.so /lib/libnss_files.so.2
此问题的详细说明请参考:
https://blog.csdn.net/force_eagle/article/details/4508978
Show下xz压缩后的ext4 ramdisk精简文件系统大小:仅有2.6M