|
发表于 2015-3-8 09:38:02
|
显示全部楼层
我曾经是开发者,但不是应用者,我对于 grub4dos 的应用,没有经验。尤其是到了后来,我身体不行了,因此,逐步放弃了开发,甚至也放弃了对新功能的了解和掌握。比如说,chenall 为 grub4dos 添加了变量的功能,也添加了批处理功能,这我都不曾应用过。
以下是仅仅凭借我以前所掌握的知识,使用较旧的功能,来试图满足你的要求。其实方法有很多,只要能够确定并区分出启动盘究竟是软盘还是硬盘,即可达到目的。当启动盘是软盘时,本地硬盘是 hd0,就不要动它了。当启动盘是 hd0 时,则需要把本地硬盘 hd1 仿真为虚拟硬盘 hd0。这算是一个总思路吧。刚才说了,下面只是一种具体的实现方法,其他方法也有很多种。
map --mem /konboot.img (fd0) 这条命令把启动盘上的 /konboot.img 文件仿真为 fd0。此时,我们不管、也不知道启动盘究竟是 fd0 还是 hd0。
map --hook 这条命令让仿真生效,因此,如果启动盘是 fd0,则真实的启动盘 fd0 将无法访问了,只有虚拟的软盘 fd0 才能被访问到。反之,如果启动盘是 hd0,则 hd0 仍可访问,它仍旧是启动盘。
chainloader (fd0)+1 不管三七二十一,现在先加载虚拟软盘的第一扇区到 0000:7C00 处,准备启动它。
ls /konboot.img && map (hd0) (hd1)
ls /konboot.img && map (hd1) (hd0)
ls /konboot.img && map --hook
ls 列出当前盘上的 /konboot.img 文件,如果能列出,则表明当前盘是 hd0, 即,它未被虚拟盘 fd0 覆盖掉。此时,执行交换 hd0 和 hd1 的命令,目的是保证本地硬盘 hd1 成为虚拟的 hd0, 让 konboot 软件能够正常操作本地硬盘, 而不是误把真实的 hd0 ( 它是 usb 启动盘 ) 当作本地硬盘。
反之,当 ls 列不出 /konboot.img 时,这表明启动盘是 fd0, 它已经被虚拟盘 fd0 覆盖掉了,所以找不到原来的 fd0 上的 /konboot.img 文件了。此时,本地硬盘是 hd0, 无需执行、也不应该再执行多余的交换硬盘的步骤。
rootnoverify (fd0) 这条命令是为 boot 命令服务的。boot 命令会把当前 root 盘的盘号赋值给 DL 寄存器,并把控制权交给位于 0000:7C00 的启动代码。
boot 既然一切准备就绪,现在可以启动了。 |
|