本篇记录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功能。