-
主要思路
将一些可執行檔案放入新的根檔案系統。
使用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