orange's学习--第十一章:使用grub多操作系统引导

将引导扇区安装到Orange'S分区的引导扇区,而不是整块硬盘的引导扇区,这样Orange'S就可以跟硬盘上其他操作系统和平共处了。做到这一点其实很容易,只需要安装一个grub就可以了。

我们先将引导扇区装到Orange'S分区(硬盘的一个逻辑分区)的引导扇区:

dd if=boot/hdboot.bin of=$img_file seek=`echo "obase=10;ibase=16;\`egrep -e '^ROOT_BASE' boot/include/load.inc | sed -e 's/.*0x//g'\`*200" | bc` bs=1 count=446 conv=notrunc
dd if=boot/hdboot.bin of=$img_file seek=`echo "obase=10;ibase=16;\`egrep -e '^ROOT_BASE' boot/include/load.inc | sed -e 's/.*0x//g'\`*200+1FE" | bc` skip=510 bs=1 count=2 conv=notrunc


把grub写入整块硬盘的引导扇区,也就是说,我们并没有完全安装grub,只是使用它的stage1和stage2,有了它们,多重引导就可以实现了。

dd if=$stage1 of=$img_file bs=1 count=446 conv=notrunc
dd if=$stage2 of=$img_file bs=512 seek=1 conv=notrunc

orange's学习--第十一章:使用grub多操作系统引导_第1张图片

安装了grub的stage1和stage2之后,启动时会出现grub提示符,这时我们输入三个命令:
grub> rootnoverify (hd0,4)
grub> chainloader +1
grub> boot

boot之后敲一个回车,我们的OS就启动起来了,很容易不是吗?
下面简单介绍一下grub中输入的三个命令的意义。
“rootnoverify”意为将指定分区作为根分区,但不试图挂载(mount)它。我们知道,grub可以用来启动Linux,并且可以指定启动哪个内核,要做到这一点,grub显然应该是可以识别存放内核文件的文件系统的。这就是root命令试图去挂载文件系统的原因。然而,grub并不认识我们的文件系统──至少目前如此,所以我们用一个rootnoverify来告诉grub,不要试图挂载它,只需要将分区作为根就好了。需要注意一点,grub对硬盘分区的编号跟Linux下的规则有所不同,它是从零开始编号的。hd[0,1,2,3]表示四个主分区,hd4表示第一个逻辑分区──这正是我们的根分区。
“chainloader+1”会把刚刚指定的根分区的引导扇区加载到0x7c00处,也就是说,这一命令完成了之前BIOS完成的工作。
“boot”的作用显而易见,它将控制权交给刚刚读入的引导扇区,于是系统就归我们管了。

 

你可能感兴趣的:(orang's,于渊著)