首页 > 系统服务 > 详细

linux启动流程

时间:2019-03-01 18:42:26      阅读:226      评论:0      收藏:0      [点我收藏+]

1BIOS启动

BIOSBasic Input /Output System,存储在ROM芯片。其中包括系统设置、终端服务程序、开机上电自检等。

1)开机上电自检(POST):Power-on self test,检测外围设备如(CPU、内存、显卡、键盘鼠标等)是否正常

2)查找启动装置如:光驱、软驱、硬盘、U盘等。

3)读取第一个装置中的MBR,然后运行里面的代码。

 

2MBR加载

MBR:主引导记录(Master Boot Record)的缩写。存储位置固定,它处于硬盘的0柱面、0磁头、1扇区。

MBR总共占用512字节,它由三个部分组成:主引导程序(Bootloader)、硬盘分区表DPTDisk Partition table)、结束标志(55AA当使用grubMBR(512字节处存储的即为为grub引导程序的stage1,所以加载MBR即加载grubstage1程序(此为安装grub引导程序时由grub设置,其它引导程序类似)。

  1主引导程序(Bootloader):LilogrubsyslinuxU-boot。目前Linux发行版主要使用的是grub

  2)硬盘分区表DPTDisk Partition table):每个分区是16个字节,最多有4个分区。

    分区表的具体含义如下:

    字节 含义

    00 分区是否可引导。 0,不可引导。80,可引导

    01-03 分区开始的CHS值(Head,Sector,Cylinder,Sector的高 位是Cylinder的第9,10位)

    04 分区类型 7,NTFS,C, FAT32,5,F 扩展分区等等

    05-07 分区结束的CHS值(Head,Sector,Cylinder,Sector的高 位是Cylinder的第9,10位)

    08-11 LBA方式下,相对的起始扇区号

    12-15 该分区拥有的扇区数量 (little endion)

 

3Grub引导过程:

Grub包含3部分

1stage1(上文提到过,存储在MBR中):

AMBR中存储的是stage1判断依据:stage1文件的大小也是512字节一个扇区那么大。 我们可以比较下MBR/boot/grub/stage1文件的内容,获取MBR方法比较简单,dd就可以了,如下:

dd if=/dev/sda of=mbr_0_512 bs=512 count=1

这样,我们就获得了磁盘的0柱面,0磁道 1扇区的内容,即MBR,存放在了mbr_0_512文件中比较stage1文件,其实这部分code部分是一样的,结论是/boot/grub/stage1文件和主引导记录MBRcode部分是相同的。事实上这份代码是从grub源代码的stage1/stage1.S汇编出来的。stage1.Sgrub的第一个文件编译后产生的代码,正好是512字节,放入1个扇区,即MBR中存放的是stage1

 

Bstage1作用:stage1这汇编出来的512个字节代码的作用是将0柱面、0磁道、2扇区的512字节copy0x8000处,这里的另一个512字节代码,是来自源码目录下 stage2/start.S 文件的,而start.S 的作用是作为 stage1.5或者 stage2(编译 grub 时指定)的总入口,它才是 stage1.5或者 stage2的真正加载器。总结起来就是 stage1加载 start2扇区的512字节),然后将执行权交给 start,由start 来加载 stage1.5或者stage2

stage1.S被放在00道的第1扇区,start.S被放在00道的第2扇区,而与boot分区相关的文件系统的xxfs_stage1_5被放在00道第3扇区开始的扇区里,其占据的扇区数目与该stage1_5文件的大小有关。而其余的stage1_5以及stage2都作为文件被存放在boot分区里。

 

2stage1_5: 识别文件系统和加载stage2

stage1_5.c:通过文件系统读取stage2,将其加载到0x8000,然后跳转到0x8200的地方开始stage2的代码执行(在此之前没有识别文件系统的能力,所以只能通过固定扇区加载程序,到此stage1_5有识别文件系统的能力,此后grub才有能力去访问/boot分区/boot/grub目录下的 stage2文件,将stage2载入内存并执行)。

3stage2: 解析grub.conf显示启动菜单,提供人机交互接口,加载kernel执行initrd初始化系统等。Initrd->/sbin/init(解析/etc/inittab文件)->rc.init->rc.local

 技术分享图片

 

至此linux系统启动全部完成,MBR分区硬盘分区表DPTDisk Partition table、grub.confinittab在其它文章介绍。

下面这段话是我从别处粘贴过来的,有兴趣可以研究一下。

因为BIOS很小,功能有限,为了完成加载操作系统的功能,就产生了mbr; bios检测到一个硬盘后,将硬盘的0柱面、0磁头、1扇区的内容经过简单判断后, 至内存中的指定位置,然后跳转至这个位置,开始从这个位置运行; MBR,全称为Master Boot Record,即硬盘的主引导记录。 为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序而言。 硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有 多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。 !!!!!!!!!!!!!!!!!!!!! 一般,会将mbr功能的引导代码与mbr扇区混淆; 其实,grub是直接写进mbr硬盘的主引导记录中的,计算机BIOS 在启动时,按照预定的方式,将mbr内的代码加载至内存指定位置, 然后跳转至那里,mbr的代码就开始运行了! 如果将grub写入mbr,bios就引导grub; 将winxp的引导代码写入mbr,bios就引导ntldr; 将dos的引导代码写入mbr,bios就引导dos; 总之,mbr是用来存放,由bios加载、运行的一小段代码; 代码的功能,由他们自己实现(如,在引导dos之前,先运行一个病毒, 这就是引导型病毒); dos下执行grub.exe,其实,就是由dos执行grub.exe来完成bios加载引导代码的功能, 实现引导的; 简单地说,grub.exe 是dos下的可执行程序,由dos运行; grub是引导代码,由bios加载至内存(指定位置)开始执行; 他们最终实现的功能是一样的(都是将引导代码加载至内存指定位置,并运行)。 另外,mbr是独立于操作系统的,地位与分区表同级,所以,格式化任何分区内都影响不到他, 包括ghost备份,还原。

linux启动流程

原文:https://www.cnblogs.com/wangliangblog/p/10458109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!