- 论坛徽章:
- 0
|
Grub在linux启动中的行为__学习笔记
(学习:http://kylinfs.bokee.com/tb.b?diaryId=12791369 )
Grub的实质是一个mini os,它拥有shell,支持script,支持特定文件系统……grub由stage1 ,stage1-5,stage2以及/boot/grub目录下的诸多文件组成,其核心是stage2,主要功能在于完成操作系统的引导工作。
一.先介绍一下三个文件:
1) stage1的代码文件,是源码目录下stage1/stage1.S,汇编后便成了一个512字节的img,被写在硬盘的0面0道第1扇区,作为硬盘的主引导扇区。(这512字节还包括分区表DPT以及主引导扇区标志“55AA”)
2) stage1_5就是文件系统的支撑代码,根据/boot分区(或/boot所在分区)的具体文件系统类型而异,如:ext2分区的话就是e2fs_stage1_5。在stage1_5没有被加载以前,系统无法识别任何文件系统(但是可以读取磁盘指定扇区的内容)。
3) stage2是grub最核心的部分。它运行后,会把系统切入保护模式,设置好c运行环境然后寻找menulist,如果没有的话就执行一个shell,等待我们输入命令,并在执行boot命令以后就会把控制权转交出去。
二.下面叙述一下计算机启动简要流程:
1) PC上电后,就会执行BIOS的代码,BIOS将加载硬盘主引导扇区(0面0道第1扇区),总共512字节的二进制代码,这些代码就是stage1,然后BIOS将执行stage1。
2) stage1的工作是加载0面0道第2扇区上的512字节代码至0x8000,然后跳至0x8000执行。这512字节代码是start.S, 它的作用是作为stage1_5或者stage2的加载器。由于stage2功能强大,占用空间也大(约102kB),而stage1_5只有不到10kB很显然,把stage2作为文件放在/boot分区中,而先行加载 stage1_5来支持对/boot文件系统的识别是合理的选择。所以
3) 加载 stage1_5,(具体可能是e2fs_stage1_5)它位于0面0道第3扇区开始的十几个扇区内。stage1_5运行后,系统就可以识别/boot分区的文件了,所以:
4) 加载stage2并运行。此后grub会根据menulist或用户输入加载kernel,然后控制权就转到linux了
本文只讨论到这里,向kylinfs致敬。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/49775/showart_404201.html |
|