无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: sratlf

[求助] grldr内置菜单的疑问

[复制链接]
发表于 2014-6-9 14:05:53 | 显示全部楼层 |阅读模式
捕获.PNG

如图  iso包里仅含根目录下的grldr和menu.lst  grldr是默认菜单  未修改

想知道在加载grldr内置菜单前是否还会再加载根目录下的/menu.lst文件  如图中就是未加载内置菜单  直接加载了/menu.lst文件
发表于 2014-6-9 15:52:15 | 显示全部楼层
你对g4d不懂吧?启动时系统先读取grldr,在grldr里设置menu.lst的文件和目录!
回复

使用道具 举报

 楼主| 发表于 2014-6-9 15:54:51 | 显示全部楼层
本帖最后由 sratlf 于 2014-6-9 16:05 编辑
2012ge 发表于 2014-6-9 15:52
你对g4d不懂吧?启动时系统先读取grldr,在grldr里设置menu.lst的文件和目录!

你可以做相同的测试  就算把grldr内置菜单清空也依然可以启动/menu.lst文件

测试文件可以用RUN贴#2682的这个  就是为了测试这个发现的内置菜单的问题

http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=191301&pid=2939787&fromuid=330930
回复

使用道具 举报

发表于 2014-6-9 17:10:10 | 显示全部楼层
本帖最后由 2012ge 于 2014-6-9 17:13 编辑
sratlf 发表于 2014-6-9 15:54
你可以做相同的测试  就算把grldr内置菜单清空也依然可以启动/menu.lst文件
测试文件可以用RUN贴#2682 ...

这个我也不是特别懂!都是我知道在光盘上用和硬盘上用不一样!可是我不用光盘,我在硬盘上部署了pe,vhd。系统进不了可以进pe,vhd。如果硬盘引导有问题,可以用u盘启动硬盘pe,vhd。如果还是不行,就只能用u盘启动u盘pe咯!提示不是说没有找到menu.lst吗?
回复

使用道具 举报

 楼主| 发表于 2014-6-9 17:20:20 | 显示全部楼层
2012ge 发表于 2014-6-9 17:10
这个我也不是特别懂!都是我知道在光盘上用和硬盘上用不一样!可是我不用光盘,我在硬盘上部署了pe,vhd ...

菜单可以通用  另外#1没提示没找到menu.lst  #1的提示是直接使用了/menu.lst  没有使用内置菜单
回复

使用道具 举报

发表于 2014-6-9 17:30:06 | 显示全部楼层
sratlf 发表于 2014-6-9 17:20
菜单可以通用  另外#1没提示没找到menu.lst  #1的提示是直接使用了/menu.lst  没有使用内置菜单

是不是menu.lst有问题!你用bootice看看!
回复

使用道具 举报

 楼主| 发表于 2014-6-9 17:41:52 | 显示全部楼层
2012ge 发表于 2014-6-9 17:30
是不是menu.lst有问题!你用bootice看看!

根目录的menu.lst里面就三行命令  你可以自己下载文件自己测试下
回复

使用道具 举报

发表于 2014-6-10 07:43:52 | 显示全部楼层
应该可以,我以前制作过,供参考!
http://bbs.wuyou.net/forum.php?m ... p;extra=&page=1
回复

使用道具 举报

 楼主| 发表于 2014-6-10 09:32:57 | 显示全部楼层
于山 发表于 2014-6-10 07:43
应该可以,我以前制作过,供参考!
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=200835&extra=&page= ...

不是  我是说正常情况下根目录的menu.lst应该得不到执行才对。。。
回复

使用道具 举报

发表于 2014-6-10 10:02:37 | 显示全部楼层
本帖最后由 于山 于 2014-6-10 10:27 编辑
sratlf 发表于 2014-6-10 09:32
不是  我是说正常情况下根目录的menu.lst应该得不到执行才对。。。


缺省内置菜单:
title find /menu.lst, /boot/grub/menu.lst, /grub/menu.lst
        errorcheck off
        configfile /boot/grub/menu.lst
        configfile /grub/menu.lst
        if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff
        if "%@root:~1,1%"=="f" && find --set-root --devices=f /menu.lst && configfile /menu.lst
        find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
        find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
        find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
        errorcheck on
        commandline

title commandline
        commandline


可以从内置菜单中,看到有一条: 查找并执行根目录下menu.lst菜单的命令(find /menu.lst)!

执行顺序为: 内置菜-->查找外置menu.lst菜单







回复

使用道具 举报

发表于 2014-6-10 11:02:42 | 显示全部楼层
一楼的图片显示,机器是从 CD-ROM 启动,CD-ROM 里面的 GRLDR 可能是含有内置菜单的,屏幕显示内置菜单首先获得控制,然后内置菜单又调用外置菜单,于是外置的菜单又获得控制。

这个图片已经很清楚了,你的内置菜单首先获得控制,内置菜单里面的 configfile 命令又将控制传递给 /menu.lst 这个外置菜单。

另外,你应该用新版测试,你所用的 2013 年的版本,有点旧。最好用新版试试。

回复

使用道具 举报

发表于 2014-6-10 11:15:04 | 显示全部楼层
不点 发表于 2014-6-10 11:02
一楼的图片显示,机器是从 CD-ROM 启动,CD-ROM 里面的 GRLDR 可能是含有内置菜单的,屏幕显示内置菜单首先 ...


用最新版依然是这样,有点不合理,我说说两点问题

1.加载grldr内置菜单之前不应该尝去加载menu.lst

2.grldr内置菜单没有configfile /menu.lst
   即不会加载当前根目录的menu.lst
   是否加上这句才合理?
1.png
回复

使用道具 举报

发表于 2014-6-10 11:26:29 | 显示全部楼层
本帖最后由 不点 于 2014-6-10 11:43 编辑

内置菜单中有一条不带参数的 configfile 命令,它就可以把控制传递给 /menu.lst 文件。

你可以去掉这条不带参数的 configfile 命令,这样就不会执行外置菜单了。


菜单初始化命令集里面的不带参数的 configfile 命令,其作用是把控制转移到 “默认” 的外置菜单文件。

grldr 启动后,就有一个默认的位置(即当前工作目录)。它通常是 grldr 所在设备的根目录。

这个默认位置上的 menu.lst 文件,就是默认的外置菜单文件。


回复

使用道具 举报

 楼主| 发表于 2014-6-10 11:46:50 | 显示全部楼层
于山 发表于 2014-6-10 10:02
缺省内置菜单:
title find /menu.lst, /boot/grub/menu.lst, /grub/menu.lst
        errorcheck off

find /menu.lst 是在title后面的  不会得到执行  真正开始执行的是errorcheck off
回复

使用道具 举报

 楼主| 发表于 2014-6-10 11:51:24 | 显示全部楼层
不点 发表于 2014-6-10 11:26
内置菜单中有一条不带参数的 configfile 命令,它就可以把控制传递给 /menu.lst 文件。

你可以去掉这条 ...

看到了  确实有不带参数的configfile命令  但是为什么第一次启动的时候  这条命令可以生效  加载/menu.lst  

之后如果重新加载内置菜单的话这条命令就不会生效  不会加载/menu.lst  类似#1和#12的这种结构的iso

第一次启动可以加载/menu.lst  如果再重新加载内置菜单的话  就不会加载/menu.lst  会在找不到menu.lst后进入命令行
回复

使用道具 举报

发表于 2014-6-10 11:59:29 | 显示全部楼层
那是智能判断的结果。为了防止无限多次执行 /menu.lst 导致循环死机,程序对此作了处理,只有第一次执行不带参数的 configfile 命令时才会执行默认的外置菜单,以后如果再次执行这条不带参数的 configfile 命令,那就失效了,当成空操作,什么也不做,直接执行 configfile 之后的命令。这是防止反复执行这条无参数的 configfile 命令导致无限循环死机的发生。
回复

使用道具 举报

 楼主| 发表于 2014-6-10 12:37:28 | 显示全部楼层
不点 发表于 2014-6-10 11:59
那是智能判断的结果。为了防止无限多次执行 /menu.lst 导致循环死机,程序对此作了处理,只有第一次执行不 ...

好吧  如果能加个提示就好了  要不然有的用户会把第二次无法加载当成问题看待。。。
回复

使用道具 举报

发表于 2014-6-10 12:59:06 | 显示全部楼层
看了一下,感觉configfile命令默认加载grldr目录下的menu.lst这个设定有点逻辑不通。
一方面为了有“默认”而去加载同目录下的menu.lst,
另一方面又为了防止死循环而设定只加载一次。
其实只要设定configfile不带参数就不能执行,然后在默认菜单中加configfile /menu.lst,就可以了吧?
呵呵,我怀疑当初写这条命令的时候随手设置了默认加载同目录的menu.lst,后来发现有死循环的bug,又加了个判断来只执行一次吧?
建议去掉configfile不带参数的用法,加上去掉了后面的只能判断代码,是不是还能省一点代码空间呢?
回复

使用道具 举报

发表于 2014-6-10 15:29:09 | 显示全部楼层
本帖最后由 不点 于 2014-6-10 15:37 编辑

默认的外置菜单,不一定是 /menu.lst,因为用户可以修改它的位置以及文件名。它位于 grldr 的第二扇区。也就是说,/menu.lst 不等价于默认的外置菜单。

另外,即使像楼上 fukystone 所说的那样,写成 configfile /menu.lst,这对于用户的错误使用所导致的无限循环死机,也是无能为力,情况完全一样,丝毫没有改观。即:用户在外置菜单中执行内置菜单,而内置菜单又立即要执行外置菜单,这样必然是无限循环。

权衡一下,能够容错,防止用户产生死机,应该是更贴心的。因为这是能够做到的,我们就可以去做;如果我们做不到,那就到处广告,提醒用户不要犯某某错误,正如我们到处广告,不要错误地执行 find --set-root 那样。多费劲啊。

其实,世上没有完美的东西,鱼与熊掌不可兼得。任何一个做法,都有其优缺点。权衡的时候,只能采取其一,而不能兼顾所有的情况。


grub4dos 里面,没用的东西有很多,如果要精简的话,还轮不到考虑清理掉 configfile 这点逻辑设计。另外,已经实现的功能,不是说想去掉就去掉了,随随便便。你不需要的东西,别人可能在用。去掉了某个东西,可能会给别人带来麻烦。你觉得某个东西不好,你可以不用它,甚至你可以编译自己的版本,彻底去掉它;这是可以的。但是,如果要影响到别人的使用、影响到兼容性,那就是一个慎重的话题了。

回复

使用道具 举报

发表于 2014-6-10 15:44:28 | 显示全部楼层
sratlf 发表于 2014-6-10 12:37
好吧  如果能加个提示就好了  要不然有的用户会把第二次无法加载当成问题看待。。。

具体怎么加提示信息,你可以给个方案。我一点都不反对加提示信息,但我知道,我们的用户以及第三方开发者、发行者、以及最终使用者当中,有很多人反对增加提示信息。

如果你是指写到文档里面,那就不是 chenall 等开发维护者的责任了,因为那是你的责任,大家都在依靠你写的文档材料。当然,这些文档,广义来看,也属于开发的一部分。
回复

使用道具 举报

 楼主| 发表于 2014-6-11 09:34:57 | 显示全部楼层
不点 发表于 2014-6-10 15:44
具体怎么加提示信息,你可以给个方案。我一点都不反对加提示信息,但我知道,我们的用户以及第三方开发者 ...

如果在后面一句提示  仅执行一次  怎么样

processing menu file /menu.lst, can only be executed once.
回复

使用道具 举报

发表于 2014-6-11 09:57:19 | 显示全部楼层
不准确。执行一次的不是 /menu.lst,而是 不带参数的 configfile 命令。

执行任何一个 menu.lst 文件之前(不管它位于何处,也不管它叫什么名字),都会显示 Processing menu file ..... 的信息,而且它并不被限定只执行一次,而是可以执行任意多次,只要你用 configfile /menu.lst 就总是可以执行。

回复

使用道具 举报

 楼主| 发表于 2014-6-11 10:24:10 | 显示全部楼层
processing configfile command without any extra options, can only be executed once.

这样子呢  是不是有点太长了
回复

使用道具 举报

发表于 2014-6-11 10:30:24 | 显示全部楼层
本帖最后由 不点 于 2014-6-11 11:06 编辑

长没关系,电脑打印的速度还是很快的。

问题是,这对用户不一定有多少帮助。用户通常不会留意这条信息,而且中文用户更不容易留意这条信息。

一闪而过的信息,即使你想看,都来不及。如果故意暂停几秒,拖延机器启动速度,不划算,我估计有人要抱怨了。

有鉴于只有高级用户(有一定的开发能力的用户)才关心这些东西,因此我觉得,只要在文档中加以公布,就可以了。高级用户通常都会仔细研读文档的。


另外,我认为,内置菜单中的无参数 configfile 命令,第一次把控制权交给外部的默认菜单以后,本来就不应该有第二次了。这是因为,当用户执行内置菜单的时候,用户希望内置菜单真正开始执行,而不是自动又一次地跳到外置的菜单里面,形成死循环。这个设计本来就没有毛病。因此,在文档中加以公布,是很自然的,很容易得到大家的理解。

如果某些应用场景需要多次执行 configfile,那么,菜单的设计者可以把内置菜单中的这条不带参数的 configfile 命令改成带参数的 configfile /menu.lst 命令,这就会反复执行了(当然也可能会造成无限循环死机)。注意,这条 configfile /menu.lst 命令之后的那些命令,都没有机会能够获得执行。configfile /menu.lst 就相当于无条件 goto 到 /menu.lst 里面去了,而且不能返回到内置菜单中,即,不能继续执行内置菜单里面其余的命令了。

当硬盘某个隐蔽的分区的根目录下存在某个 menu.lst 文件,并且这个文件的开头有一条语句是执行内置菜单的时候,那就很容易造成无限循环死机,而且这种死机是难以排查的。不明真相的用户可能会认为是 grub4dos 的 bug 造成的,甚至认为 grub4dos 的开发者是垃圾,从而抛弃 grub4dos。

具体应该怎么做,那就看各位开发者、应用者自己的决定了。没有两全其美的方案,只有折中的方案。

回复

使用道具 举报

 楼主| 发表于 2014-6-11 12:02:10 | 显示全部楼层
本帖最后由 sratlf 于 2014-6-11 15:41 编辑
不点 发表于 2014-6-11 10:30
长没关系,电脑打印的速度还是很快的。

问题是,这对用户不一定有多少帮助。用户通常不会留意这条信息, ...


还是感觉应该加个提示  要不然总会有用户无意间用到了这个功能  再想使用却失效了  依然认为存在bug

找到了以前的一些资料。。。
回复

使用道具 举报

发表于 2014-6-11 18:03:31 | 显示全部楼层
用户用到某个功能,就应该查文档,查用法说明。任何命令,都应该有说明。没有说明的命令,那就没法用。关键是应该完善说明书。

前面已经说了,如果 configfile 命令总是无条件转向 /menu.lst,那么后续的命令全都没有机会得到执行。这显然是不合乎逻辑的。因此,限制 configfile 命令只能执行一次,是很自然的,稍动脑筋就会理解的。
回复

使用道具 举报

发表于 2014-6-13 05:14:10 | 显示全部楼层
不点 发表于 2014-6-11 18:03
用户用到某个功能,就应该查文档,查用法说明。任何命令,都应该有说明。没有说明的命令,那就没法用。关键 ...

1、以前也有请教过不点,知道configfile不带参数就是默认执行外置菜单,但似乎没有特别说明只能执行一次。
2、这个设计不错,就不要加什么提示了,本来是帮助文档来解决的事,加到默认菜单里不好,即使加了也会有很多人看不懂。
3、前面在调试UDM时,发现如果@root是(hd0),这个configfile无效,现在UDM默认为(hd0,0)应该不会无效了吧?(还没测试)
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-28 22:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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