注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

deisp的博客

 
 
 

日志

 
 

[笔记] Linux 的启动流程 - 安装启动 - 文档专区 - Linux论坛  

2008-07-21 19:02:43|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |



系统启动
1系统加电
2BIOS 自检 本地设备枚举和初始化
3POST 代码从内存中清除,但运行时服务(runtime service)仍然留在内存
4BIOS 从 CMOS 的设置中找出第1/2/3 启动设备(可能有第4个),然后逐个尝试, 并在第一个 active状态的硬盘上读入其 MBR

第一阶段引导加载程序
1MBR 实际上是由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
2              如果Boot-Loader安装在MBR中,启动过程将不会涉及到Active分区的第一个扇区,也就是说MBR的引导程序(stage1)会直接加载stage2(或是stage1.5,grub有此阶段),而stage2是存放在某个分区中的文件,lilo应该是boot.b, grub是stage1.5和stage2,在安装boot-loader的时候,这些文件的位置会被记录在stage1中在这种情况下,即使没有一个分区是Active的,系统也可以引导
3              如果Boot-loader安装在Active分区的第一个扇区,MBR仍然会有一小段引导程序,用于加载被安装在Active分区第一个扇区的Boot-loader Stage1. 后面的过程是一致的,即stage1加载stage1.5或stage2.


内核

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

1init  首先执行 /etc/rc.d/rc.sysinit 进行系统的初始化

2init 会 /etc/rc.d/init.d/functions 获得一些重要参数

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)先进行 PAM 方面的检查,包括 securettynologin 等

b)如果存在 ~/.hashlogin ,则以 "quiet" 的方式登录,不显示邮件不打印 motd

            如果存在 /var/log/lastlog ,则打印最后登录时时间

    c)设置环境变量,包括 HOMEMAILPATH SHELLTERM 等

         PATH 值默认是 /usr/local/bin:/bin:/usr/bin (对于普通用户而言),
           对于 root 而言,则是 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
     d)如果不是 quiet login ,则打印用户的邮件数量和 /etc/motd 文件)
     e)启动 login shell (默认是 /bin/sh),并执行 ~/.bashprofile
     f)~/.bashprofile 会自动执行 ~/.bashrc ,而 ~/.bashrc 又调用 /etc/bashrc


Linux2.4内核对 Initrd 的处理流程
1. boot loader把内核以及/dev/initrd的内容加载到内存,/dev/initrd是由boot loader初始化的设备,存储着initrd
2. 在内核初始化过程中,内核把 /dev/initrd 设备的内容解压缩并拷贝到 /dev/ram0 设备上
3. 内核以可读写的方式把 /dev/ram0 设备挂载为原始的根文件系统
4. 如果 /dev/ram0 被指定为真正的根文件系统,那么内核跳至最后一步正常启动
5. 执行 initrd 上的 /linuxrc 文件,linuxrc 通常是一个脚本文件,负责加载内核访问根文件系统必须的驱动, 以及加载根文件系统
6. /linuxrc 执行完毕,真正的根文件系统被挂载
7. 如果真正的根文件系统存在 /initrd 目录,那么 /dev/ram0 将从 / 移动到 /initrd否则如果 /initrd 目录不存在, /dev/ram0 将被卸载
8. 在真正的根文件系统上进行正常启动过程 ,执行 /sbin/init linux2.4 内核的 initrd 的执行是作为内核启动的一个中间阶段,也就是说 initrd 的 /linuxrc 执行以后,内核会继续执行初始化代码,我们后面会看到这是 linux2.4 内核同 2.6 内核的 initrd 处理流程的一个显著区别

Linux2.6 内核对 Initrd 的处理流程

linux2.6 内核支持两种格式的 initrd,一种是前面第 3 部分介绍的 linux2.4 内核那种传统格式的文件系统镜像-image-initrd,它的制作方法同 Linux2.4 内核的 initrd 一样,其核心文件就是 /linuxrc另外一种格式的 initrd 是 cpio 格式的,这种格式的 initrd 从 linux2.5 起开始引入,使用 cpio 工具生成,其核心文件不再是 /linuxrc,而是 /init,本文将这种 initrd 称为 cpio-initrd
1. boot loader 把内核以及 initrd 文件加载到内存的特定位置
2. 内核判断initrd的文件格式,如果是cpio格式
3. 将initrd的内容释放到rootfs中
4. 执行initrd中的/init文件,执行到这一点,内核的工作全部结束,完全交给/init文件处理也就是说内核不再自己亲自执行 /sbin/init ,而是交给 /init 脚本


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12066/showart_484392.html




__________________________________



I hear Jerusalem bells a ringing  
Roman Cavalry choirs are singing  
Be my mirror my sword and shield  
My missionaries in a foreign field  
For some reason I can't explain  
Once you go there was never, never an honest world  
That was when I ruled the world  






Processed in 0.297999 second(s), 9 queries , Gzip enabled



引文来源  [笔记] Linux 的启动流程 - 安装启动 - 文档专区 - Linux论坛

----------------------------
一键转贴,快速捕捉生活精彩,赢每周好礼!查看活动首页>>

  评论这张
 
阅读(114)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017