天天看點

initramfs切換根檔案系統

  1. 主要思路

    将一些可執行檔案放入新的根檔案系統。

    使用mdev填充/dev

    從rootfs切換到另一個根檔案系統

  2. switch-root 是busybox提供的一個超級指令
  3. 需要特别注意的是:

    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

繼續閱讀