Buildroot 移植openSSH到嵌入式平台记录

本篇记录nuc980的linux4.4版本通过Buildroot 移植openSSH的过程,关于Buildroot在nuc980上的应用请参考:
– Buildroot2016 编译交叉工具链( nuc980 验证测试) –

第 1 步: buildroot中选择openSSH包
> Target packages
> Networking applications
> [*] openssh

Symbol: BR2_PACKAGE_OPENSSH [=y]      
Type  : boolean      
Prompt: openssh 
Location:      
    -> Target packages    
      -> Networking applications 
      Defined at package/openssh/Config.in:1
Depends on: BR2_USE_MMU [=y]    
Selects: BR2_PACKAGE_OPENSSL [=y] && BR2_PACKAGE_ZLIB [=y]           

第 2 步: 编译 buildroot
$ make -j4
把 output/image 文件夹生成的image、rootfs.yaffs2 文件烧写至目标板。

第 3 步: 配置 sshd 运行环境
3.1) 打开目标板的 /etc/passwd 文件,在最后添加下面这一行:

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

3.2) 需设置 root 密码

$ passwd root

3.3) 在目标版 /usr/local/etc/ 目录下生成key文件:

	$ cd /usr/local/etc/
	$ ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
	$ 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 ""

此步也可以在ubuntu的主机上产生密钥,手工拷贝到目标板也可以。目标板需支持ssh-keygen。

3.4) 设置目标板 date 日期

date -s “2020-10-30 13:45:45"

如果时间未设置会报错误:

密码过期的错误,日期与ssh客户段时间差距大,如下:
WARNING: Your password has expired. Password change required but no TTY available.	

3.5) 挂载 sshd 依赖的VFS文件系统(/dev/pts/ptmx)

$ mkdir /dev/pts
$ mount devpts /dev/pts -t devpts

3.6) 启动目标板 sshd 服务.

$ /usr/sbin/sshd

3.7) ssh登录后验证,拷贝服务器文件至目标板

/home # scp root@39.99.232.232:/home/dd.md ./
The authenticity of host '39.99.232.232 (39.99.232.232)' can't be established.
ECDSA key fingerprint is SHA256:FZi4T0KdpKbgzDUON9BYlxtCZq6VOu3tfDL190uL62Y.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '39.99.232.232' (ECDSA) to the list of known hosts.
root@39.99.232.232's password: 
dd.md                                                                                               100%    7     0.4KB/s   00:00    
/home # ls
dd.md      debug.txt

第 4 步: 目标板 etc/init.d/ 建立启动脚本, 支持SSHD 自启动

4.1) 在 rcS 脚本中增加开机执行内容

/etc/init.d/S41network.sh &   # 配置网卡 开机自动获取ip地址
/etc/init.d/S49sshd		      # 配置sshd 的VFS 依赖环境
/etc/init.d/S51sshd           # 启动 sshd 服务器

4.2) /etc/init.d/S41network 内容如下:

#!/bin/sh
echo " --- ifconfig eth0 up --- "
ifconfig eth0 up
sleep 1
s=0
while [ $s -eq 0 ]
do
s=$(cat /sys/class/net/eth0/carrier)
sleep 1
done
#ifconfig eth0 up
#sleep 1
udhcpc -i eth0 -t 3 -n
#ntp
sleep 5
ntpdate -u ntp.api.bz #上海ntp 服务器

4.3) /etc/init.d/S49sshd 内容如下:

mkdir /dev/pts
mount devpts /dev/pts -t devpts
echo "mount devpts.."

4.4) /etc/init.d/S51sshd 内容如下:

/etc/init.d/S50sshd start

4.5) 目标板启动sshd
至此目标板就能够实现开机自动配置网卡、并启动sshd的服务。

第 5 步: 在ubuntu主机上制作直接烧写的rootfs文件系统
5.1) passwd 文件
拷贝 /etc/passwd 至buildroot的 board/nuvoton/rootfs/etc/文件夹下。

5.2) 密码文件
拷贝 /usr/local/etc/ssh 至buildroot的 board/nuvoton/rootfs/etc/ssh 文件夹下。

5.3) 脚本文件
拷贝 /etc/init.d/ S41network S49sshd S50sshd S51sshd rcS 文件, 至buildroot的 board/nuvoton/rootfs/etc/init.d/ 文件夹下。
注:文件权限属性,注意文件路径

5.4) 制作yaffs2 文件镜像
假设当前在buildroot编译文件夹下。

$ cd output/
$ rm -r THIS_IS_NOT_YOUR_ROOT_FILESYSTEM 
$ cd ..
$ mkyaffs2 --inband-tags -p 2048 target rootfs_yaffs2.img

5.5) 烧写 rootfs_yaffs2.img 文件镜像,目标板就能够支持ssh功能。

猜你喜欢

转载自blog.csdn.net/weixin_38387929/article/details/110393797