无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: zhaohj
打印 上一主题 下一主题

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
2281#
发表于 2012-1-11 17:36:24 | 只看该作者

回复 #2284 幸运的草 的帖子

除非是进行数值大小比较  否则都是建议加上引号
回复

使用道具 举报

2282#
发表于 2012-1-11 17:39:02 | 只看该作者

回复 #2284 幸运的草 的帖子

基本上就是这样。

一般情况下,对于字符串比较建议加引号或添加前置符号(防空和CMD的批处理一样)
比如以下比较,如果P1或P2有一个变量未设置则很可能出错

if %p1%==%p2% echo abcd

防空就是当变量未设置或该变量为空也可以使程序正常使用
比如以下的语法
if #%p1%==#%p2% echo abcd

if "%p1%"=="%p2%" echo abcd
回复

使用道具 举报

2283#
发表于 2012-1-11 17:40:34 | 只看该作者

回复 #2278 mygamexxx 的帖子

前面的问题是因为程序把它处理成数字所以比较的结果就。。。。。
回复

使用道具 举报

2284#
发表于 2012-1-12 21:39:05 | 只看该作者

出现fd0,0究竟如何处理?

我现在用如下代码来处理出现fd0,0:
#置可见区识别为fd0,0标志(变量fd0=1)
if %?_BOOT%==(ud) checkrange 0 read 0x8280 && set fd0=1
#修正映射fd0,0
if %fd0%==1 map (fd0) (hd0) && map (hd0) (hd)
if %fd0%==1 map --hook && rootnoverify (hd0,0)
.........
虽然启动PE已经没有问题了,但DOS工具又出问题了,U盘指示灯狂闪,死机,热启动无效。用run工具也出现一样的情况。

又仔细试验了一下,发现无论是否运行以上交换代码,均不能启动DOS工具,但用如下办法就可以成功:

title DOS分区克隆工具(驱动USB/SCSI/1394/CDROM并克隆)
map --mem /BOOT/IMGS/GRGHOST.IMG (fd1)
map --hook
map (fd0) (fd1)
map (fd1) (fd0)
map --hook
rootnoverify (fd0)
chainloader +1

即先将IMG文件映射到fd1,再用MAP交换到fd0启动就成功了。不知这个问题是什么时候引入的?

实际上DOS工具失败主要就在map --mem /BOOT/IMGS/GRGHOST.IMG (fd0)上,以前的版本好象没有这个问题。我现在用的是30号的版本。

[ 本帖最后由 hhh333 于 2012-1-12 22:11 编辑 ]
回复

使用道具 举报

2285#
发表于 2012-1-12 22:41:11 | 只看该作者
我也遇到了map --mem 到 fd0的问题
回复

使用道具 举报

2286#
发表于 2012-1-12 22:46:56 | 只看该作者
虚拟机没问题, 实机map后无错误提示,就是map不成功
回复

使用道具 举报

2287#
发表于 2012-1-12 22:52:47 | 只看该作者
但用pe区的资源管理器可运行img文件
回复

使用道具 举报

2288#
发表于 2012-1-12 23:26:25 | 只看该作者
现在究竟有不有检测是否出现fd0,0的方法?
用if %?_BOOT%==(ud) checkrange 0 read 0x8280 && set fd0=1
只有在menu.lst位于可见区有效。

真的感觉到这个fd0,0确实麻烦得很!!这个究竟是如何产生的?是不是fbinst有bug?这种情况的出现使UD的应用大打折扣!

[ 本帖最后由 hhh333 于 2012-1-12 23:29 编辑 ]
回复

使用道具 举报

2289#
发表于 2012-1-13 08:29:25 | 只看该作者
我用if exist (fd0)/fb.cfg来判断
回复

使用道具 举报

2290#
发表于 2012-1-13 09:10:07 | 只看该作者
现在没办法了,也不好判断,干脆将IMG先映射到fd1,再交换到fd0,不管是否出现fd0,0均这样处理。
回复

使用道具 举报

2291#
发表于 2012-1-13 09:11:56 | 只看该作者

回复 #2293 mygamexxx 的帖子

这个不靠普吧,可见区是fd0,何况UD区可能都没这个文件。
回复

使用道具 举报

2292#
发表于 2012-1-13 14:55:38 | 只看该作者
原帖由 hhh333 于 2012-1-13 09:11 发表
这个不靠普吧,可见区是fd0,何况UD区可能都没这个文件。

没有fb.cfg 文件的ud 用途不大

也可以判断fd0的磁盘签名是不是 fbbf
回复

使用道具 举报

2293#
发表于 2012-1-13 16:39:39 | 只看该作者
新的电脑应该都没有这些问题。

新的电脑一般都可以设置为USB-HDD模式的。

旧的主板因为BIOS识别方式不一样结果就很乱,如果不要(fd0,0)可能你根本就没有办法访问你的U盘。

出现(fd0,0)的可以试试把BPB复制到MBR上,看看是否可以识别为(fd0)
回复

使用道具 举报

2294#
发表于 2012-1-13 21:36:56 | 只看该作者

回复 #2297 chenall 的帖子

这个看怎么讲,譬如我这个NF3的机子,如果用U+为syslinux作一启则没有问题,再转g4d也没有问题,识别为hd0,3。这个说明应该是fbinst引入的一个问题吧?

看来UD启动方式并不十分完美。做维护真还得多准备几个U盘再加一个CD。

[ 本帖最后由 hhh333 于 2012-1-14 10:00 编辑 ]
回复

使用道具 举报

2295#
发表于 2012-1-14 11:01:35 | 只看该作者

回复 #2296 jianliulin 的帖子

那我就试一试这个办法吧。是if exist (fd0)/fb.cfg还是if exist (fd0,0)/fb.cfg?
回复

使用道具 举报

2296#
发表于 2012-1-14 11:09:03 | 只看该作者
另外想请教老大们一个问题:
默认菜单第2行为configfile,为什么不是configfile /menu.lst || configfile /MENU.LST
我觉得后一种方式更快捷,表示默认从当前盘装菜单,如果失败再进到查找项,这样也不会出现那个菜单晃一下,具体如下,不知可否,望定夺:
  1. pxe detect
  2. configfile /menu.lst || configfile /MENU.LST || configfile
  3. default 0
  4. timeout 1
  5. title find /menu.lst, /boot/grub/menu.lst, /grub/menu.lst
  6. errorcheck off
  7. configfile /boot/grub/menu.lst
  8. configfile /grub/menu.lst
  9. if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff
  10. if "%@root:~1,1%"=="f" && find --set-root --devices=f /menu.lst && configfile /menu.lst
  11. find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
  12. find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
  13. find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
  14. errorcheck on
  15. commandline
  16. title commandline
  17. commandline
  18. title reboot
  19. reboot
  20. title halt
  21. halt
复制代码
一般90%以上的情况是从当前盘启动的,这样改动后总是只执行前2行,菜单效率应该更高。(另外,我也不清楚,现在最新版是不是在各种设备上均是大小写不敏感的,如果是,上面还可以简单一点;再另外上面“ || configfile”部分应该也没什么用吧?)

[ 本帖最后由 hhh333 于 2012-1-14 11:30 编辑 ]
回复

使用道具 举报

2297#
发表于 2012-1-15 20:18:07 | 只看该作者

用了 hiddenmenu --chkpass 后 password * configfile 不能用

我用的 20111230 版。想用 hiddenmenu --chkpass 自定义键后输密码跳转到另一个菜单文件,总提示 auth failed! Press any key to continue... 比如两个菜单如下

====== menu.lst starts ========
password a menu2.lst
hiddenmenu  --chkpass
timeout 10

title Restricted Menu Item
chainloader /io.sys
boot
====== menu.lst ends ========

====== menu2.lst starts =======
hiddenmenu --off
timeout 30

title Full Menu Item
chainloader /ntldr
boot
====== menu2.lst ends ========

正确密码是 a ,但在Password提示后输入 a 就会 auth failed! Press any key to continue..., 不能跳到 menu2.lst 文件。
如果把 --chkpass 换成 --silent 则可以跳转,但毕竟二者功能不同。
请问如何实现我想要的菜单跳转功能?或者这是目前的一个BUG?
回复

使用道具 举报

2298#
发表于 2012-1-15 22:00:49 | 只看该作者

回复 #2301 2012sracer 的帖子

汗,第一次见到这样的用法。。
请问出处在哪里?

想要根据按键跳到另一个菜单,这个在论坛里已经有N多方案了,自己找找看

提示:通过pause --test-key 获取按键代码,然后根据按键代码去跳
回复

使用道具 举报

2299#
发表于 2012-1-16 00:21:08 | 只看该作者

回复 #2302 chenall 的帖子

这是我自己写的,没有其他出处。

如果不跳转文件,执行结果会完全符合预期,比如
====== menu.lst starts ========
password a
hiddenmenu  --chkpass
timeout 10

(rest of the file)
====== menu.lst ends ========
实现功能如下:
1. 超时后开始默认启动项
2. 按下除--chkpass指定(缺省ESC)外的任意键则马上开始默认启动项
3.如果时限内按ESC键则提示输入密码,正确后解锁权限。

现在的问题是一旦password命令指定跳转文件,即使输入正确密码也提示 auth failed! Press any key to continue... ,这貌似不像正确的执行结果。

我知道的其他按键跳转菜单的方法似乎都不能实现上面的第 2 条功能哦。
回复

使用道具 举报

2300#
发表于 2012-1-16 06:27:15 | 只看该作者
单说这一句:password a menu2.lst 用法是没错的。尽管很少有人这样用,但 GNU GRUB 确实支持这个用法。

chenall 看看是否属于 grub4dos 新版本的 bug。
回复

使用道具 举报

2301#
发表于 2012-1-16 11:54:14 | 只看该作者
这一句如何理解:
if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff

看解释应该是"先判断当前ROOT是否UD,如果是的话把UD所在的磁盘设为ROOT"

好象从UD启动,ROOT就是(ud)吧?我测试了下,在默认菜单最前面加set oldroot=%@root%,看这个值还是(ud)
回复

使用道具 举报

2302#
发表于 2012-1-16 12:05:04 | 只看该作者

回复 #2304 不点 的帖子

回复 #2304 不点 的帖子

看说明是有这样的用法,但是看了源码,没有发现第二个参数的作用.

看来有些出入。


EDIT: 再仔细看了一下,原来在STAGE2.C里面。测试了使用一下,一切正常。

前面的问题是因为hiddenmenu没有考虑到这样的用法。。稍后一起修正。

[ 本帖最后由 chenall 于 2012-1-16 12:14 编辑 ]
回复

使用道具 举报

2303#
发表于 2012-1-16 12:16:30 | 只看该作者

回复 #2305 hhh333 的帖子

如果当前ROOT是(ud),设置当前磁盘为(ud)所在磁盘,比如(fd0)或(hd0)
回复

使用道具 举报

2304#
发表于 2012-1-16 12:18:32 | 只看该作者

回复 #2300 hhh333 的帖子

文档里面的介绍是使用空的configfile命令,会直接启动/menu.lst文件。

你可以试试,为了验证是否有效可以把内置菜单的timeout改长一点。
回复

使用道具 举报

2305#
发表于 2012-1-16 13:14:16 | 只看该作者

回复 #2301 2012sracer 的帖子

请试试刚上传的版本。
回复

使用道具 举报

2306#
 楼主| 发表于 2012-1-16 13:34:45 | 只看该作者
map --rehook?
------------------------

Snap1.jpg (97.5 KB, 下载次数: 174)

Snap1.jpg

Snap2.jpg (74.08 KB, 下载次数: 156)

Snap2.jpg
回复

使用道具 举报

2307#
发表于 2012-1-16 13:39:11 | 只看该作者

回复 #2308 chenall 的帖子

是的,configfile确实可以直接找,即相当于configfile=configfile /menu.lst,那菜单中的configfile /menu.lst就应该是多余的,如果不是任何情况下大小写均不敏感,是不是将这一句改为
config /MENU.LST
回复

使用道具 举报

2308#
发表于 2012-1-16 14:10:38 | 只看该作者
原帖由 hhh333 于 2012-1-16 13:39 发表
是的,configfile确实可以直接找,即相当于configfile=configfile /menu.lst,那菜单中的configfile /menu.lst就应该是多余的,如果不是任何情况下大小写均不敏感,是不是将这一句改为
config /MENU.LST


内置菜单可根据自己需要改。
想要实现自己的一些想法,就不能局限于官方提供的“标准版”。
H大自己DIY好了。
回复

使用道具 举报

2309#
发表于 2012-1-16 14:37:14 | 只看该作者

回复 #2311 hhh333 的帖子

这一句确实用处不大,放着也没有什么影响。还是继续保留。

使用/MENU.LST也是一样的,因为如果有区分大小写的话没有用。有可能是
Menu.lst,MENU.lst....

目前FAT/NTFS/ISO9660都是不区大小写的.
回复

使用道具 举报

2310#
发表于 2012-1-16 15:10:23 | 只看该作者

回复 #2309 chenall 的帖子

非常感谢。能跳转了,但有个奇怪的行为。

如果第一次输入的密码正确,则如预期跳转。
如果第一次输入的密码不对,重新输入密码,正确后会解锁当前菜单,而不是跳转。

这大概是BUG?

另外,通过 hiddenmenu --chkpass 显示出来的“Password:”提示会受到 color 语句影响,而 hiddenmenu --silent 显示的“Password:”则不受 color 语句影响永远是 light-gray/black。貌似 --silent
的行为才是期望的?

[ 本帖最后由 2012sracer 于 2012-1-16 15:26 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-4-4 05:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表