无忧启动论坛

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

grub4dos 外部命令 wenv [2010-10-17 ]

  [复制链接]
发表于 2010-5-13 18:06:44 | 显示全部楼层

回复 #119 zxw 的帖子

应该是 hiddenmenu ,你拼写错了,少了一个 d。

hiddenmenu 只能用于菜单初始化命令中,出现在所有的 title 之前。命令行下不能使用这个命令。
回复

使用道具 举报

发表于 2010-5-13 18:34:41 | 显示全部楼层

回复 #121 不点 的帖子

不点大侠,我想问一个问题:
我看内置中有一个不带参数的configfile,这个是不是代表configfile menu.lst,即是指以menu.lst为外置默认菜单。既然是这样,应该就可省略的,只是不同时再用这个语句。

我进行了测试(本意是调用外置的 /H3_MENU.LST):

pxe detect
configfile
default 0
timeout 1

title find /h3_menu.lst, /boot/grub/h3_menu.lst, /grub/h3_menu.lst
        errorcheck off
        configfile /H3_MENU.LST
        configfile /BOOT/GRUB/H3_MENU.LST
        configfile /GRUB/H3_MENU.LST
        find --set-root --ignore-floppies --ignore-cd /h3_menu.lst && configfile /h3_menu.lst
        find --set-root --ignore-floppies --ignore-cd /boot/grub/h3_menu.lst && configfile /boot/grub/h3_menu.lst
        find --set-root --ignore-floppies --ignore-cd /grub/h3_menu.lst && configfile /grub/h3_menu.lst
        errorcheck on
        commandline

title commandline
        commandline

title reboot
        reboot

title halt
        halt
如果根下有menu.lst就执行了,不会执行H3_MENU.LST,但将第二行改成

configfile /H3_MENU.LST
就可以了。
===================
我又测试了一下,基本弄清楚了。
1、configfile不带参数的作用就是cofigfile /menu.lst
2、如果取消这一行,grldr在没有碰到configfile之前将不知道外置菜单的名称。这样就会出内置菜单。
3、要让grldr以其他外置文件作菜单,就在configfile后加这个菜单名作参数,即:“configfile /菜单文件名”

这样看来,这个命令在内置菜单中不能省,而且configfile是一个不返回调用,一旦文件存在则后续语句将不再执行。不知我的说法对不对。

[ 本帖最后由 hhh333 于 2010-5-13 19:02 编辑 ]
回复

使用道具 举报

发表于 2010-5-13 18:57:19 | 显示全部楼层

回复 #122 hhh333 的帖子

你理解得正确。

菜单初始化命令中不带参数的 configfile 命令,就是用来启动当前根设备下的 /menu.lst 文件的。这是为了兼容以前的处理方式。

如果你不想这样,当然就可以去掉这条命令了,或者也可以添加一个你希望的参数,启动你所指定的 menu 文件。
回复

使用道具 举报

发表于 2010-5-13 19:02:40 | 显示全部楼层
重大发现:不点英文GRLDR与压缩背景图问题

首先说明一下我的电脑情况:CPU为凌动N270+945GSM芯片组的新蓝上网本,内存为DDRII 533 1GB、硬盘是西数160GB,硬盘分为3个NTFS主分区,而GRUB4DOS相关文件放在第二个分区的GRUB目录下,GRLDR放在第二分区的根目录下。我之前一直用中文版的GRLDR,加载3KB的压缩过的背景图时,能够看到菜单,但是花屏,而不压缩的背景图时则正常。刚才下载了CHENALL今天修过过的(下载地址http://grub4dos-chenall.googleco ... 2010-05-13-test.zip),完美解决了压缩背景图花屏的问题,压缩过的3KB背景图显示正常。我也不知道究竟是哪根筋突然动了一下,就想试下不点今天(2010-5-13)的那个版本,有没有解决问题。先是用中文版的,问题依旧;于是再换英文版本的,结果重启之后,菜单看不到,只见到一个光标在闪,然后在我菜单设定超时时间到后,启动了默认的菜单项。于是将今天之前的0.4.5的几个版本,以及0.4.4直到2009-4-4的好几个版本,加载3KB的压缩背景图,全部不能显示菜单,和今天的这个版本一样!而加载没有压缩的背景图,则正常;中文版的加载压缩后的背景图,花屏,但是有菜单显示。

附件是我的压缩过的背景图文件和菜单文件。另外,菜单中中文字体加载语句存在与否,不影响英文版不能显示菜单的现象。

XL.GZ

3.09 KB, 下载次数: 39, 下载积分: 无忧币 -2

压缩过的背景图

MENU.rar

1.28 KB, 下载次数: 41, 下载积分: 无忧币 -2

菜单文件

回复

使用道具 举报

发表于 2010-5-13 19:18:04 | 显示全部楼层
我也上载了一个叫做 test 的版本。我已经测试过了。经过 chenall 改造后的 NTFS 驱动,好像正常了。

大家再多测试几日,如果没问题,就把 test 版更名为正常发布版。

没想到 chenall 动作如此快速。定位 bug 很精准。我不知道,chenall 是如何想到用 fstest 来试验的。
回复

使用道具 举报

发表于 2010-5-13 19:22:47 | 显示全部楼层
CHENALL的这个只有英文版,没有中文版,希望将中文版也改了。
回复

使用道具 举报

发表于 2010-5-13 19:24:56 | 显示全部楼层

回复 #125 不点 的帖子

不点还不能高兴太早,chenall说还没有找到bug,只是临时用一个替代办法。我猜chenall相当于在菜单中先默认运行一下fstest代码,或者碰到小于4k文件且又是NTFS时先默认执行一下。不知我的猜测对不对。只能是治标不能说治本。

[ 本帖最后由 hhh333 于 2010-5-13 19:26 编辑 ]
回复

使用道具 举报

发表于 2010-5-13 19:34:54 | 显示全部楼层
我也看不太懂 ntfs 的驱动。不过感觉 chenall 的改动是没错的。chenall 就是注释掉了一行代码。仔细想想,这行代码似乎应该注释掉,如果不注释掉,反而觉得有些不自然。

所以,我现在就准备把 test 改成正常的发布版,而对于今天早先发布的那个正常版,就把它加上 old 字样,暂时保留一段时间。
回复

使用道具 举报

发表于 2010-5-13 19:41:05 | 显示全部楼层

回复 #128 不点 的帖子

我把我那个昨天发布的PE也发了个补丁,只是不安装到硬盘时测试不到。
回复

使用道具 举报

发表于 2010-5-13 22:19:31 | 显示全部楼层
原帖由 不点 于 2010-5-13 18:06 发表
应该是 hiddenmenu ,你拼写错了,少了一个 d。

hiddenmenu 只能用于菜单初始化命令中,出现在所有的 title 之前。命令行下不能使用这个命令。

汗,是少写了一个。
修改后的5月13日版本给hiddenmenu增加了off参数。应写为 hiddenmenu off 吧?
回复

使用道具 举报

发表于 2010-5-13 22:27:34 | 显示全部楼层
不是,应该是 hiddenmenu --off

我们的参数大多都以两个减号开头,也有一部分参数不带减号。比如,今天新增的 pxe 的参数 nokeep 就不带减号。以前的 dd 命令的参数也不带减号,debug 的参数也不带减号。

[ 本帖最后由 不点 于 2010-5-13 22:32 编辑 ]
回复

使用道具 举报

发表于 2010-5-13 22:32:56 | 显示全部楼层
看来问题解决了?!今天没来得及测试
map一个<512b的文件不知是否也解决了
回复

使用道具 举报

发表于 2010-5-13 22:37:25 | 显示全部楼层
一个小于 512 字节的文件,是不可以作为 img 来仿真的。

但是,对于 (rd) 的情况,应该放宽限制,因为 (rd) 不是一个虚拟磁盘。

请 chenall 把这个问题也解决吧。这个容易,因为这是我们在 map 命令中施加的限制,只要针对 (rd) 不再限制就行了。

更新:我来解决吧。这个问题应该在 14 日的版本中解决了。请试试看有无问题。

[ 本帖最后由 不点 于 2010-5-14 00:54 编辑 ]
回复

使用道具 举报

发表于 2010-5-13 22:41:10 | 显示全部楼层
不点大:
pxe 的参数 nokeep,与pxe unload有什么区别?
大概意思是pxe keep的相反。
回复

使用道具 举报

发表于 2010-5-13 23:41:04 | 显示全部楼层
pxe nokeep 是 pxe keep 的反操作。仅仅是把内存中的一个变量的值改变了而已。

pxe unload 则不仅执行 nokeep 的动作,而且执行 unload 的动作。unload 就是卸载 pxe 的环境。

执行 pxe unload 之后,pxe 设备就无法访问了。

pxe nokeep 之后,影响 boot 命令的执行。boot 会顺便执行 pxe unload 的动作。
同样,pxe keep 之后,也影响 boot 命令的执行。此时 boot 当然就不再顺便执行 pxe unload 的动作了。

一旦 pxe unload 被执行,除非重启电脑,否则由 BIOS 所建立的 PXE 环境将不复存在。这就意味着(即使)在进入 DOS 后也无法访问 PXE 服务器上的文件了。
回复

使用道具 举报

发表于 2010-5-14 08:30:32 | 显示全部楼层

回复 #131 不点 的帖子

基于什么考虑不带减号?有规律吗?
回复

使用道具 举报

发表于 2010-5-14 11:16:42 | 显示全部楼层
测试了pxe nokeep正常。
另外pxe keep的问题现在好像也解决了:
chainloader --force (hd0,0)/IO.SYS或chainloader --force (fd0)/IO.SYS
真是可喜可贺!现在PXE启动可以用SRS_F6成功返回PXE启动菜单了。

现在还有UD的问题
UD区从grldr--》io.sys--》Grub.exe ,这个时候UD区已经不可见了,find已经找不到UD区内容了
不点大看看有什么方法返回到UD的启动菜单?
回复

使用道具 举报

发表于 2010-5-14 13:20:25 | 显示全部楼层
回复 #136 hhh333 的帖子

带不带减号,有规律,也没有规律。设计者愿意怎么设计就怎么设计。比如说,dd 命令的参数,历史以来,就不带减号。如果我们在 grub4dos 中加上减号,反而很另类。Linux 的 tar 命令,其选项可以带一个减号,也可以不带减号,都能承认的。pxe 的操作用很多子命令来实现,如果加上减号,看起来就像是选项了。命令和选项,在人的理解的层面上是有差别的。至于说这个 hiddenmenu --off 为何要加上减号,那是因为 hiddenmenu 原来有一个参数叫做 --silent,我们现在添加一个参数,如果不带减号,那也不符合惯性定律。如果原来没有参数,我们肯定不会为 off 带上减号,因为这看起来很别扭。

有些命令的用法很复杂,命令行中的项目很多,不容易区分选项和文件名等其他对象,这就需要加上减号来区别,例如 map 就是这样一个命令。

也有这种情况,设计为带减号和不带减号都可以。甚至在设计时因为匆忙,来不及仔细考虑,于是就有可能弄错了,把不该带减号的,带了减号,或者反之,把该带减号的,丢掉了减号。这没办法,那就将错就错了。

比如说,root 和 rootnoverify 命令,就不该是两条命令,合为一条更为合理。但这是历史,也只能认可,犯不着为这点小事就重新设计。毕竟兼容性是重要的,大家已经习惯了的,要尊重。

另一个例子。findroot 和 find 的合并,就另当别论了。合并后,findroot 的功能变成 find --set-root 选项的功能了。这是因为,gnu grub 中原来没有 findroot 命令,大家没有形成使用 findroot 的习惯,所以,尽早合并到 find 中,是有好处的,让程序代码的重用率增加了,因此节约了代码空间。
回复

使用道具 举报

发表于 2010-5-14 13:59:09 | 显示全部楼层

回复 #137 zhaohj 的帖子

pxe keep 导致死机的问题,看来最终与 grub4dos 启动之初的 BIOS 硬盘和光盘查找过程有关。在 boot land 上有人报告 bug,我们解决了。没想到 pxe 的死机也是由此引起的。谢谢 zhaohj 的及时反馈。这真是一个意外的收获。程序的 “健康” (robust) 是很重要的。看来,0.4.5 在健壮性、兼容性、启动的成功率方面,又要有所提升了。

很抱歉,关于 ud 设备,我还不能做很多事情。坦白地说,我还没有研究过 ud。bean 所开发的几个方面的软件,例如 NTFS 的支持,PXE 的支持,fbinst 以及 ud 设备,我还都不怎么熟悉。这有待今后随着时间的增长,逐步增进了解。我觉得 chenall 在这方面很不错,多加研究,甚至还可以更进一步地改进完善。

每个人都有自己的长处、优势。我的优势是在传统 BIOS 的兼容处理方面。我在编写功能软件方面不强。
回复

使用道具 举报

发表于 2010-5-14 15:58:51 | 显示全部楼层
不点大,问题还没有解决。
虽然pxe keep与IO.SYS没冲突了,但刚才我仔细测试,想返回到PXE启动菜单,发现PXE已经unload了。
这个问题比较严重。
回复

使用道具 举报

发表于 2010-5-14 16:54:39 | 显示全部楼层
fbinstTool1.509在500G移动硬盘上制作1000M((ud)区,且给移动硬盘顺序分1个主分区,2个逻辑分区。在多数电脑上启动成功,但在Biostar TA790GXB A2+主板,无论是(ud)区还是可见分区的所有DOS工具都不能成功启动;(ud)区的0PE不能启动,但可见分区的PE可以成功启动。

后改用用bean大侠的fbinst测试包在我的Biostar TA790GXB A2+主板上测试也不成功
jdcgzb@163.com


附件

119.jpg (311.25 KB)
2010-1-18 13:28


出错详细信息.rar (493.58 KB)

解决办法:经过多台电脑对比测试发现,在主板是Biostar TA790GXB A2+的电脑上GRLDR启动,只能检测到1个主分区,1个逻辑分区,在其它顺利启动的电脑都能正确检测到1个主分区,2个逻辑分区。在WINDOWS下将2个逻辑分区改为主分区后,主板是Biostar TA790GXB A2+的电脑上顺利启动,在其它电脑也能顺利启动。

[ 本帖最后由 jdcgzb 于 2010-5-14 16:59 编辑 ]
回复

使用道具 举报

发表于 2010-5-14 17:09:20 | 显示全部楼层

回复 #140 zhaohj 的帖子

问题出来以后,问题的性质、本质,一定要弄清楚,否则就可能发生误读。

虽然我们说,新版本解决了 grub4dos 启动死机的问题,但是,这解决的问题,却不是 grub4dos 的,而是 BIOS 的。本质上讲,并没有发现 grub4dos 在这方面有任何 bug。所做的工作,无非就是减少了对 BIOS 的调用而已。也就是说,注释掉那些 BIOS 调用代码,就不死机了。添加上就又要死机了。而 grub4dos 对于 BIOS 本身的调用格式,那是没问题的,因为这就经过了很多年的检验。

pxe 这个东西,虽然勉强能用,但也不能依靠它来实现载人航天。CDROM这种规范,是微软DOS时代的产物,但微软很快就放弃DOS了。PXE是更晚的规范,与DOS的共存,谁来保障?大家知道,CDROM规范尽管也有毛病,但还不算严重。PXE的BIOS,竟然占用100K数量级的常规内存,可以说是非常成问题的。虽然规范本身不一定要求占用100K,但是,实现PXE的厂家,却这么做了。显然,与CDROM的情况相比,PXE的现实情况是很垃圾的。相同的 PXE 软件环境(例如GRUB4DOS和DOS),在不同的主板下,其结果就可能不同。正如同样一个U盘,插在不同的机器,其结果也不同。

CDROM的软肋是它的规范本身存在固有问题,与硬盘、软盘的兼容存在壁垒。同时,CDROM 设备由于体积的问题而避免不了被淘汰的命运。

PXE 的软肋是它占用了太多的内存,实在只能用“垃圾”来形容了。假如将来有别的技术,一定可以轻松取代 PXE 这种技术的。不过也许等不到那一天,PXE 和整个 BIOS 环境,都已经被彻底淘汰了。

我们不少人都了解 syslinux。syslinux 似乎能够支持访问 http web 服务器的文件。用 syslinux 自己的网络模块,不需要占用 100K 内存,就能实现更加丰富的功能。如果此时再回头看看 BIOS 厂商的 PXE,那“垃圾”二字应该在脑子里立刻出现。我们用 syslinux,应该用它的精华,应该把其精华发扬光大,甚至如果有能力的话,把它的精华移植到 grub4dos 中。

要调和两个、三个不同的软件产品(DOS,GRUB4DOS、PXEBIOS),那可不是一件轻松的事。两个还勉强可以调和(DOS和GRUB4DOS),都属于软件。而PXE则属于硬件层面,而它的设计又不好。很难保证它与另外两个不发生冲突。我们可以在 DOS 和 GRUB4DOS 之间来回切换。但是,如果 PXE 也来搅局,想一帆风顺,恐怕不现实。即使在你的机器上调试通过了,你也不能保证在其他的机器都能通过。

[ 本帖最后由 不点 于 2010-5-14 17:10 编辑 ]
回复

使用道具 举报

发表于 2010-5-14 17:27:18 | 显示全部楼层

回复 #141 jdcgzb 的帖子

哈哈,竟然有人把“成功”说成是“失败”。你成功了居然不知道是成功了。

GRUB4DOS 本来就是依赖 BIOS 来访问移动硬盘以及其他各种设备的。如果 BIOS 有 bug(这种情况比较常见),那么,就无法访问移动硬盘的后部,只能访问,比如说,137G 的空间。

如果不出所料,你的问题就是这样的,因而也根本不是问题。谁还把这当成问题呢?

甚至在某些主板之下,你只有 8G 可以被 BIOS 访问到。那时你一定更加莫名其妙了。还有更糟糕的情况,只有 500M,或者 250M,或者 100M,或者1.44M 能被访问。估计最后这个情况你就要破口骂它了。
回复

使用道具 举报

发表于 2010-5-14 17:36:16 | 显示全部楼层
谢谢不点大解答,在时空看到过你对PXE规范的描述,看来这个问题难以平衡!
用虚拟机及实机测试,结果一样。以前在虚拟机上是不会退出的。
PXE--GRLDR--DOS--GRUB--PXE,呵呵,好复杂
回复

使用道具 举报

发表于 2010-5-14 17:57:07 | 显示全部楼层
做了个最简单的DOS镜像
config.sys内容空
autoexec.bat:
grub.exe
PXE启动测试:

[ 本帖最后由 zhaohj 于 2010-5-14 18:00 编辑 ]
Snap1.jpg

boot后

boot后
回复

使用道具 举报

发表于 2010-5-14 18:13:09 | 显示全部楼层

回复 #145 zhaohj 的帖子

对不起,我刚刚查看了 grub.exe 的源代码,发现当通过 grub.exe 启动的时候,PXE 自动屏蔽了。代码如下:

        orb     $0x01, %al                      /* bit0=disable pxe */

因此,无法通过 grub.exe 而再次启动 PXE。

之所以屏蔽掉,是出于安全考虑。有些机器会在这种情况下(在重新激活PXE的时候)死机。

我准备编译一个版本你试试。也只能给你用。

已经上载到 nufans 了,文件名是 grubpxe.exe。

这个版本不再禁止 pxe。
回复

使用道具 举报

发表于 2010-5-14 22:21:35 | 显示全部楼层
谢谢不点大,单独为艾制作一个版本,真太过意不去啊!

不过从长远打算,是不是跟个参数更加好呢?!默认可以disable pxe,但允许enable pxe
如 grub.exe --enable-pxe
呵呵,要求可能过分了点。

这样看来,现在的GRUB4DOS从0.4.5以来稳定性确实好多了。以前PXE启动,还有部分机子会卡死的。现在基本没有了。
回复

使用道具 举报

发表于 2010-5-15 16:44:50 | 显示全部楼层
今天测试了grubpxe.exe,比较成功,运行SRS_F6成功返回PXE的BOOT菜单,调用的是configfile /MENU.LST
具体过程是这样:
运行SRS_F6,完成驱动盘的仿真,得到A、B盘
判断是否是PXE启动,是就
          write 0x8280 0x21 && pxe basedir /
          root (bd)
          configfile ()/MENU.LST
如果用chainloader ()/GRLDR会死机。
另上面的 pxe basedir /一定要写,不然会找不到。

UD没办法了,运行UD区的SRS_F6后,write 0x8280 0x23及write 0x82b8 原启动时值,可以看到UD区内容(可以列表),但无法访问(读)。只有在可见分区做文章了。
回复

使用道具 举报

发表于 2010-5-15 17:53:28 | 显示全部楼层
原帖由 不点 于 2010-5-14 17:27 发表
哈哈,竟然有人把“成功”说成是“失败”。你成功了居然不知道是成功了。

GRUB4DOS 本来就是依赖 BIOS 来访问移动硬盘以及其他各种设备的。如果 BIOS 有 bug(这种情况比较常见),那么,就无法访问移动硬盘 ...


是去年和今年刚购买的电脑,我平时经常给别人维护电脑,如果是BIOS不支持大硬盘,那应该不管500G移动硬盘怎么分区,USB启动都不成功才对啊。平时给别人维护电脑时我总要测试一下500G移动硬盘的启动效果。通过多次试验感觉移动硬盘分为三个主分区启动成功率相当高,碰到老一点的电脑先通过加载PLPBT.BIN启动USB2.0支持,再启动PE和DOS维护工具效果很好。极小数的不能启动的就用2G小U盘启动。
回复

使用道具 举报

发表于 2010-5-15 19:37:42 | 显示全部楼层

回复 #149 jdcgzb 的帖子

你还不明白什么是 BIOS。

BIOS 是机器主板上的程序。不同的机器,其 BIOS 也不同。

你没听说过?同一个 U 盘,在不同的机器上效果也不同。有的正常启动,有的则死机。这都是机器主板 BIOS 的差别造成的。这与你的机器新旧没关系。即使再过十年、二十年、一百年,BIOS 照样会有 BUG。为什么呢?因为有些 BUG 甚至是故意安排的。最近甚至有报告说,在一些新型机器上,微软的 DOS7+ 无法运行,死机。而 FreeDOS 和 DOS6.22 竟然能够运行,grub4dos 和 syslinux 也能运行。这都属于 BIOS bug 的范畴。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 08:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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