it167.com  设为主页
 收藏本站
 
  资讯:业界动态 | 软件动态 | 人物专栏 | 安全资讯 | 网络生活 | 电子商务 | 小游戏 | 视频 | 美女图片 | 音乐
  网络编程 | 网站运营 | 网页制作 | 图形图象 | 操作系统 | 媒体动画 | 软件教学 | 网络应用 | 邮件系统 | 网络安全 | 认证考试
asp | .net | php | jsp | Sql | java | Dreamweaver | FrontPages | Javascript | css | Coreldraw | photoshop | Flash | Coreldraw
当前位置: > 主页>操作系统>linux >了解Linux操作系统的引导过程
最新新闻

·机会与整合 边缘化互联
·TOM-Skype新增三大本地
·雅虎抢闸邮箱竞赛 网易
·新浪抢攻北京奥运
·洞悉网络口碑的掘金机会
·拆解网络病毒黑金交易
·木马下载器近期出现新变
·《互联网周刊》第17期文
·Web2.0是否催生自吹自擂
·三张宝宝裸照招来MSN封
热门新闻
·如何让您的Linux操作系
·怎样用Netfilter/IPtabl
·为Linux系统蒙上Windows
·监控和保护Linux系统下
·解读Linux系统文件权限
·Linux的权限和所有权模
·新手看招 Unix和Linux下
·实用技巧 防止系统进程
·Linux手册——基本命令
·Ubuntu Linux中自带的程
推荐新闻
 
 

了解Linux操作系统的引导过程  

作者:   来源:   点击:   日期:2007-01-01

Linux启动过程指的是从加电到看到shell提示的这一段时间。

Linux启动的过程可以大概分为几个个阶段,具体划分为几个阶段则依靠具体的系统实现。一般来说,基于X86架构的系统可以分为3个阶段;一些嵌入式的系统有的分为两个阶段,有的分为3个阶段。

很多介绍linux系统启动的文章对细节部分都描述的不清楚,那就让我来详细的说一下吧,如果由错误,请多包含了:)

1.启动过程之上电与加载引导程序

无论是哪种系统,linux启动的第一阶段总是CPU上电初始化的阶段。

CPU在上电之后首先是自检的过程,当这个过程完成之后,CPU就会跳转到一个固定的地址,从这个地址开始执行代码。这个固定的地址根据CPU的不同而不同,比如PC中的这个地址是0XFFFF0。而这个固定的地址通常是一些只读的或者可读写的闪存,CPU通过总线和这些闪存连接,并能够通过寻址机制找到这些闪存的地址。

在普通PC中,BIOS系统是一个‘加载第一个引导程序’的系统,PC的CPU上电后执行的第一行代码总是BIOS中的闪存所保存的代码,这段代码可以看作是一个启动环境,它完成的工作有两部分:基本硬件加电检测与本地设备的枚举与初始化。当完成加电检测后,这段BIOS代码(完成加电检测的代码)会被从内存中清除,但是BIOS的系统运行时服务代码开始运行,这段代码检测CMOS的配置,其实也就是看看用户配置的从哪个设备启动,当BIOS的运行时服务代码找到用户配置的启动设备后,就从此设备中将第一个引导程序的代码拷贝到RAM中,至此,BIOS的任务顺利完成。剩下的事情交给‘第一个引导程序’来继续吧。需要注意的是这个所谓的‘第一个引导程序‘肯定保存在用户选择的设备中,并且BIOS的运行时服务代码知道这个引导程序保存的地址,要不怎么把它搞到RAM中去啊?

而在嵌入式系统中可能没有BIOS这样的系统,但是肯定也有一块类似的闪存/ROM,CPU可以从这个ROM的地址上开始执行代码,而这段代码肯定是一个启动环境,也就是一段特殊的程序了,比如U-BOOT什么的。这段程序肯定保存在闪存的固定位置,要不您让CPU怎么找?这段程序干什么呢?它们提供了将Linux系统映象下载到闪存并继续执行的方法,除了可以存储并引导Linux映象之外,这些程序还可能执行一定级别的系统测试和硬件初始化过程。嵌入式系统的这段启动环境代码就类似与PC中的‘第一个引导程序’代码,也就是和硬盘MBR中包含的主引导程序类似。

在PC Linux启动中,当BIOS发现是由硬盘引导系统后,就找到此硬盘的MBR,将MBR中保存的引导程序加载到RAM中,然后将CPU的控制权交给MBR中的这段代码,BIOS的任务到此算是全部完成了。所以说,BIOS从上电到现在忙活了大半天,主要目的就是为了找到引导设备,并将引导设备的引导程序加载到RAM中来运行。BIOS好人啊!

2.第一阶段引导程序

MBR中的代码就是所谓的‘第一阶段引导程序’。

它分为三个部分,第一部分是真正的代码,即BootLoader代码部分,就是一段可执行的代码;第二部分是一个64字节的分区表,包含四个分区记录;第三部分是结束标识符(0XAA55),用来做MBR的有效性检测。

‘第一阶段引导程序’的作用是查找并加载‘第二阶段引导程序’。它通过在分区表中查找一个活动分区来实现此功能。在MBR的第二部分所标识的四个分区中,只有一个是活动分区,通常这个活动分区记录包含了真正分区的信息,Bootloader通过这个信息找到真正的分区,然后从这个分区将‘第二阶段引导程序’加载进RAM中。

3.第二阶段引导程序

第二阶段引导程序可以认为是引导过程的最后一步了,它的核心任务就是加载Linux内核与可选的初始化RAM盘。

在PC环境中,现在通常使用grub来实现引导程序。Grub相对应lilo来说一个最大的优点就是grub可以识别硬盘分区。其实在第一阶段引导程序加载第二阶段引导程序之前,第一阶段引导程序会先引导一个第1。5阶段引导程序进入RAM执行,这段代码可以理解为包含linux系统映象的特殊文件系统,当此引导程序运行后,就会加载第二阶段引导程序了。第二阶段引导程序主要是grub的工作,就是使用我们事先配置好的grub来加载相应的内核映象与初始化RAM盘到内存中。

当内核影响与初始化RAM盘加载成功后,第二阶段引导程序的任务也就胜利完成了,剩下的活都交给内核映象吧。

4.内核启动过程

当第二阶段引导程序完成任务,内核映象取得CPU控制权后,内核的旅程就开始了,终于等到这一天了!

可惜,此时的内核映象并不是一个可执行的程序,而是一个压缩过的程序,使用zlib压缩而成。其实此内核映象包括两个部分,最前端的部分是一小段的可执行代码,后面才是真正的内核映象。前端部分的主要工作是初始化少量的硬件设置,然后解压缩内核映象并将解压缩后的内核放入高端内存中。此时如果发现由初始化RAM盘,则将其移入内存中,暂时不用。然后,解压缩后的内核取得了CPU的控制权,内核开始行动了!

内核启动后,首先对页表进行初始化,并启动内存分页功能,然后检测CPU类型,然后调用start_kernel()函数,进入与体系无关的初始化部分,包括内存配置,加载初始化RAM盘,最后启动init函数,至此内核启动阶段就结束了。



文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·Linux操作系统中RPM命令参数的使用详解 ·下载工具介绍 aMule在Linux系统中安装
·Linux基础知识普及 理解GNU/Linux含义 ·Ubuntu从硬盘启动安装 及相关下载
·Linux操作系统指令:排序分类命令Sort ·NTP时间服务器安装学习笔记

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:it167  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。