Username: Password:

linux 的启动过程
来源: ChinaUnix博客  作者: ChinaUnix博客   发布时间:2008-01-01 20:20:00


系统启动
1、系统加电
2、BIOS 自检 → 本地设备枚举和初始化
3、POST 代码从内存中清除,但运行时服务(runtime service)仍然留在内存。
4、BIOS 从 CMOS 的配置中找出第1/2/3 启动设备(可能有第4个),然后逐个尝试,
   并在第一个 ”active“状态的硬盘上读入其 MBR
第一阶段引导加载程式
1、MBR 实际上是由3个部分组成 :主引导加载程式(master bootloader code,446 字节)、主分区表  (ppt)、magic nubmer (0xAA55)组成
   主分区表有4个记录,对应主分区1-主分区4,共64 字节。最后的 magic number 是 2 字节
2、主引导加载程式搜索主分区表,扫描全部4个分区记录,确保只有1个是被标为”active“ 的(用 fdisk 能够配置某个分区为 active 分区)。
   然后读入该分区的引导扇区(前512 字节)。active 分区一般是 C 盘或 linux 的第一个分区
3、主引导加载程式的作用就是读入第2阶段的引导加载程式
第二阶段引导加载程式
1、第2阶段引导加载程式的目的是加载内核和 initrd 。GRUB 和 LILO 都是把 boot loader 程式分成两部分,一部分在 MBR ,一部分在”active" 分区的引导扇区
2、第2阶段引导加载程式被读入内存后,他读取 root() 命令给出的分区下的 grub/grub.conf ,显示一个菜单,供用户选择
3、GRUB 能够细分为3个阶段,中间的一个是 stage1.5 ,他跟在 stage1 的后面,目的是让 grub 能够识别文档系统的类型
内核
1、内核自解压
2、按照 bootloader 向他提供的 initrd 在内存中的地址,把 /dev/initrd 的内容拷贝到 /dev/ram ,并释放 /dev/initrd 所占用的内存
3、把 /dev/ram 按 rw 的模式挂载为初始根文档系统
4、执行其上面的 /linuxrc 或 /init 脚本,目的是加载驱动模块
5、在 /linuxrc 和 /init 脚本中,会有 pivot_root ()或 switchroot 把 /sysroot 下的真正根文档系统设备挂载到 / ,把初始根文档系统挂载到 /initrd 下
6、/linuxrc 和 /init 脚本的后面会 umount /initrd 下的初始根文档系统(即使没有完全卸载,也会在 /etc/rc.d/rc.sysinit 中把他们全部卸载)
7、接下来是启动 init 进程。在 2.4 内核中,这个步骤是由内核完成的。但在 2.6 内核中,这个步骤是由 /init 脚本完成的。
Init
1、init  首先执行 /etc/rc.d/rc.sysinit 进行系统的初始化
2、而 rc.sysint 会先执行 /etc/rc.d/init.d/functions ,获得一些有用的函数,例如 daemon()、action ()、success()、failure()等
3、按照默认运行级别或 grub 启动时的 kernel 行给出的运行级别运行 /etc/rcN.d/ 下的脚本,先执行 K 开头的(按从低到高),再执行S开头的(从低到高)
    这个过程“有可能”是通过执行 /etc/rc.d/rc 脚本实现的。因为 rc 脚本是为改变 runlevel 而做的,那么从关机(level 0)到 正常(level3/5)应该也算是
    一种特别的改变 runlevel 的情况吧
4、按照 /etc/inittab 的需要在指定的虚拟控制台上创建 mingetty 进程,提示输入用户名和密码
5、执行 login 命令,login 命令会做如下工作 :
    a)假如存在 ~/.hashlogin ,则以 "quiet" 的方式登录,不显示邮件、不打印 motd
            假如存在 /var/log/lastlog ,则打印最后登录时时间
    b)配置环境变量,包括 HOME、MAIL、PATH 、SHELL、TERM 等
         PATH 值默认是 /usr/local/bin:/bin:/usr/bin (对于普通用户而言),
           对于 root 而言,则是 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 。
     c)假如不是 quiet login ,则打印用户的邮件数量和 /etc/motd 文档)
     d)启动 login shell (默认是 /bin/sh),并执行 ~/.bashprofile
       e)~/.bashprofile 会自动执行 ~/.bashrc ,而 ~/.bashrc 又调用 /etc/bashrc


本文来自ChinaUnix博客,假如查看原文请点:http://blog.chinaunix.net/u2/61207/showart_522537.html

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅