|
这一段时间一直在看关于系统引导方面的资料,基本上都把引导文件写入到mbr或pbr上,突然想能不能动态地选择分区的引导文件?
由于pbr上会有关于本分区的一些参数,所以先修改原引导文件的这部分数据为此分区的具体参数。下面具体说我在通过grub4dos引导四叶草时遇到的问题:
我是以fat32分区为例,四叶草引导时的pbr文件为boot1f32或boot1f32alt,我想通过chainloader命令来加载boot1f32,再修改其具体的bpb参数(偏移量为3-89),
1、通过write命令写吗?但这样写好麻烦(共要写87个字节!)
2、用dd命令,因为不能直接对磁盘中的文件进行写操作,便想到把boot1f32放到一个镜像文件中(boots.img),然后再用
map --mem /boots.img (fd0)
find --set-root /boot (boot为四叶草的启动文件)
dd if=%@root%+1 of=(fd0)/boot1f32 bs=1 count=87 seek=3 skip=3 (修改bpb参数)
chainloader (fd0)/boot1f32
rootnoverify %@root%
这样启动提示:分区表不能识别.....
经过实验,把镜像文件映射成硬盘模式,解决了这个问题,并启动成功,代码为:
map --mem /boots.img (hd9) (随便取的一个硬盘号)
find --set-root /boot (boot为四叶草的启动文件)
dd if=%@root%+1 of=(hd9,0)/boot1f32 bs=1 count=87 seek=3 skip=3 (修改bpb参数)
chainloader (hd9,0)/boot1f32
rootnoverify %@root%
问题:
chainloader 不是把boot1f32(大小为512字节)加载到0x7c00处吗?但从软盘加载启动时出错,而充硬盘加载时能成功启动?
执行chainloader命令时,它具体做了哪些操作?
对于以上的例子有没有更好的解决方法?比如,能不能不把boot1f32放入镜像文件中,再映射到内存中? |
|