Board logo

标题: 报告GRUB的一个BUG! [打印本页]

作者: 不得不爱     时间: 2006-6-11 10:04    标题: 报告GRUB的一个BUG!

我在虚拟机里挂2个硬盘启动GRLDR时显示:
  Booting 'find /menu.lst'
find --set-root /menu.lst
Error 17: File not found                                          
  Booting 'find /boot/grub/menu.lst'                              
Error 20: Selected cylinder exceeds maximum supported by BIOS               
Press any key to continue...
以后就寻不到menu.lst
然后我转到GRUB的命令行后输入同样的命令却找到了menu.lst
我在挂单硬盘时却没有这个问题!这是怎么回事?
作者: Wengier     时间: 2006-6-11 10:06


  Quote:
Originally posted by qwe1234567 at 2006-6-11 10:04 AM:
我在虚拟机里挂2个硬盘启动GRLDR时显示:
  Booting 'find /menu.lst'
find --set-root /menu.lst
Error 17: File not found                                          
  Booting 'find / ...

我在真实机中也遇到过同样的问题,把menu.lst放在/下是可以的,但放在/boot/grub/下就会出现以上错误。
作者: 不得不爱     时间: 2006-6-11 11:03
看来最好把menu.lst放在/下,不过还是应该在改1下!
作者: 不点     时间: 2006-6-11 12:03
Selected cylinder exceeds maximum supported by BIOS

这是个顽固的 BUG,我觉得这是 GNU GRUB 中遗留下来的 BUG,在 GNU GRUB 的网站上也屡屡见到同样的报告。要解决它,似乎不容易。需要贴图来说明操作过程(口头表述一般都不准确,会漏掉重要信息)。
作者: 不得不爱     时间: 2006-6-11 13:52
不点:
     这个顽固的 BUG只是在我挂2个硬盘时才出现,出现提示时连内植菜单都还没有读入!然后按任意键就出现了内植菜单!这个问题你可以在虚拟机里试下,或者挂2个硬盘试,这个顽固的 BUG就会出现!
作者: fastslz     时间: 2006-6-11 17:48
我接触GRUB时间比较段,也来说说吧,说错见谅啊:P
既然挂2个硬盘启动GRLDR时才出现此BUG的,可以从硬盘安装方式上考虑这个问题,比如
1: IDE1接口上面的第1个硬盘设置为主并在80线上主位置,第2个硬盘设置为从并在80线上从位置,IDE2设置从(或者干脆拔下测试)
2: IDE1接口上面的第1个硬盘设置为主并在80线上主位置,第2个硬盘设置为主挂在IDE2接口80线上主位置上,光驱设置为从挂在80线上从位置

嘿嘿...比较绕口

现在的主板硬盘安装位置要求也不是很严格也能启动,硬盘也有自动判断跳线,引起了GRUB不知从何开始FIND,如果是这情况GRUB用实际路径可以启动。我没有双硬盘没法测试。

[ Last edited by fastslz on 2006-6-11 at 17:49 ]
作者: 不点     时间: 2006-6-11 22:36
两个硬盘,乃至3个硬盘,我都试过,没问题的。问题出在你那里,也就只有你可以调试解决了。如果你能提供一个虚拟机映像,我倒是可以试试。估计你也做不出一个映像,用来反复再现该问题的。如果能做出,把它传给我,我就有可能把 BUG 揪出来。
作者: 不得不爱     时间: 2006-6-12 07:29
那你把MENU.LST放在什么路径的?是不是在/下?我只有在/下才正常呀!
作者: 不点     时间: 2006-6-12 09:00
有的人放在/找不到,放在/boot/grub 却可以找到,有的人刚好相反。而我本人连一次都没碰上,如果让我碰上了,说不定早就解决了。你最好制作一个简单的硬盘映像,来反复再现问题,证实你的猜测。
作者: 不得不爱     时间: 2006-6-12 10:16
要不我把那两个硬盘映像发过来在VPC你试下?
作者: 不点     时间: 2006-6-12 11:01
好的,硬盘映像有多大?太大了这里恐怕不能上载吧?我使用 qemu,没用过 VPC。
qemu识别的磁盘映像很简单,就是直接按扇区拷贝的磁盘映像便可,没有任何多余的格式。
作者: 不得不爱     时间: 2006-6-12 11:22
共有25.5M不知道你的邮箱支持不?
作者: 不点     时间: 2006-6-12 12:12
你可以上载到某个 FTP 空间之类的。我的邮箱不支持大邮件。
作者: 不得不爱     时间: 2006-6-12 12:31
已经发送了分成2个发的,到tinybit@TOM.COM去收
作者: 不点     时间: 2006-6-12 18:37
我在qemu虚拟机中测试你给的两个硬盘映像。无论加载一个,还是同时加载两个,都正常,没有出现任何异常。你自己也可以用 qemu 来试验。
作者: 不得不爱     时间: 2006-6-12 21:52
我有两个大硬盘映像设为第2硬盘,就无法正常启动,可惜文件太大了!
作者: 不点     时间: 2006-6-13 08:01
没关系,你自己先用 qemu 来运行这两个硬盘映像,如果成功,则说明是 VPC 的问题,如果不成功,则说明是 GRUB 的问题。qemu 正好可以直接识别 VPC 的硬盘映像,这可是很方便哟!赶快下载 qemu 吧。例如,用以下命令来启动VPC的硬盘映像:

qemu -hda part1.vhd -hdb part2.vhd

如果确定是 GRUB 的问题,把操作过程中的图截下来,相关的配置文件也贴上来。
作者: 不得不爱     时间: 2006-6-13 08:33
我肯定是 GRUB 的问题,相关的配置文件就在发给你的vhd文件里,奇怪的是我把MENU.LST放在/BOOT/GRUB/时自己等它寻找MENU.LST它就出错,而在启动时按方向键让内植菜单停止后,手工选择寻找/BOOT/GRUB/MENU.LST它却正常,把MENU.LST放在/GRUB/时自己等它寻找MENU.LST它就出错,而在启动时按方向键让内植菜单停止后,手工选择寻找/GRUB/MENU.LST它却正常,好象是自动纠错引起的!
作者: 不得不爱     时间: 2006-6-13 08:36
而且这个问题Wengier管理员 也肯定遇到过的,而且我的真实机也有同样的问题,如果是VPC的问题,那我的真实机出现了同样的问题怎么解释?
作者: 不得不爱     时间: 2006-6-13 08:40
随便再说一下,我在顶楼发的错误信息是我直接在VPC的屏幕上复制下来的!
作者: 不点     时间: 2006-6-13 09:17
那我也说说我的观点吧。如果是GRUB的问题,那么不管你用什么机器、什么虚拟机来运行同样的硬盘,它都应当出现错误。只要有一个虚拟机,或者一个真实机在同样硬盘上不出现问题,那就说明不是 GRUB 的**软件**的错,而是与硬件相关的。为了确定是 GRUB 的软件错误,我们最好在不同的虚拟机上来测试(也可用多个真实机,但这太麻烦,不现实,所以就免了)。测试的目的是排除硬件错误的可能性。因此,qemu 和 vmware 都应当测试。如果都不成,则可以认为是 GRUB 的错误了。
作者: 不得不爱     时间: 2006-6-13 10:30
那我就发几个自动寻找时出错的图片,你看看!
附件 1: 1.jpg (2006-6-13 10:38, 10.84 K, 下载附件所需积分 1点 ,下载次数: 1)


附件 2: 2.jpg (2006-6-13 10:38, 5.68 K, 下载附件所需积分 1点 ,下载次数: 2)


附件 3: 3.jpg (2006-6-13 10:38, 7.88 K, 下载附件所需积分 1点 ,下载次数: 1)



作者: 不点     时间: 2006-6-13 10:49
为了完整起见,两件事都得做:一个是用 qemu 等虚拟机,另一个是截图。现在你做了第二件事,用另一个虚拟机的事情最好也做,这样有好处。

从贴图来看,/grub/menu.lst 文件是找到了,但是在打开该文件时,出现了错误。这应该是 GRUB 的错误了。所以,我们得在技术上找出具体的错误在哪里。

这条错误信息的意思是,BIOS 不支持 LBA,只能用 CHS 模式访问硬盘文件,而当用 CHS模式访问硬盘文件的扇区时,柱面号太大了,所以失败。

不过,由于你能在命令行打开同一文件,所以,这并非由于 BIOS 的错误引起,而是 GRUB 自己搞错了。我们就是要定位,究竟在哪里,GRUB 搞混乱了?
作者: 不得不爱     时间: 2006-6-13 12:37
我刚才用qemu启动同样的两个文件,得到了同样的错误!

  Quote:
从贴图来看,/grub/menu.lst 文件是找到了,但是在打开该文件时,出现了错误。这应该是 GRUB 的错误了。所以,我们得在技术上找出具体的错误在哪里。

至于/grub/menu.lst应该与找没有找到没有关系,因为查找命令都还没有出现在屏幕上,如果正常的话查找命令会出现在屏幕上的。(因为我手工选择查找/BOOT/grub/menu.lst同样出错!(/BOOT/grub/没有menu.lst)

[ Last edited by qwe1234567 on 2006-6-13 at 12:54 ]
作者: 不得不爱     时间: 2006-6-13 12:44
我启动时按方向键让内植菜单停止后,手工选择寻找/GRUB/MENU.LST它却正常,而如果我启动时按方向键让内植菜单停止后,手工选择寻找/boot/GRUB/MENU.LST它却不正常了,出现和让它自动查找MENU.LST时一样的错误,也就是说在指定的查找路径下如果没有MENU.LST时就不能从内植菜单里启动MENU.LST!
作者: 不点     时间: 2006-6-13 16:52
你说的有道理。看来还是你细心。也就是说,还没打印出 find --set-root /grub/menu.lst 就出现 Error 20 了。我还发现了另外一个问题,这些够折腾一阵子了,你先休息几天吧,待我有空研究出一个结果再来通告。
作者: 不得不爱     时间: 2006-6-13 17:30
好吧!我等你的好消息!
作者: Wengier     时间: 2006-6-14 03:13


  Quote:
Originally posted by 不点 at 2006-6-13 09:17 AM:
那我也说说我的观点吧。如果是GRUB的问题,那么不管你用什么机器、什么虚拟机来运行同样的硬盘,它都应当出现错误。只要有一个虚拟机,或者一个真实机在同样硬盘上不出现问题,那就说明不是 GRUB 的**软件**的错,而是与硬件相关的。为了确定是 GRUB 的软件错误,我们最好在不同的虚拟机上来测试(也可用多个真实机,但这太麻烦,不现实,所以就免了)。测试的目的是排除硬件错误的可能性。因此,qemu 和 vmware 都应当测试。如果都不成,则可以认为是 GRUB 的错误了。

我这儿如用VMWare来运行GRUB.EXE的话,当屏幕出现以下内容以后,屏幕上的文字居然一个字母一个字母的显示出来(每两个字母的显示时间间隔大约为半秒至1秒),导致完全无法正常使用。即使未加载任何其它程序时亦如此。

About to reset the boot drive. Report bug if the machine hangs here.

Return from int13/AH=0. The reset of the boot drive is OK.

About to enable gate A20. Report bug if the machine hangs here.
作者: 不得不爱     时间: 2006-6-14 06:52


  Quote:
Originally posted by Wengier at 2006-6-14 03:13:


我这儿如用VMWare来运行GRUB.EXE的话,当屏幕出现以下内容以后,屏幕上的文字居然一个字母一个字母的显示出来(每两个字母的显示时间间隔大约为 ...

你那是什么版本的?
作者: 不点     时间: 2006-6-14 08:05
wengier: 显示了你说的信息之后,还应当显示以下两条信息中的一个:

Gate A20 is turned on successfully.

或者

Failed to turn on Gate A20!!

你是说,从显示这条信息就开始变慢了?那么应该是 A20 的控制,影响了虚拟机的行为。应该属于虚拟机的 BUG。因为我们的 A20 控制,并未触及系统时钟。我这里的 qemu 出现另外一个 BUG,就是方向键(也就是箭头键)都失去作用了。刚刚在 http://grub4dos.jot.com/ 发布的二进制程序解决了 qemu 的问题,不知是否也解决了 vmware 的问题。请报告。
作者: Wengier     时间: 2006-6-14 12:41


  Quote:
Originally posted by 不点 at 2006-6-14 08:05 AM:
wengier: 显示了你说的信息之后,还应当显示以下两条信息中的一个:

Gate A20 is turned on successfully.

或者

Failed to turn on Gate A20!!

你是说,从显示这条信息就开始变慢了?那么应该是 A20 的控制,影响了虚拟机的行为。应该属于虚拟机的 BUG。因为我们的 A20 控制,并未触及系统时钟。我这里的 qemu 出现另外一个 BUG,就是方向键(也就是箭头键)都失去作用了。刚刚在 http://grub4dos.jot.com/ 发布的二进制程序解决了 qemu 的问题,不知是否也解决了 vmware 的问题。请报告。

嗯,又试了一下最新版本,发现VMWare中的此问题也已解决,可见就是这个BUG引起的。不过仍然发现有一个问题(在VPC中也有出现),那就是找不到/menu.lst(MENU.LST文件位于在C:\下),但(hd0,0)/menu.lst则可以。比如说启动GRUB.EXE时不指定任何命令行参数或在命令行下指定--config-file=/menu.lst的话会失败(随后将自动转入GRUB命令行),而在命令行下指定--config-file=(hd0,0)/menu.lst则可以正常显示menu.lst中的菜单。
作者: 不得不爱     时间: 2006-6-14 13:22
我刚才试了下,我的问题已经解决了!不知道中文版好久有?
作者: 不得不爱     时间: 2006-6-14 13:28
还有连原来GRUB在启动时会关闭小键盘灯的问题也解决了!
作者: 不得不爱     时间: 2006-6-14 13:34
不过现在怎么/menu.lst会无条件执行?如果有/menu.lst内在菜单就不会出现,这是怎么回事?
作者: 不点     时间: 2006-6-14 15:52
wengier: 你说到的问题,我会再看看的。

qwe1234567:不要等中文版,估计很快会发布 pre6 的。

本来就是这样设计的,当 menu.lst 和 GRLDR 在同一分区、同一根目录时,优先执行它;也就是说,它在 preset_menu 之前就要检查执行了。

---------

这还没完,还得麻烦你们继续测试,更改之后我会来这里通报的。你们刚刚下载到的,是一个最保守的版本,把 A20 控制中有关重启键盘的指令全都去除了。你们的机器是正常了,但 USB 键盘的机器可能就遭殃了。所以,还得再打开某些设置,看看怎么样可以照顾更多的机器。这恐怕要反复多次。
作者: 不得不爱     时间: 2006-6-14 16:00
pre5可以把它去掉吗?有需要我们继续测试的尽管说!
作者: 不点     时间: 2006-6-14 17:16
刚刚上载了一个中文版的,你可以暂时用用。

我在等待 DVHZ 的测试情况。根据他的测试,再做相应调整。
作者: 不点     时间: 2006-6-15 11:24
好了,DVHZ 和 qwe1234567 的问题都已经彻底解决了,感谢您们两位不辞辛劳大力协助!现在还有 wengier 的问题没能解决。这个问题仍然很顽固,比 qwe1234567 所说的问题还要顽固。同样,如果该问题发生在我的机器上,我比较有把握的说,能够解决它。但是,发生在别人的机器上,我就缺少调试的手段了。

该问题产生的原因,应该是 GNU GRUB 设计上的一个缺陷造成的。GNU GRUB 在读取磁盘扇区之后,要对所读取的磁道进行缓冲,也就是说,保留一份放在内存中,以便下次读取同一磁盘空间的时候,能够避免访问磁盘。

可是这个机制带来的 BUG 非常多,而且这样的 BUG 都非常隐蔽。GNU GRUB 之所以败在 LILO 手下,有三大根本原因(我的观点):一个是 A20 门控问题,一个是引导路线曲折蜿蜒(BUG隐蔽而且多多)所带来的各种不良后果,再一个就是糟糕的磁盘缓冲设计。到目前为止,前两个问题都在 GRUB4DOS 中得到了比较好的解决。如果我们能够拔掉这最后一个钉子,那么就为 GRUB4DOS 的普及扫清障碍了。

实际上,GRUB 中连续访问同一个磁盘文件的现象并不多见,所以,磁盘缓冲其实是多此一举,没什么必要性,也因此它并不能给磁盘访问带来足够的好处,反而是个累赘,因为多了一道手续,既要为缓冲区保留可贵的内存,又要复制磁盘扇区到缓冲区,实际上反而是减缓了磁盘访问的效率。

可见,如果把磁盘缓冲这块赘肉割去,那么 GRUB 的代码结构和内存占用就能够更加精简、更加合理以及更加有效率。不过这是我们未来可以考虑的问题,现在顾不上这些了。

----------

wengier 如果能制作一个磁盘映像来反复再现该问题,那就比较容易解决了,因为我可以亲自去调试。或者,wengier 如果能有时间的话,也可以自己调试。调试从 stage2.c 入手,其中有下面的代码:

                  /* Try config_file */
                  if (*config_file)
                        is_opened = grub_open (config_file);

首先应该在这后面添加一条打印语句,看看 grub_open 的操作是成功了还是失败了(应该是失败了,否则不会有问题;但还是要打印出来确认一下)。

既然是失败了,那我们就要跟踪到 grub_open 的函数体内部,在里面添加其它打印命令,看看究竟是什么语句导致 grub_open 返回代表失败的 0 值的。如果还要调用其它函数,那就继续跟踪进去,这样一步一步,反复试验,顺藤摸瓜,总可以把那个 BUG 揪出来的。
作者: 不得不爱     时间: 2006-6-15 14:59
中文版已经收到。
现在我还有个问题,就是如果从可可启动光盘启动硬盘后,如果不按方向键让内植菜单停下来手工选择正确的寻找路径的话,GRUB就会进入GRUB命令提示符出现:

  Quote:
find --set-root /menu.lst         

Error 17: File not found
Booting 'find /boot/grub/menu.lst'

fallback 2
find --set-root /boot/grub/menu.lst
Error 17: File not found
  Booting 'find /grub/menu.lst'

fallback 3
find --set-root /grub/menu.lst
(hd0,4)                                                                  
Filesystem type is fat, partition type 0xb
configfile /grub/menu.lst
   
About to reset the boot drive. Report bug if the machine hangs here.      



  Quote:
    GNU GRUB  version 0.97  (639K lower / 130048K upper memory)              
                                                                             
[ Minimal BASH-like line editing is supported.  For the first word, TAB     
   lists possible command completions.  Anywhere else TAB lists the
   possiblecompletions of a device/filename. ]

grub>

这个问题可以解决吗?

[ Last edited by qwe1234567 on 2006-6-15 at 15:14 ]
作者: 不点     时间: 2006-6-15 15:52
我来分析一下。在硬盘中找 /menu.lst 和 /boot/menu.lst 都失败了,它们应该是不存在。

/grub/menu.lst 找到了,它在 (hd0,4) 分区,也就是第一个逻辑分区。

当执行 configfile /grub/menu.lst 时,出现了未知错误,导致打开该文件失败。

因此我感觉这个 BUG 和 wengier 说的是一样的。你们能否制作一个硬盘和光盘映像,让我也可以再现这一情况呢?

制作映像之后,要先在你们自己的虚拟机下运行,确信能够再现这一错误情况,然后才可以传给我。

通过你们的描述,我越发觉得应该将 GRUB 的磁盘缓冲摘除掉了!它所带来的坏处,简直没完没了、无穷无尽了。
作者: 不得不爱     时间: 2006-6-15 17:13
这个问题嘛,你就用我上次给你的硬盘映像就可以了,光盘映像嘛随便找一个就可以了,反正你只要从光盘启动后选择从硬盘启动就可以了!
作者: Wengier     时间: 2006-6-15 23:56


  Quote:
Originally posted by 不点 at 2006-6-15 03:52 PM:
我来分析一下。在硬盘中找 /menu.lst 和 /boot/menu.lst 都失败了,它们应该是不存在。

/grub/menu.lst 找到了,它在 (hd0,4) 分区,也就是第一个逻辑分区。

当执行 configfile /grub/menu.lst 时,出现了未知错误,导致打开该文件失败。

因此我感觉这个 BUG 和 wengier 说的是一样的。你们能否制作一个硬盘和光盘映像,让我也可以再现这一情况呢?

制作映像之后,要先在你们自己的虚拟机下运行,确信能够再现这一错误情况,然后才可以传给我。

通过你们的描述,我越发觉得应该将 GRUB 的磁盘缓冲摘除掉了!它所带来的坏处,简直没完没了、无穷无尽了。

呵,基本上就是这种情况。经一些测试和研究后本准备现在上来说说具体情况的,没想到让qwe1234567先说了(主要是这几天太忙,刚才才有点时间继续测试)。。menu.lst是在C:\上,也就是(hd0,0)/上。实现方法很简单,比如说用MS-DOS 7.10完整安装版的光盘版启动,出现启动菜单后选3从硬盘启动,启动后再运行GRUB的话就会出现这种结果,而且一定会出现。
作者: 不得不爱     时间: 2006-6-16 20:19


  Quote:
Originally posted by Wengier
嗯,又试了一下最新版本,发现VMWare中的此问题也已解决,可见就是这个BUG引起的。不过仍然发现有一个问题(在VPC中也有出现),那就是找不到/menu.lst(MENU.LST文件位于在C:\下),但(hd0,0)/menu.lst则可以。比如说启动GRUB.EXE时不指定任何命令行参数或在命令行下指定--config-file=/menu.lst的话会失败(随后将自动转入GRUB命令行),而在命令行下指定--config-file=(hd0,0)/menu.lst则可以正常显示menu.lst中的菜单。

你这说的问题不会和我说的一样吧?
作者: fastslz     时间: 2006-6-16 21:21


  Quote:
Originally posted by qwe1234567 at 2006-6-15 14:59:
就是如果从可可启动光盘启动硬盘后
find --set-root /menu.lst         

Error 17: File not found
Booting 'find /boot/grub/menu.lst'

fallback 2
find --set-root /boot/grub/menu.lst
Error 17: File not found
  Booting 'find /grub/menu.lst'

fallback 3
find --set-root /grub/menu.lst
(hd0,4)                                                                  
Filesystem type is fat, partition type 0xb
configfile /grub/menu.lst
   
About to reset the boot drive. Report bug if the machine hangs here.

这个现象我也经常出现,还有装有grub的IMG文件在光盘上也无法启动,好象有EasyBoot就被排斥了。用0.95的stage1 stage2做成EasyBoot可引导IMG是行的,可能是我比较菜看了好多此类贴子也试了好几种办法,0.97还是没办法运行在光盘上。
这几天装了个虚拟机感觉批处理或某个程序还要照顾能否在虚拟机运行还是不习惯,相比之下不点大师伟大的多!
作者: Wengier     时间: 2006-6-16 23:18


  Quote:
Originally posted by qwe1234567 at 2006-6-16 08:19 PM:

你这说的问题不会和我说的一样吧?

看起来是一样的吧,只不过是我先说的。等我准备来详细报告情况时,你又说了。
作者: 不点     时间: 2006-6-17 15:53
已经上载了新的编译, 还是在这里:

http://grub4dos.jot.com/

请试试看,情况有无变化?
作者: fastslz     时间: 2006-6-17 18:02
试过了,以下真机测试

menu.lst配置情况:
title   虚拟软驱文件1
map --mem /boot/grub/288.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

menu.lst和img同在主分区的3个不同目录能引导
menu.lst在主分区,img在其他分区能引导
menu.lst在(hd0,4)分区,img在(hd0,4)分区不同目录能引导
menu.lst在(hd0,4)分区,img在(hd0,5)分区不同目录不能引导

menu.lst配置,先fonts后bj2008.xpm.gz和以前一样不能显示中文
只有fonts没有bj2008.xpm.gz也无法显示中文
作者: 不点     时间: 2006-6-17 18:34
你这个用法是错误的。

map --mem /boot/grub/288.img (fd0)

这条命令不能单独使用,必须在它之前运行 root (...) 或者 find --set-root /boot/grub/288.img 命令才行。

凡是只有路径名(/.../.../filename)而省略设备名(例如(hd0,0))的文件,都需要在该文件所在的命令之前先运行 root  (...) 或者 find --set-root 命令,否则,这个文件就不具有完整的文件名,打开该文件时会失败的。
作者: fastslz     时间: 2006-6-17 19:04
郁闷啊....
以前因为只要把menu.lst和img放在一起不管哪个分区都能启动所以被忽略了今天才知道这个用法用是错误的,grub就是强!

难怪刚才find到另外一个menu.lst配置能启动的

哦今天A20 显示off的
作者: 不点     时间: 2006-6-17 19:22
A20 是 IBM 糟糕的设计。在机器上电时,A20 处于允许状态,当 BIOS 把控制权交给磁盘上的引导扇区时,A20 已经被 BIOS 禁止了,这样可以较好的兼容以前的老的 BUGGY 程序。可是如今,那些满身臭虫的程序早都不存在了,所以,A20 就没必要再关闭了,也就是说,始终打开 A20 并无坏处。

然而,为了兼容某些破旧的机器,在启动一个操作系统之前,还是要关闭 A20,否则,那些机器有可能不正常。
作者: 不得不爱     时间: 2006-6-17 20:13
现在可以正常使用了!
作者: 不得不爱     时间: 2006-6-17 20:29
不过中文的提示信息有点乱马!
作者: 不得不爱     时间: 2006-6-17 20:36


  Quote:
Originally posted by 不点 at 2006-6-17 18:34:
你这个用法是错误的。

map --mem /boot/grub/288.img (fd0)

这条命令不能单独使用,必须在它之前运行 root (...) 或者 find --set-root /boot/grub/288.img 命令才行〠...

可是map --mem /boot/grub/288.img (fd0)的确可以启动呀,而且比map --mem (hd0,4)/boot/grub/288.img (fd0)用起来要方便多了!不知道GRUB对map --mem /boot/grub/288.img (fd0)这样的命令的支持能改进一下吗?
作者: fastslz     时间: 2006-6-17 20:42


  Quote:
Originally posted by 不点 at 2006-6-17 18:34:
你这个用法是错误的。

map --mem /boot/grub/288.img (fd0)

这条命令不能单独使用,必须在它之前运行 root (...) 或者 find --set-root /boot/grub/288.img 命令才行。

凡是只有路径名(/.../.../filename)而省略设备名(例如(hd0,0))的文件,都需要在该文件所在的命令之前先运行 root  (...) 或者 find --set-root 命令,否则,这个文件就不具有完整的文件名,打开该文件时会失败的。

我的那用法用到现在也能实现只要目录结构是/boot/grub不管在哪个分区上也能启动,但是这方法总是另类的今天想改写menu.lst配置碰到一点问题想请教

用find --set-root /..../..../.....img装载镜像
那 bj2008.xpm.gz或fonts怎么装载?
find --set-root /boot/grub/bj2008.xpm.gz
savedefault
splashimage /boot/grub/bj2008.xpm.gz

find --set-root /boot/grub/fonts
savedefault
fontfile /boot/grub/fonts

不知道有这样行不?这样一来多个menu.lst使用一个bj2008.xpm.gz或fonts,拽吧

[ Last edited by fastslz on 2006-6-17 at 20:46 ]
作者: 不点     时间: 2006-6-17 21:45
qwe1234567:

通常你这么用也是可以的。这是新近的 GRUB4DOS 特有的,以前 0.2.0 的没有这个功能。菜单文件所在的分区,一般就是作为默认分区来的。所以,省略了分区号的文件名,也是可以打开的。但是,菜单文件中也可以使用 root 以及  find --set-root 命令,这些命令会改变默认分区,当默认分区改变时,以后的文件名如果没有带分区号,那么就把新的默认分区作为该文件的分区了。

fastslz:

你的这些用法应该都行,不行的话,可以报告 BUG。
作者: Wengier     时间: 2006-6-17 23:09


  Quote:
Originally posted by 不点 at 2006-6-17 03:53 PM:
已经上载了新的编译, 还是在这里:

http://grub4dos.jot.com/

请试试看,情况有无变化?

嗯,现在这个问题已经解决了。

另外,发现如用GRUB4DOS来重启动DOS的话,在启动DOS的过程中常会发生一些不正常的结果(比如死机或显示错误信息),比如在加载EMM386时。
作者: 不得不爱     时间: 2006-6-18 07:54
不点:
     中文的提示信息有点乱码!请解决!
作者: 不点     时间: 2006-6-18 09:55
中文的问题我暂时还不能关注,请报告给 gandalf 吧。wengier 说的再次启动 DOS 会死机的问题,似乎以前我也有碰到,但后来很难碰到了。记得以前是仿真某个磁盘之后,就容易出现这样的情况。希望能把这个问题明朗化,找出它出现的规律,以便确定问题的根源。好了,既然前面所述问题都解决了,现在就准备发布 0.4.2pre6 了。
作者: 不得不爱     时间: 2006-6-18 19:00
可是中文提示你应该可以修改吧!而且问题就出现在现在这个GRUB里,以前的版本没有问题呀!

[ Last edited by qwe1234567 on 2006-6-18 at 19:01 ]
作者: 不得不爱     时间: 2006-6-18 19:17
能否增强find --set-root 命令让它支持find --map --mem /boot/grub/288.img (fd0)
这样的命令,而这个命令等同于find --set-root /boot/grub/288.img (fd0)和map --mem /boot/grub/288.img (fd0),可以吗?我知道这一定会给你带来不少的可能,不过这样功能就增强了,以后要加载什么文件可以直接用FIND命令来加载,这样不是就方便了用户了!
作者: 不点     时间: 2006-6-18 20:39
中文部分我并未改动,也许是由于新的改动在打包的时候影响了中文部分,恐怕不容易发现究竟哪里弄错了。可以进一步再观察观察,看看问题出在哪里。那 8 个 patch,改动前面的,会影响后面的,但只要编译通过,我就认为基本没事了。所以,究竟怎么错了,还需要更详细的报告。我能解决的,我解决;我解决不了的,等待别人来解决。我自己不使用中文版,所以,我没能发现问题。不过你可以和中文版的相关朋友联系,看看他们有什么经验。

find 这么用,好像没什么必要吧?属于可有可无的功能,从逻辑上讲也不够合理。因为按照你的这个逻辑,所有的类似命令都要合二为一了,那改动就不是一处两处了。
作者: 不得不爱     时间: 2006-6-18 21:13
我看了下从00025E40H行到00025F80H行的代码出了问题!
作者: 不点     时间: 2006-6-19 09:49
我试验了,新版没发现乱码问题,比如说用你第一次给的硬盘映像中的 menu.lst 就显示正常的中文。你要是发现了问题,那恐怕也是老版本本来就有的问题,只是有时碰到,有时碰不到罢了。感觉不严重,暂时忽略这一问题,因为将来的国际化版本会一并解决这类问题的。
作者: 不得不爱     时间: 2006-6-19 12:47
menu.lst 显示正常,只是提示不正常,老版本正常显示提示!
作者: fastslz     时间: 2006-6-19 13:11
中文乱码我没发现。


只是用map --mem /boot/grub/288.img (fd0)的配置,发现一问题
虽然用这配置启动路径比较有弹性,只要menu.lst和grub目录在同一分区就能启动,但是如果在map --mem /boot/grub/288.img前面加了fallback 1后288.img是不存的话就会出现问题了:即不提示Press any key to continue...也不跳至fallback 2而是如下列连续滚屏现象

Error 17: File not found
Booting 'map --mem /boot/grub/288.img

fallback 1

除此之外还没发现和指定img路径的其他错误现象

老版本的也有这情况

[ Last edited by fastslz on 2006-6-19 at 13:12 ]
作者: 不得不爱     时间: 2006-6-19 15:07
给你发个图片看看!
附件 1: a.jpg (2006-6-19 15:07, 29 K, 下载附件所需积分 1点 ,下载次数: 2)



作者: 不点     时间: 2006-6-19 15:11
是的,中文应该不会有问题,因为中文部分根本就没改动。由于这部分没改动,所以即使有问题,现在也不好去解决,因此不要再报告了。

fastslz 所说的问题是由 fallback 的错误设置引起的。当一个菜单项失败时,如果定义了 fallback 菜单项,则转去执行 fallback 所定义的菜单项。

如果 fallback 指向该出错的菜单项自己,那当然会无限循环了。所以一定要注意不要把 fallback 后面的数字填错了。这个数字,如果是 0 ,表示第一个 title 所代表的菜单项; 1 表示第二个,等等。

fallback 一般放在紧接 title 后的第一条语句。当然,如果必要,也可以在同一组 title 命令集里面放置多个 fallback 语句。fallback 是控制流程走向的唯一一条语句。
作者: 不得不爱     时间: 2006-6-19 15:40
我刚才在真机里试了下正常,VPC中文提示乱马
作者: Wengier     时间: 2006-6-19 21:19


  Quote:
Originally posted by qwe1234567 at 2006-6-19 03:40 PM:
我刚才在真机里试了下正常,VPC中文提示乱马

那可能与VPC本身有关...应以真实机为标准。
作者: 不得不爱     时间: 2006-6-21 16:01


  Quote:
Originally posted by Wengier at 2006-6-19 21:19:


那可能与VPC本身有关...应以真实机为标准。

我刚才试了下,好象与硬盘镜像有关系,换了个镜像却正常了,因此应该是个BUG