论坛首页 综合技术版 Linux

gentoo & linux 系统启动步骤分析

浏览 267 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-06-18 关键字: linux gentoo init

首先推广一下javaeye的 gentoo圈子


以下步骤,是基于已安装版本(非livecd)分析的。

按序号从小到大执行:

  1. linux 内核加载完硬件驱动后,启动 init 用户根进程(最后的引导步骤)。

  2. init 用户进程读取 /etc/inittab 配置文件,进行系统环境初始化。
    inittab配置文件:

  3. 按照 inittab 文件中的配置,首先会执行 "id:3:initdefault:",作用是定义默认的启动级别(runlevel)

  4. 按照 inittab 文件中的配置,执行 "si::sysinit:/sbin/rc sysinit"。作用是执行 /sbin/rc sysinit 指令,进行本地文件系统的mount和初始化。

  5. rc 脚本是由 /sbin/runscript 指令来执行的,从截屏中最上部分的 "#!/sbin/runscript" 可以看出。
    在 rc 脚本里,首先会 source 一下 /sbin/functions.sh,这里主要是做一些环境变量,公用函数的预定义
    下面的 RC_INTERACTIVE if判断,可以设定,是否以交互方式,来启动。默认是不交互的。

  6. 接下来,跳过一些函数定义,能够看到如下截屏的代码,作用是 只在传递了 sysinit 参数时设置好 PATH环境变量,启用字符设备,设置系统消息的级别。
  7. 检查 /proc 目录是否存在,如果不存在这个目录,那么提示错误信息,并 unmount 所有的文件系统,重启。如果存在,那么提示成功信息,并尝试mount proc,有异常就提示。


  8. 如果当前内核版本是2.6.0的,那么看一下 /sys 目录是否存在,不存在提示错误,存在的话,尝试mount sys文件系统。
  9. 检查 /dev 目录是否存在, 如果不存在这个目录,那么提示错误信息,并 unmount 文件系统,重启。如果存在,则 fix 掉一个官方称之为比较神奇的关于devfs 的 bug。
  10. 尝试弄清楚用户希望如何运用 /dev 设备,以及看内核是否支持 /dev,依赖文件是否缺少,启动参数是否正确等。
  11. 如果内核版本为 2.5.68 ,那么还需要 mount pts设备(/dev/pts)
  12. 开始记录启动日志
  13. 设置默认的启动级别。逻辑:
    内 核命令行参数(在引导配置中,跟在内核后面的bootlevel和softlevel,比如grub.conf里 kernel /boot/vmlinuz root=/dev/hda3 bootlevel=another1 softlevel=another2)

    有设置 bootlevel = xx,则以xx为启动级别。默认 boot

    设置 softlevel = xx,则以xx为默认级别,默认 default
  14. 获得关键服务列表, 这里的关键服务指的是 boot 级别的服务,默认为 checkroot modules checkfs localmount clock bootmisc
  15. 将 checkroot 和 modules 两个启动服务先启来。
    然后启动一些磁盘扩展设备程序
    启动在boot级别里,除checkroot和modules的其他服务
   
论坛首页 综合技术版 Linux

跳转论坛:
JavaEye推荐