个人 企业
用户名:
密码:
 
企业服务   安全学院   安全资讯
安全动态  |  前沿技术  |  黑客防范安全漏洞防毒杀毒编程技术安全案例 |  电子政务产品推荐网管技术安全采购产品测评在线代理OICQ
检测评估安全学院软件下载互动交流安全沙龙应急咨询技术认证安全人才技术社区嘉宾聊天安全调查文章评论服务专线BLOG
  资讯 频道 技术    

一分钟注册享受免费网站安全评估

新闻热点

美国谋划夺取全球“制网权”
攻击指定IP地址及端口的黑客病毒
“黑客”三天侵吞21万获刑11年
微软浏览器IE7被发现存在两个漏洞
黑客入侵万达广场网站 提醒修复漏洞

软件热点
完美卸载V2007 完整版
防黑菜鸟必学系列视频教程
c语言视频教学30讲第14讲
黑客攻防绝招之三十六计
redhatlinux9安装的全程录像
IIS6最佳安全性实战
 
 
解Linux操作系统的引导过程
时间:2007-6-21 10:31:30 作者:  出处:网络

1.简介

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

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

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

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

无论是哪种系统,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好人啊!

3.第一阶段引导程序

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

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

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

4.第二阶段引导程序

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

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

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

5.内核启动过程

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

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

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

 

评论 | 收藏 | | 打印 | 关闭
相关新闻链接
     
关于Sec120 | 服务产品 | 联系我们 | 招贤纳才 | 广告服务 | 网站律师 | 网站地图 | 我要投稿

 

互联安全网  粤ICP备06118359 Copyright 1999-2007 All Right Reserved.