Inside this Linux boot process

       

         linux 系统引导程序由几个部分组成。但是无论是x86 引导还是 嵌入式pc引导,他们的引导

流程都是非常相似的。这这篇文章介绍linux 引导程序从初始化到开启第一个用户空间应用。然后,在回顾每个开启细节,比如引导加载,内核解压,初始化ram磁盘,和一些其它的linu加载。

       

        早期的计算机引导是加载一些包涵引导程序的纸带,或者是通过加载一些包含引导程序的开关, 现在的计算机组成相对简单,但是这并不意味着他的引导程序也简单。

 

        先从比较复杂的引导程序开始,这样我们可以纵观整个加载程序细节,然后在回顾每个细节优化点,在从源码树去看,去探究每个点。

 

    图1,整个linux引导过程

      

          

        当系统第一次加载,或者重启的时候,系统会执行一段明确位置和功能的代码,在个人计算机当中这个位置在 BIOS,他是存储在主板上的一个闪存。中央处理器会重置向量痛开启一个程序在rom。无路时哪种方式,这些结果都是相同的,因为计算机是非常负责的,BIOS需要去选择适合设备的条件去加载,运行。稍后在看这些细节。

       

         主引导北找到以后,第一步先把这个引导加载到RAM里面去,然后执行,这个主引导有长度不超过512字节,然后开始加载第二步。

       

         当第二步引导开始执行的时候,通常会展示出来一个欢迎页面,这是linux会去初始化ram 内存去(一个临时的文件系统)加载到内存中去。然后,第二部引导程序开始加载内核镜像,解压,并初始化。正在这个阶段,引导程序还会去检测系统硬件,确认挂在设备列表,挂载设备,加载必须的内核模块。当这个阶段完成之后,第一个用户空间开始初始化,并且 high-level 系统被执行。

       

         这个linux引导是一个核心,下面开linux引导程序细节。

 

System startup

        

        系统开启取决于引导程序。在嵌入式平台中,当系统开始时(按下电源键,或者重启)开始调用引导程序。嵌入式平台通常都附带一个引导监视器,这个程序在硬盘的一个特殊的区域,并且提供下载linux内核镜像 加载到 闪存,随后执行它,这个程序有着存储,引导,和硬件的测试,这个引导监视器统称都会参与第一和第二阶段的程序引导。

    

        在PC中,引导程开始在地址0xFFFF0.第一步是BIOS自检,会执行硬件的检测,第二步会为本地的一些必要设备的初始化。

        

        通过功能将BIOS分为两部分:第一个部分是POST编码和运行时服务,当POST编码完成之后,将他刷新到内中去,但是BOIS运行时服务仍然保留对操作系统的引导。

        

        为了引导操作系统,这个BIOS运行服务会通过CMOS设置搜索一些引导设备,这些设备可以是软盘,CD-ROM,硬盘,网络,或者是USB闪存等。

 

        一般的Linux引导一般都在硬盘的上的MBR,MBR包好主引导程序。MBR有512字节,引导程序将他加载到RAM中,然后BIOS开始执行。

 

Stage 1 boot loader

 

        主引导保存在MBR中的512字节的镜像中,他包含主引导加载程序和分区表。前面446字节是主引导加载程序,包含执行代码和错误信息提示两部分。另外64字节是分区表,包含每一个分区记录大小(16字节)。MBR结束表示是有2个字节决定的作为magic number (0xAA55),他主要是几检测MBR的。

       MBR结构分析

    

    

     他主要的功能时要引导去加载二级引导加载程序.通过寻找所有分区中已经被激活的分区,当找到的时候,扫描剩下的分区表,确定它们时不活跃的。验证完毕,将引导记录从硬盘读取到内存中开始执行。

 

Stage 2 boot loader


    这个阶段的加载可以被称为内核加载,主要作用是去加载内核,并且选择初始化RAM.


    第一阶段和第二阶段加载程序合并被称为LILO,或者GRUB在x86PC环境中。由于LILO的一些缺陷在GRUB得到了改进,我们看GRUB就可以了。


    GRUB最大的优势在于他包含了Linux的文件系统。替代原始磁盘,GRUB可以从 ext2 或者 ext3加载Linux 内核。他通过2个阶段的加载程序到第三个阶段引导。阶段一(MBR),包含Linux内核镜像的特殊文件系统的一个阶段1.5的引导加载程序。当这个阶段的引导加载完毕并运行起来时,就可以加载第二阶段引导了。


    当第二阶段加载完毕,GRUB将展示出来一个linux列表(定义在/etc/grub.conf,关联到/etc/grub/menu)。可以选择一个内核或者通过一些其他的内核参数来改善他,也可以使用命令行shell来控制引导程序。


       当第二阶段加载到内存中时,文件系统已经可以查阅了。并默认的内核镜也已经准备完毕,第二阶段已经可以调用内核镜像了。


原文链接:http://www.ibm.com/developerworks/linux/library/l-linuxboot/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值