- 论坛徽章:
- 0
|
总体上.我们可以把GRUB看成一个微型的OS,stage1.stage1.5可以看成一个引导程序,stage2看成一个OS.只不过这个OS是用来专门用来启动其他OS的
一.GRUB引导系统的两种方式 1,直接引导方式 GRUB同时支持linux,openbsd,freebsd,netbsd等系统 通常步骤如下: (1)通过'root'指令来设置GRUB的主设备指向操作系统映像文件所存储的地方 (2)通过'kernel'命令来载入该操作系统的核心映像.如需参数,在后面添加 (3)如果需要模块,通过'module'命令来加载模块 (4)运行命令'boot'启动系统 2,链式引导方式 如果你要启动一个不被GRUB直接支持的操作系统(例如:xp),可以通过链式引导启动一个操作系统.将 开机的指针直接指向装有该操作系统分区的bootsector(即该分区的第一扇区),使其激活. 主要步骤如下: (1)通过'rootnoverify'命令设置GRUB的主设备指向一个扇区(同'root'区别是不挂入分区) (2)通过'makeactive'命令来设置在扇区上的'active’标志位 (3)通过'chainloader' 命令来加载引导程序.'+1'表明GRUB需要从起始分区读一个扇区 (4)运行命令'boot'启动系统
二.GRUB引导操作系统的简要流程 (1)BIOS 执行INT 0x19,载MBR至0x7c00并跳转执行如果你安装GRUB到MBR,GRUB的安装程序会 把 Stage1(512B)拷贝到MBR.视Stage2的大小,安装程序会在Stage1中嵌入Stage1_5或者 Stage2的磁盘位置信息. (2)Stage1开始执行,它在进行直接加载Stage1_5或者Stage2并跳转执行.不论是哪种情况,这一步 的结果都是Stage2开始运行. (3)Stage2这个小型的操作系统终于开始正式运行了!它会把系统切入保护模式,设置好C运行环境 (主要是BSS).他会先找config文件(就是我们的menulist),如果没有的话就执行一个Shell, 等待我们输入命令.然后Grub的工作就是输入命令-解析命令-执行命令的循环,当然Stage2本身 是为加载其他操作系统而存在的,所以如果情况允许,在他执行Boot命令以后就会把控制权转交出去.
三,GRUB主要启动模块 Stage1 这是一个基本必须的用来启动GRUB的映像文件.通常,这个文件是被装载到MBR或者启动扇区所在 的分区.由于PC的启动扇区的大小为512字节,所以这个映像文件编译以后也必须为512字节.Stage1 的全部的工作是从本地磁盘把Stage 2或者Stage 1.5装载进来.由于对stage1大小的限制,它通 过分程序表的形式来编码Stage 2或者Stage 1.5的位置,所以在stage1是不能识别任何文件系统 Stage2 这是GRUB的核心映像.它几乎做了除启动它本身以外的所有事情.通常,它被存放为某一种文件系统下, 但并非是必须的. Stage1.5 做为stage1与stage2之间的桥梁,也就是说,stage1载入stage1.5,然后stage1.5载入stage2. stage1与stage1.5之间的区别是,前者是不识别任何文件系统的但后者识别文件系统(例如 'e2fs_stage1_5'识别ext2fs).所以你可以安全的移动stage2位置,即使是GRUB安装完以后. 注: 在我的系统中.stage1被安装到了mbr,也就是硬盘第一扇区,而stage1.5被安装到了mbr以后的扇区, 根据大小完全复制进去,并且stage1.5的类型为/boot分区的文件系统类型
附:MBR(Master Boot Record) 硬盘主引导分区硬盘的0柱面0磁头1扇区
0面0磁头的所有扇区都是保留的,BIOS不会放置任何数据,第一分区从0面1磁头1扇区开始MBR=Bootloader(446B) + Partition Table(64B) + Magic Number (2B 55AA) Bootloader 存放引导程序,如果安装GRUB到MBR,stage1将覆盖这个区域 Partition table为硬盘分区表,最多支持4个主分区 Magic number 为55AA ,标示该扇区为MBR.注: fdisk /mbr 这个命令不是恢复全部MBR,而是把前面446B的Bootloader换成原始的激活程序,如果
Partition Table有问题就没有用grub-install 是把已经安装的软件包中的一些文件复制到/boot/grub中;对于新安装GRUB软件包后,也是一个必经的过程安装GRUB到MBR
grub> root (hd0,1) (A)
root (hd0,1)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0) (B)
setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded. (C)
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (D) (hd0,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done. (E)
grub> quit
A:设置装有stage1,stage1.5.stage2的硬盘分区B:安装GRUB至MBR C:'embed'命令是嵌入stage1.5到硬盘MBR后的扇区上,这儿把stage1.5写入MBR后的15个扇区.扇区数目 根据stage1.5的大小而不同D:安装stage1到MBR上E:'p'告知GRUB,stage2和menu.lst的位置
GRUB源码分析
参考
http://www.linuxsir.org/bbs/showthread.php?t=170348
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/91603/showart_1809025.html |
|