Linux支持cpio-initrd和image-initrd两种格式的initrd。他们的处理流程如下:
cpio-initrd 的处理流程
1 . boot loader 把内核以及 initrd 文件加载到内存的特定位置。
2 . 内核判断 initrd 的文件格式,如果是 cpio 格式。
3 . 将 initrd 的内容释放到 rootfs 中。
4 . 执行 initrd 中的 /init 文件,执行到这一点,内核的工作全部结束,完全交给 /init 文件处理。
5 . 接下来的rootfs执行流程为:
init ---> /etc/inittab(run level) ---> /etc/init.d/rcS(/etc/rc.d/rc.sysinit) ---> /etc/fstab ...
image-initrd 的处理流程
1 . boot loader 把内核以及 initrd 文件加载到内存的特定位置。
2 . 内核判断 initrd 的文件格式,如果不是 cpio 格式,将其作为 image-initrd 处理。
3 . 内核将 initrd 的内容保存在 rootfs 下的 /initrd.image 文件中。
4 . 内核将 /initrd.image 的内容读入 /dev/ram0 设备中,也就是读入了一个内存盘中。
5 . 接着内核以可读写的方式把 /dev/ram0 设备挂载为原始的根文件系统。
6 . . 如果 /dev/ram0 被指定为真正的根文件系统,那么内核跳至最后一步正常启动。
7 . 执行 initrd 上的 /linuxrc 文件, linuxrc 通常是一个脚本文件,负责加载内核访问根文件系统必须的驱动, 以及加载根文件系统。
8 . /linuxrc 执行完毕,常规根文件系统被挂载
9 . 如果常规根文件系统存在 /initrd 目录 , 那么 /dev/ram0 将从 / 移动到 /initrd 。 否则如果 /initr d目录不存在, /dev/ram0 将被卸载。
10 . 在常规根文件系统上进行正常启动过程 ,执行 /sbin/init 。
浙公网安备 33010602011771号