chenall 发表于 2010-11-18 00:47:06

原帖由 zhaohj 于 2010-11-18 00:39 发表 http://bbs.wuyou.net/images/common/back.gif
如果批处理中有非法命令,也不会终止的。
ERROR27是系统错误

GRUB4DOS的批处理是碰到错误就退出的,你可以在批处理中进行调试看看是哪一句出现的问题。
比如先注释最后一句再看看是否同样的问题。如果是再注释倒数第二句。

ERROR 27,在check、find中比较容易出现,一般是命令写错。

或者批处理中有非法字符(ASCII 值小于0X20的),还有一个可能是该命令不允许在这个地方执行。

zhaohj 发表于 2010-11-18 00:49:39

我在批处理中每条命令后加 pause 查看过,都没有出现错误,但最后一条命令结束后,就出现上述错误。
批处理肯定没有问题,而且其他菜单中也使用过这个批处理也没有问题。

C大我在FTP中你下载测试一下,可能会发现这个隐藏的BUG

[ 本帖最后由 zhaohj 于 2010-11-18 00:57 编辑 ]

chenall 发表于 2010-11-18 16:22:32

我应该大概知道这个产生的原因了.

我先测试下再上传一个新的版本.

chenall 发表于 2010-11-18 17:03:04

新的版本已经上传,应该是修正了前面Error 27的bug.

另外新增加了一个内存变量在0000:8278处,以后可以通过这个变量来判断你菜单是否适用于该版本GRUB4DOS.
使用编译时的日期.比如今天上传的版本
read 0x8278 会显示0x132B7FE(20101118)

以下命令可用于检测是否20101118以后的版本.
checkrange 20101118:-1 read 0x8278

zhaohj 发表于 2010-11-18 17:11:02

哦,谢谢,马上测试 .................

-----------------------

测试汇报:全部通过!

无忧有你真精彩!

[ 本帖最后由 zhaohj 于 2010-11-18 17:19 编辑 ]

zhaohj 发表于 2010-11-20 00:27:40

批处理中“:”是注释,但最后的注释出现错误

tuxw 发表于 2010-11-20 09:39:25

这个问题貌似要在批处理最后必须有个换行,不然检测不到批处理结束

zhaohj 发表于 2010-11-20 09:49:10

是的,最后加换行OK !

2010lifefx 发表于 2010-11-21 03:07:00

这个是什么问题啊?



grub4dos 的版本 grub4dos-0.4.5b-2010-11-18.zip

zhaohj 发表于 2010-11-21 10:53:11

这是老问题了。
一方面DOS设备加载程序或驻留程序破坏了中断向量;
另一方面,可能也是最关键的是主板生产厂家的故意为之。BIOS陷阱。

2010lifefx 发表于 2010-11-22 10:52:24

我用的是Vbox虚拟机。开始的时候可以从DOS转回GRUB,我就是弄了个ISO/IMG可选的菜单然后就出这个问题了。

菜单如下。
#-------------------------------------------------------------------------------
title -- * 加载 img或iso \n注意使用xp镜像安装系统时 文本模式完成后还需使用一次本菜单 要在最后输入D从硬盘启动继续安装 (第一次为回车从镜像启动)
checkrange 0x9f read 0x8280 && command --set-path=(cd)/BOOT/GRUB
checkrange 0x23 read 0x8280 && command --set-path=(ud)/BOOT/GRUB
checkrange 0x21 read 0x8280 && pxe keep && command --set-path=(pd)/BOOT/GRUB
checkrange 0x80 read 0x8280 && map (hd0) (hd-1) && map (hd1) (hd0) && map --rehook
checkrange 0x80 read 0x8280 && root (hd-1,0) && command --set-path=(hd-1,0)/BOOT/GRUB
WENV reset && clear && echo \n请输入ISO/IMG文件路径及文件名 或者输入键入回车启动默认/ISO/winpe.ISO镜像文件\n
#WENV reset && clear && echo \nPlease input ISO/IMG PATH or press Enter to use /ISO/winpe.ISO as default.\n
WENV set path=$U,$input,这里输入以"/"开始的路径 :
WENV get path || clear && echo \n加载默认的/ISO/winpe.ISO文件 && WENV set path=/ISO/winpe.ISO
WENV check ${path:0:1}<>/ set path=/${path}
#checkrange 0x9f read 0x8280 && WENV set de=${path##/} && WENV check ${de#.}<>${de##.} set path=${path%/}/${de%%.}_${de#.}
WENV check ${path##.}<>ISO call find --set-root --ignore-floppies ${path} ]]| pause 文件没有找到,按任意键返回... ]]& configfile (md)4+1
WENV check ${path##.}<>ISO call clear ]]] echo \n加载 ${path} ...\n ]]] map --mem ${path} (fd0) ]]& map --hook ]]& rootnoverify (fd0) ]]& chainloader (fd0)+1 ]]& boot
checkrange 0x9f read 0x8280 && root (cd) || checkrange 0x80 read 0x8280 && root (hd-1,0) || checkrange 0x23 read 0x8280 && root (ud) || checkrange 0x21 read 0x8280 && pxe keep && root (pd)
map --mem ()/BOOT/IMGS/firadisk00124.img (fd1) || find --set-root --ignore-floppies /BOOT/IMGS/firadisk00124.img && map --mem ()/BOOT/IMGS/firadisk00124.img (fd1)
map --mem (md)0x6000+800 (fd0)
WENV check ${path##.}==ISO call find --set-root --ignore-floppies ${path} ]]| pause 文件没有找到,按任意键返回... ]]& configfile (md)4+1
WENV check ${path##.}==ISO call clear ]]] echo \n加载 ${path} ...\n ]]] map --mem ()${path} (0xff) ]]& map --hook ]]| map ()${path} (0xff) ]]& map --hook
dd if=(fd1) of=(fd0) count=1 && clear
echo \n输入D从硬盘启动继续安装系统 \n或者输入回车键引导这个ISO.\n
WENV set in=$U,$input,这里输入:
WENV check ${in}<>D call chainloader (0xff) && boot
find --set-root --ignore-floppies --ignore-cd /$LDR$ && cat --length=0 ()/WIN_NT$.~BT/SETUPLDR.BIN && chainloader --force /$LDR$ && boot
find --set-root --ignore-floppies --ignore-cd /$LDR$ && cat --length=0 ()/NTDETECT.COM && chainloader --force /$LDR$ && boot
find --set-root --ignore-floppies --ignore-cd /NTLDR && cat --length=0 ()/NTDETECT.COM && chainloader --force /NTLDR && boot
kernel || pause 文件没有找到,按任意键返回... && configfile (md)4+1

无从下手恢复 =。=

2010lifefx 发表于 2010-11-22 11:19:05

谢谢 zhaohj 大帅。
搞定。
我把虚拟机的系统类型调整了下就可以了。

换成windows系统类型就可以了。估计虚拟机类型是linux的时候对DOS支持不好。估计这应该不是grub4dos的问题。而是vBOX虚拟机的问题。

还有个问题顺便请教下。DOS 下启动GRUB的时候如何指定 menu.lst文件位置。百度了好久没找到。

我的引导顺序是这样的:

1、syslinux 初始引导
2、syslinux 菜单转入 GRUB4DOS
3、GRUB4DOS 菜单启动 U盘跟目录的 DOS(IO.SYS,MSDOS.SYS,COMMAND.COM 只有这3个文件的简单DOS系统)
4、然后到 /BOOT/GRUB/GRUB.EXE

第四步这里不知道如何指定 /MENU.LST 作为菜单文件。每次它都是 调用 /BOOT/GRUB/MENU.LST这个菜单文件。

方便的话请指点下,谢谢!

sratlf 发表于 2010-11-22 11:28:41

回复 2010lifefx 的帖子

关于那个菜单我后来又改动了几处可以去我的帖子看看

“第四步这里不知道如何指定 /MENU.LST 作为菜单文件。每次它都是 调用 /BOOT/GRUB/MENU.LST这个菜单文件。"

更改grub.exe内置菜单即可用修改grldr内置菜单的工具应该能改推荐fbinsttool

zhaohj 发表于 2010-11-22 12:22:15

改内置的麻烦,每次升级又得改,这样:

grub.exe--config-file="#@A:\MENU.LST"

2010lifefx 发表于 2010-11-22 18:56:10

回复 #103 sratlf 的帖子

谢谢,马上去找来看看。

2010lifefx 发表于 2010-11-22 19:17:19

太好了 谢谢 zhaohj元帅。

确实不喜欢内置。原因如同zhaohj元帅所说,每次升级都要改。

这个命令是可以用不过有点问题。Vbox虚拟机中测试,每次调用菜单都不完整总是少几行。
完整菜单如下:


不完整菜单1:

不完整菜单2:


不知道是不是BUG还是我哪里没弄好?

zhaohj 发表于 2010-11-22 22:49:50

你试一下英文版。
如果要中文支持,建议你使用g4d英文版+unifont (把菜单文件保存为utf-8格式)

另:g4d换一个版本再测试一下。

2010lifefx 发表于 2010-11-23 11:49:11

换了几个版本。英文版也试了下。都是这个样子。

最多16行菜单。再多就没有了

疑似BUG1.jpg

疑似BUG2.jpg

疑似BUG3.jpg

2010lifefx 发表于 2010-11-23 13:03:23

反复尝试启动了近百次 发现不完整的菜单只有两种,7行 16行。

1、syslinux启动
2、转入grub4dos菜单
3、菜单一 进入dos
   menu命令:
#-------------------------------------------------------------------------------
title -- * 查找装载DOS系统(IO.SYS of Windows 9x/Me)
fallback 3
find --set-root /io.sys
chainloader /io.sys
boot
#-------------------------------------------------------------------------------
4、grub.exe --config-file="c:\menu.lst" 回 grub4dos菜单
5、菜单一或者菜单三回到DOS
    菜单三命令:
#-------------------------------------------------------------------------------
title -- * 返回到DOS命令行(由DOS进入GRUB的返回)
quit
#-------------------------------------------------------------------------------

然后 4-->5-->4-->5 反复切换。菜单一直不完整。

chenall 发表于 2010-11-23 13:25:27

应该是你自己菜单的问题.

另外,你可以在GRUB4DOS环境下再次加载这个菜单看看.

至于BUG1.jpg
这个肯定是你自己的问题.要使用这个命令要求有一个DEFAULT文件
具体使用方法可以看README_GRUB4DOS.TXT文件
搜一下SAVEDEFAULT就可以看到了.

[ 本帖最后由 chenall 于 2010-11-23 13:28 编辑 ]

2010lifefx 发表于 2010-11-23 14:10:50

回复 #110 chenall 的帖子

谢谢 chenall上将

SAVEDEFAULT 的问题已经解决。貌似不同版本的GRUB4DOS的问题。搞定了(不用这个命令了,呵呵)
我直接把我的menu.lst贴上来吧。费事您下载。方便的时候帮忙看下。谢谢了。

#splashimage (hd0,0)/boot/grub/xpm/map.xmp.gz
#splashimage (hd0,0)/boot/grub/xpm/ibm5.xpm.gz
#splashimage (hd0,0)/boot/grub/xpm/ibm6.xpm.gz
#splashimage (hd0,0)/boot/grub/xpm/ibm7.xpm.gz
#splashimage (hd0,0)/boot/grub/xpm/back.xpm
#splashimage (hd0,0)/boot/grub/xpm/bj2008.xpm.gz
#gfxmenu (hd0,0)/boot/grub/xpm/message

/boot/grub/UNIFONT /boot/grub/wqy-microhei-lite_0_U16.bin
#/boot/grub/UNIFONT /boot/grub/U16.bin

#fontfile (hd0,0)/boot/grub/fonts
#偏重蓝色的图片就对应的使用蓝色系的字体颜色:
foreground ffffff
background 005090
#偏重灰色的图片就对应的使用灰色系的字体颜色:
#foreground c0c0c0
#background 808080
timeout 30
default 0

#-------------------------------------------------------------------------------
title         Grub4Dos 启动菜单 (数字选择菜单项 * 可用)
default 1
#-------------------------------------------------------------------------------
title -- * 查找装载DOS系统(IO.SYS of Windows 9x/Me)
fallback 3
find --set-root /io.sys
chainloader /io.sys
boot
#-------------------------------------------------------------------------------
title -- * 返回GRUB命令行模式
commandline
#-------------------------------------------------------------------------------
title -- * 返回到DOS命令行(由DOS进入GRUB的返回)
quit
#-------------------------------------------------------------------------------
title -- * MAXDOS8.IMG ghost11
find --set-root --ignore-floppies /boot/imgs/MAXDOS8.IMG
map --mem /boot/imgs/MAXDOS8.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
#-------------------------------------------------------------------------------
title -- * U盘UBUNTU104系统
#find --set-root /vmlinuz
# (hd0,0)第一个主分区 /dev/sda1 第一个主分区
root                (hd0,1)
kernel                /vmlinuz root=/dev/sda2 ro quiet splash
initrd                /initrd.img
quiet
#-------------------------------------------------------------------------------
title -- * UBUNTU10.04 安装盘启动
root (hd0,0)
kernel /linux/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-10.04.iso quiet splash ro locale=zh_CN.UTF-8 noprompt --
initrd /linux/initrd.lz
#-------------------------------------------------------------------------------
title -- * 转入SYSLINUX引导菜单
rootnoverify (hd0,0)
makeactive
chainloader +1
#-------------------------------------------------------------------------------
title -- * Win7PE
map --mem /boot/imgs/firadisk00124.img(fd1)
map --mem (md)0x6000+800 (fd0)
map --mem /ISO/Win7PE.iso (0xff)
map --hook
dd if=(fd1) of=(fd0) count=1
chainloader (0xff)
#-------------------------------------------------------------------------------
title -- * Win7PE_in
find --set-root /ISO/Win7PE_in.iso
map /ISO/Win7PE_in.iso (0xff)
map --hook
chainloader (0xff)
boot
#-------------------------------------------------------------------------------
title -- * WinXP SP3 原版
map --mem /boot/imgs/firadisk00124.img(fd1)
map --mem (md)0x6000+800 (fd0)
map --mem /ISO/WinSP3.iso (0xff)
map --hook
dd if=(fd1) of=(fd0) count=1
chainloader (0xff)
#-------------------------------------------------------------------------------
title -- * 加载IMG镜像文件
find --set-root --ignore-floppies /boot/imgs/MAXDOS8.IMG
map --mem /boot/imgs/MAXDOS8.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
#-------------------------------------------------------------------------------
title -- * 重新启动计算机
reboot
#-------------------------------------------------------------------------------
title -- * 关闭计算机
halt
#-------------------------------------------------------------------------------
title -- 深度技术 XP SP3 Ghost装机版 V9.0 2010年5月GHOST版
find --set-root /ISO/DEEPIN_GHOST_XPSP3_V9F_201005.iso
map /ISO/DEEPIN_GHOST_XPSP3_V9F_201005.iso (0xff)
map --hook
chainloader (0xff)
boot
#-------------------------------------------------------------------------------
title -- 深度技术XPSP3 完美精简版V6.2 2010年3月自定义安装版
map --mem /boot/imgs/firadisk00124.img(fd1)
map --mem (md)0x6000+800 (fd0)
map --mem /ISO/DEEPIN_201003.iso (0xff)
map --hook
dd if=(fd1) of=(fd0) count=1
chainloader (0xff)
#-------------------------------------------------------------------------------
title -- 加载ISO镜像文件\n 加载 Firadisk.img 文件用于windows系统ISO引导
map --mem /boot/imgs/firadisk00124.img(fd1)
map --mem (md)0x6000+800 (fd0)
map --mem /ISO/WIM_W7PE.iso (0xff)
map --hook
dd if=(fd1) of=(fd0) count=1
chainloader (0xff)
#-------------------------------------------------------------------------------
title -- 加载ISO镜像文件 \n 不装载Firadisk.img文件
#find --set-root /ISO/WIM_W7PE.iso
map /ISO/WIM_W7PE.iso (0xff)
map --hook
chainloader (0xff)
boot
#-------------------------------------------------------------------------------
title -- * 加载 img或iso \n注意使用xp镜像安装系统时 文本模式完成后还需使用一次本菜单 要在最后输入D从硬盘启动继续安装 (第一次为回车从镜像启动)
command --set-path=(bd)/BOOT/GRUB && checkrange 0x80 read 0x8280 && map (hd0) (hd-1) && map (hd1) (hd0) && map --rehook && root (hd-1,0)
WENV reset && clear && echo \n请输入ISO/IMG文件路径及文件名 或者输入键入回车启动默认/iso/winpe.iso镜像文件\n
#WENV reset && clear && echo \nPlease input ISO/IMG PATH or press Enter to use /iso/winpe.iso as default.\n
WENV set path=$U,$input,这里输入以"/"开始的路径 :
WENV get path || clear && echo \n使用默认的/iso/winpe.iso文件 && WENV set path=/iso/winpe.iso
WENV check ${path:0:1}<>/ set path=/${path}
#checkrange 0x9f:0xff read 0x8280 && WENV set de=${path##/} && WENV check ${de#.}<>${de##.} set path=${path%/}/${de%%.}_${de#.}
WENV check ${path##.}<>ISO call find --set-root --ignore-floppies ${path} ]]| pause 文件没有找到,按任意键返回... ]]& configfile (md)4+1
WENV check ${path##.}<>ISO call clear ]]] echo \n加载 ${path} ...\n ]]] map --mem ${path} (fd0) ]]& map --hook ]]& rootnoverify (fd0) ]]& chainloader (fd0)+1 ]]& boot
map --mem (bd)/BOOT/IMGS/FIRADISK00124.IMG (fd1) || map --mem (hd-1,0)/BOOT/IMGS/FIRADISK00124.IMG (fd1)
map --mem (md)0x6000+2880 (fd0)
dd if=(fd1) of=(fd0) count=1 && clear

WENV check ${path##.}==ISO call find --set-root --ignore-floppies ${path} ]]| pause 文件没有找到,按任意键返回... ]]& configfile (md)4+1
WENV check ${path##.}==ISO call clear ]]] echo \n加载 ${path} ...\n ]]] map --mem ()${path} (0xff) ]]& map --hook ]]| map ()${path} (0xff) ]]& map --hook
dd if=(fd1) of=(fd0) count=1 && clear
echo \n输入D从硬盘启动继续安装系统 \n或者输入回车键引导这个ISO.\n
WENV set in=$U,$input,这里输入:
WENV check ${in}<>D call chainloader (0xff) && boot
find --set-root --ignore-floppies --ignore-cd /$LDR$ && cat --length=0 ()/WIN_NT$.~BT/SETUPLDR.BIN && chainloader --force /$LDR$ && boot
find --set-root --ignore-floppies --ignore-cd /$LDR$ && cat --length=0 ()/NTDETECT.COM && chainloader --force /$LDR$ && boot
find --set-root --ignore-floppies --ignore-cd /NTLDR && cat --length=0 ()/NTDETECT.COM && chainloader --force /NTLDR && boot
kernel || pause 文件没有找到,按任意键返回... && configfile (md)4+1
#-------------------------------------------------------------------------------
title --------------------------------------------------------------------------
default 1

zhaohj 发表于 2010-11-23 15:12:47

1:路径及文件名都用大写;
2:
    timeout 30
    default 1
    #-------------------------------------------------------------------------------
    title         Grub4Dos 启动菜单 (数字选择菜单项 * 可用)
    clear
    包括下面最后一句
    title --------------------------------------------------------------------------
    clear
3:title
    configfile /XXX/YYY.LST

    相应地把这部分内容保存为/XXX/YYY.LST

这样菜单不会超过4K,grub.exe从命令行加载可能不能超过4K

[ 本帖最后由 zhaohj 于 2010-11-23 15:56 编辑 ]

chenall 发表于 2010-11-23 15:25:33

@2010lifefx
试了一下完全可以正常显示,

怀疑你是使用了内置菜单,内置菜单不可以超过4KB,后面的被截断了.所以才会显示不正常.

刚看了一下源码,应该是GRUB.EXE的限制.
从命令行加载的菜单相当于内置菜单,不可以超过4KB.

2010lifefx 发表于 2010-11-24 00:12:17

谢谢chenall  和 zhaohj  两位的热心帮助。下午反复尝试了几次 确实是 菜单太大的问题。也尝试了关于大小写的问题。没发现有影响。另外说明下,我一直是用外置菜单的直接启动菜单没问题。出问题的地方是通过菜单进入DOS 后用再通过命令行启动GRUB4DOS的时候菜单过大。这个问题算是搞明白了。

[ 本帖最后由 sratlf 于 2010-11-24 09:14 编辑 ]

zhaohj 发表于 2010-11-25 22:57:37

@chenall:
>>写文件完毕后的文件,如(fd1)/txtsetup.oem,启动PE用F6会出现txtsetup.oem最后一行没有闭合的情况。

详见:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&page=97#pid2094915

chenall 发表于 2010-11-27 17:27:58

原帖由 zhaohj 于 2010-11-25 22:57 发表 http://bbs.wuyou.net/images/common/back.gif
@chenall:
>>写文件完毕后的文件,如(fd1)/txtsetup.oem,启动PE用F6会出现txtsetup.oem最后一行没有闭合的情况。

详见:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&amp;page=97#pid2094915

重新传了一个,麻烦你再试一下。

tuxw 发表于 2010-11-28 14:50:51

@chenall
新版 call 内部命令调用方法导致管道问题

这样调用内部命令:builtin_cmd(NULL, arg, flags)
wenv call getmetry (hd0) | wenv set a=   # 失败

改回旧方法:builtin_cmd(arg, next_word_ex(arg, NULL, TRUNC), flags)
wenv call getmetry (hd0) | wenv set a=   # 成功

chenall 发表于 2010-11-28 18:06:14

嗯,试了一下我没有考虑周全,呵呵。

GRUB4DOS就不变动了,只要WENV使用旧的方法调用就可以了。

目前有两种调用方式,如果第一个参数为空就用新的调用(直接调用RUN_LINE函数),否则用旧的调用。
第一个参数是exec就调用外部命令。

新的调用方式可以在一些特殊的地方中使用。我在WENV DIR命令就使用了新的调用方法。

[ 本帖最后由 chenall 于 2010-11-28 18:26 编辑 ]

zhaohj 发表于 2010-11-28 23:36:43

wenv dir 初步测试,还有点问题,主要是有重复列表文件。等上班贴图。

zhaohj 发表于 2010-11-29 08:27:48

11-27版本grldr测试,115#问题依旧存在

[ 本帖最后由 zhaohj 于 2010-11-29 08:31 编辑 ]
页: 1 2 3 [4] 5 6 7 8 9 10 11 12 13
查看完整版本: GRUB4DOS更新建议、bug反馈专帖