#DO-IT

重复就是罪恶
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

linux内核启动机制

Posted on 2013-07-03 16:04  大唐歲月  阅读(148)  评论(0)    收藏  举报

Linux支持cpio-initrdimage-initrd两种格式的initrd。他们的处理流程如下:

cpio-initrd 的处理流程

. boot loader 把内核以及 initrd 文件加载到内存的特定位置。

. 内核判断 initrd 的文件格式,如果是 cpio 格式。

. 将 initrd 的内容释放到 rootfs 中。

. 执行 initrd 中的 /init 文件,执行到这一点,内核的工作全部结束,完全交给 /init 文件处理。

5  .   接下来的rootfs执行流程为:

                    init ---> /etc/inittab(run level) ---> /etc/init.d/rcS(/etc/rc.d/rc.sysinit) ---> /etc/fstab ...

 

image-initrd 的处理流程

. boot loader 把内核以及 initrd 文件加载到内存的特定位置。

. 内核判断 initrd 的文件格式,如果不是 cpio 格式,将其作为 image-initrd 处理。

. 内核将 initrd 的内容保存在 rootfs 下的 /initrd.image 文件中。

. 内核将 /initrd.image 的内容读入 /dev/ram0 设备中,也就是读入了一个内存盘中。

. 接着内核以可读写的方式把 /dev/ram0 设备挂载为原始的根文件系统。

. 如果 /dev/ram0 被指定为真正的根文件系统,那么内核跳至最后一步正常启动。

. 执行 initrd 上的 /linuxrc 文件, linuxrc 通常是一个脚本文件,负责加载内核访问根文件系统必须的驱动, 以及加载根文件系统。

. /linuxrc 执行完毕,常规根文件系统被挂载

. 如果常规根文件系统存在 /initrd 目录 , 那么 /dev/ram0 将从 移动到 /initrd 。 否则如果 /initr d目录不存在, /dev/ram0 将被卸载。

10 . 在常规根文件系统上进行正常启动过程 ,执行 /sbin/init