无忧启动论坛

标题: 用最新版grub及wenv修改ntboot引导VHD时的错误 [打印本页]

作者: xiaoy    时间: 2011-1-13 11:46
标题: 用最新版grub及wenv修改ntboot引导VHD时的错误
因要整合部分功能,需用到新版的Grub及11.29版的wenv
所以一直想把C大的ntboot.img 中引导VHD的部分升级一下
现修改菜单如下
debug off
command --set-path=(fd0)/grub/
fontfile (fd0)/grub/fonts
default 0
timeout 3
menuset 15 15 15 15 15 21 20 40 5 3 10
insmod (fd0)/grub/WENV
wenv set win7dir=win7
wenv set default=win7

title 启动您的Win7VHD系统 \n\t请输入您的系统名称。
wenv set name=$input,请输入您的系统名称(直接回车启动公用版本):
wenv get name || wenv set name=${default}
wenv set tmp=/${win7dir}/${name}.vhd
wenv call find --set-root --devices=h ${tmp} || fallback --go 3
write --offset=0x4E74 (fd0)/boot/bcd b
wenv get tmp=0x600000
cat --locate=\\x2F --replace=\\x5C (md)0x3000+3
wenv call write --offset=0x7D72 (fd0)/boot/bcd *0x600000$
wenv call write --offset=0x82EA (fd0)/boot/bcd *0x600000$
WENV calc cur_drv=*0x82A0 & 127
WENV calc cur_pri=*0x829C>>16 & 65535
wenv call pause --wait=1 正在启动${name}的Win7VHD系统. .
write 0x60000 0
WENV calc cur_drv=*0x82A0 & 127
wenv call dd if=(hd${cur_drv})+1 of=(md) bs=1 count=4 skip=0x1b8 seek=0x60000
cat --length=0 ()-1
dd if=(md) of=(md) bs=1 count=8 skip=0x8290 seek=0x60008
cat --locate=\x2E\xB5\x41\x7D --replace=*0x60000 (fd0)/boot/bcd
cat --locate=\0\x7E\0\0 --replace=*0x60008 (fd0)/boot/bcd
pause
chainloader (fd0)/boot/bootmgr
boot

老是引导不成功
测试如图


C大原版的调试图为


两图中不同部分可能与这
wenv get tmp=0x600000
cat --locate=\\x2F --replace=\\x5C (md)0x3000+3
wenv call write --offset=0x7D72 (fd0)/boot/bcd *0x600000
三句有关 ,但不知如何修改 麻烦各位大大帮忙

[ 本帖最后由 xiaoy 于 2011-1-13 21:02 编辑 ]
作者: zxw    时间: 2011-1-15 00:20
恭喜恭喜,楼主又有心得了。
作者: chenall    时间: 2011-1-15 10:10
你可以对比一下写入的内容。。。
在write命令之前显示一下写入的内容,看看有没有什么区别。

以前的NTBOOT有些复杂。近期有空准备改成新版的批处理方式。

[ 本帖最后由 chenall 于 2011-1-15 10:12 编辑 ]
作者: xiaoy    时间: 2011-1-15 13:19
已经解决了 就上面的代码可以正常启动了 少了个$造成的错误




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3