最近做项目需要使用ramdisk启动linux,因为AMC介质板设计的时候没有想过从flash启动,所以flash只有8M.这8M大概是这样分配的:
1. 控制字。用来保证重启。
2. U-boot. 为了保证能成功引导,我们准备了两份U-boot,分别放在flash的前端和后端。
3. linux内核,基本上是最小内核了,但是要支持ext2和ramdisk.
4. 文件系统。包含busybox和rsh, rlogin还有一些shared library.
5. 启动脚本(boot script).
上面这几项大概占了7.2M内存,剩下的空间非常小,为了方便管理介质板, SSH是必须的,所以这里使用dropbear来搭建SSH服务。
1. 首先下载dropbear 并且解压。
2. ./config以后,修改makefile,主要是修改cross_compile确保被自己使用的编译器编译。
3. make生成四个文件,dbclient, dropbear, dropbearkey, dropbearconvert,
(a). dbclient 是自己作为客户用来连接服务器的,相当于ssh.
(b). dropbear 是服务器端监听端口的,相当于sshd.
(c). dropbearkey是用来生成密钥的,没有密钥的dropbear不能提供服务。注意这里密钥一般只需要生成一次,更改密钥以后可能造成OpenSSH因为担心中间人攻击而无法连接。密钥一般在设备上生成,使用管理员更改权限后可以拷贝复用。
(d). dropbearconvert. 用来转换密钥成ssh的public key从而实现无密码登录,如果没记错的话转换可以是双向的。
一般来说,设备或者开发板上面只需要declient和dropbear以及使用dropbearkey生成的密钥。为了保证dropbear开机启动,可以在rc.sh后面加上 /sbin/dropbear -p 22来监听22端口。
PS:写的比较简单,需要细节的可以留言。