使用initramfs.gz启系统之后,当前的根目录为rootfs类型的内存文件系统,
如果需要切换到mtd磁盘之类的,可以使用busybox内部提供的switch_root命令,
但是该条命令必须由init程序自己直接执行,否则启动时将提示:
switch_root: not rootfs
我的initramfs.gz原来根目录下的/init是指向/bin/busybox的符号链接,所以这里就需要变为sh脚本,以保证
switch_root在init脚本中被直接执行,下面以qemu-system-arm模拟器为基础,
initramfs启动versatilepb开发板之后,使用nfs方式mount主机pc上的/vobs/nfs目录,
之后switch_root切换到该目录作为/根目录,
init脚本内容如下:
#!/bin/sh
/bin/mount -o nolock -t nfs 172.20.0.1:/vobs/nfs /gliethttp
exec /sbin/switch_root /gliethttp /sbin/init
# 位于initramfs.gz中的gliethttp目录为mount上新的文件系统之后的目录,可以是我们这里的nfs系统,也可以是mtd闪存设备对应的jffs2等
# /sbin/init是将要切换成为根目录的文件系统上的需要执行init进程地址,
# 也就是nfs文件系统或者mtd设备上/sbin/init程序[luther.gliethttp].