-
主要思路
将一些可执行文件放入新的根文件系统。
使用mdev填充/dev
从rootfs切换到另一个根文件系统 -
switch-root 是busybox提供的一个超级命令
-
需要特别注意的是:
switch_root命令必须由PID=1的进程调用,也就是必须由initramfs的init程序直接调用,不能由init派生的其他进程调用,否则会出错,提示:
switch_root: not rootfs
也是同样的原因,init脚本调用switch_root命令必须用exec命令调用,否则也会出错,提示:
switch_root: not rootfs
因此我们这里将rcS文件改回init (不再需要内存中的linux的shell环境)保证我们加入语句以init的权限调用 pid=1的进程。
然后修改文件。
#cp etc/init.d/rcS ./init
vi init
#!/bin/sh
/bin/mount -t proc proc /proc
/bin/mount -t sysfs sysfs /sys
/bin/mount -t tmpfs tmpfs /dev
echo /sbin/mdev > /proc/sys/kernel/hotplug //热插拔
echo ‘waiting to load all devices…..’
/sbin/mdev -s
sleep 10
mkdir /mnt/lower /mnt/upper /mnt/work /mnt/sysroot
/bin/mount -t squashfs /media/sr0/casper/filesystem.squashfs /mnt/lower -o loop
/bin/mount -t overlay -o lowerdir=/mnt/lower,upperdir=/mnt/upper,workdir=/mnt/work overlay /mnt/sysroot
echo "The pid now is $$" //打印当前pid 确保为1
exec switch_root /mnt/sysroot /sbin/init //转换
参考链接:
https://www.cnblogs.com/yinsua/p/3540624.html
http://blog.sina.com.cn/s/blog_44de54df0100uytb.html