Chinaunix首页 | 论坛 | 博客
  • 博客访问: 464149
  • 博文数量: 104
  • 博客积分: 3455
  • 博客等级: 中校
  • 技术积分: 1216
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-18 18:33
文章分类

全部博文(104)

文章存档

2015年(3)

2014年(1)

2013年(7)

2012年(8)

2011年(11)

2010年(18)

2009年(56)

我的朋友

分类: LINUX

2009-01-30 18:09:02

总体上.我们可以把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源码分析
参考
阅读(3125) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-01-31 00:55:28

0面0磁头的所有扇区都是保留的,BIOS不会放置任何数据,第一分区从0面1磁头1扇区开始