Board logo

标题: 请紧急测试GRUB4DOS, 谢谢 [打印本页]

作者: 不点     时间: 2004-7-3 00:00    标题: 请紧急测试GRUB4DOS, 谢谢

这次对 grldr 的启动代码又做了精简和优化. 我担心这会引来新的 BUG.

如果没问题, 就准备向 GNU 提交补丁了. 所以请加紧测试, 尤其是对 FAT12 和 FAT16 来测试 GRLDR 是否存在失败的可能. 一旦有失败的情况, 请尽快在这里发消息. 谢谢.

ftp://ftp.linuxeden.com/tinybit/bootgrub
ftp://ftp.linuxeden.com/tinybit/grldr
ftp://ftp.linuxeden.com/tinybit/grub.exe



作者: Wengier     时间: 2004-7-4 00:00
刚在我的FAT16的C盘下试了,可以正常运行呢..
作者: 不点     时间: 2004-7-4 00:00
pre8 发布:
ftp://ftp.linuxeden.com/tinybit/grub_for_dos-0.2.0pre8.tar.gz

作者: 不点     时间: 2004-7-6 00:00
新的 pre8 发布, 增加了 Gandalf 的补丁, 可以支持 NTFS 和 CDROM 了:
ftp://ftp.linuxeden.com/tinybit/grub_for_dos-0.2.0pre8.tar.gz
试试看

[em27][em27][em27][em27][em27][em27][em27][em27][em27][em27][em27][em27][em27][em27][em27][em27]

[此贴子已经被作者于2004-7-6 上午 08:12:01编辑过]



作者: chenall     时间: 2004-7-6 00:00
NTFS测试成功!可是CDROM要用什么命令启动呢?

作者: Wengier     时间: 2004-7-8 00:00
不点:现在可以用(cd)的方式来读取光盘上的文件了,是吗?
作者: Gandalf     时间: 2004-7-8 00:00

scdrom --install ; 安装光驱的驱动(atapi, 不支持 USB)
root (cd) ; 可以访问光驱了

--------
scdrom --bootcd ; 转入光驱启动.


作者: chenall     时间: 2004-7-8 00:00
无法使用CDROM
CDROM是LITEON的
用scdrom --install显示安装成功
用root (cd)显示磁盘不存在
光驱里面有可启动光盘

作者: 不点     时间: 2004-7-8 00:00
再测试, 呵呵!

ftp://ftp2.linuxeden.com/tools/grldr

这几天我把 BOOTGRUB 揉合到 GRLDR 中了, 现在可以不用 BOOTGRUB 而只用一个 GRLDR 就够了:

C:\GRLDR="start grub"

如果测试失败, 请尽快回复, 谢谢!


作者: Wengier     时间: 2004-7-9 00:00
又试了一下,发现两个问题:

1:整合后的GRLDR无法启动(C盘还是FAT16);

2:在GRUB for DOS/NTLDR命令行下输入scdrom --install或scdrom --bootcd后系统直接死机,只能按RESET键来重启(我的是IDE的光盘刻录机)。VPC中则测试通过。可见其兼容性仍有问题。



作者: 不点     时间: 2004-7-9 00:00
刚刚又改掉一个毛病, 再试试:
ftp://ftp2.linuxeden.com/tools/grldr
ftp://ftp.cosoft.org.cn/incoming/grldr

作者: Wengier     时间: 2004-7-9 00:00
新的GRLDR我又测试一下,还是不行。而且关于光盘支持的问题请问如何解决?


作者: wangsea     时间: 2004-7-9 00:00
我手上有一个由gurb for dos完全启动光驱的的文件,不是你制作的。好象是bcdl出品,启动光驱没有bug。
我研究后发现它的启动光盘是这几个文件:
cdboot.bs ,Bcdl.bin,Cwsdpmi.exe,Vide-cdd.sys

启动命令为:

chainloader /boot/cdboot.bs

如果你要参考的话如何传给你?

作者: Wengier     时间: 2004-7-9 00:00
楼上的wangsea,你说的启动盘是指我们制作的某个dos7.1启动盘吧,就是用GRUB for DOS + BCDL作成软盘/硬盘/光盘启动的,本论坛中有下载的。不是bcdl出品的,而是由我将grub for dos和bcdl等组合成可以直接支持光盘启动的启动盘。关于BCDL我们已有诸多讨论了,包括一些技术性细节等,具体请看相关帖子。不过通过测试我发现BCDL比SBM的通用性强这是肯定的。


作者: 不点     时间: 2004-7-9 00:00
光盘支持不是由我制作的, 完全是 GANDALF 兄制作的. 我现在没有时间顾及这个, 以后有时间再细看.

我现在的兴趣集中在捏合 BOOTGRUB 和 GRLDR 上了. 这个我早就有打算, 只是没有时间做. 现在差不多了.

不知为什么还是不行? 源程序在这里:

ftp://ftp2.linuxeden.com/tools/grldrstart.S

麻烦大家一同看看毛病在哪?

wengier 说 FAT16 不行, 那么 FAT32 以及 NTFS 怎么样呢?


作者: chenall     时间: 2004-7-9 00:00


  Quote:
以下是引用不点在2004-7-9 上午 09:34:35的发言:
光盘支持不是由我制作的, 完全是 GANDALF 兄制作的. 我现在没有时间顾及这个, 以后有时间再细看.

我现在的兴趣集中在捏合 BOOTGRUB 和 GRLDR 上了. 这个我早就有打算, 只是没有时间做. 现在差不多了.

不知为什么还是不行? 源程序在这里:

ftp://ftp2.linuxeden.com/tools/grldrstart.S

麻烦大家一同看看毛病在哪?

wengier 说 FAT16 不行, 那么 FAT32 以及 NTFS 怎么样呢?


我用FAT32和FAT16的均启动不了,选择菜单后按回车就死机.

注:我的FAT32分区是第二个分区,第一个分区是FAT16的.
作者: 不点     时间: 2004-7-9 00:00
第一个分区是 FAT16, 它只要失败, 总是失败. BOOTGRUB/GRLDR 总是查找第一个分区.

所以, 请用另外一个 FAT32/NTFS 的 C: 分区进行测试.

另外, 如果大家都猜测是 NTFS_CDROM 补丁的问题的话, 我可以去掉这个补丁重新编译一次.


作者: Wengier     时间: 2004-7-9 00:00
GRLDR启动不了应该不是NTFS_CD补丁的问题.前面那个支持NTFS和CD的BOOTGRUB+GRLDR就可以正常启动,只是后来两者结合成一个GRLDR后就无法正常启动了.
作者: chenall     时间: 2004-7-9 00:00
我用BOOTGRUB+两者结合后的GRLDR可以启动FAT16和FAT32
作者: 不点     时间: 2004-7-9 00:00
麻烦 chenall 兄再测试一次, 这次用 GRLDR 的开头 4 个扇区制作一个 BOOTGRUB 文件, 看看可否用这个 BOOTGRUB + GRLDR 来启动.


作者: chenall     时间: 2004-7-9 00:00


  Quote:
以下是引用不点在2004-7-9 上午 03:03:40的发言:
麻烦 chenall 兄再测试一次, 这次用 GRLDR 的开头 4 个扇区制作一个 BOOTGRUB 文件, 看看可否用这个 BOOTGRUB + GRLDR 来启动.


请问BOOTGRUB文件在哪里下载?
是这个吗?
ftp://ftp.linuxeden.com/tinybit/bootgrub
作者: 不点     时间: 2004-7-9 00:00
我是说用 grldr 开头的 4 个扇区制作一个 BOOTGRUB 文件, 然后用它启动 GRLDR 文件.

我这里测试的结果, 仍然失败. 但是这个 BOOTGRUB 却可以启动以前老的 GRLDR 文件. 我的测试环境是 NTFS.

看来新的 NTFS_CDROM 补丁确实有问题.


作者: Wengier     时间: 2004-7-9 00:00
我在VMWare虚拟机的FAT32主分区下又试了一下,用新的grldr开头的4个扇区制作成的bootgrub或以前的bootgrub启动grldr(不管是新的grldr还是旧的grldr)都非常成功,可以正常启动;但若在boot.ini中直接启动grldr则总是失败。我在真实机的FAT16主分区下测试的情况也完全相同,可见在各种FAT分区上的情况是一样的。因我没有NTFS的主分区,所以无法在NTFS上测试。因此,并不能证明NTFS_CD补丁有问题。可能是因为GRLDR不能如此结合才导致不能直接从结合后的GRLDR启动,而bootgrub+grldr则总是成功。


作者: 不点     时间: 2004-7-10 00:00
wengier 的测试, 给我的整合计划判了死刑.[em16]

不过, 成功有代价, 失败也有代价. 虽然此处失败了, 但我们还要继续.

现在是动脑筋的时候了. 我们不是从 GRLDR 截取 800 字节, 它就可以正常启动了吗? 现在我们提出一个问题: 究竟最大可以允许多大的 BOOTGRUB 字节数? 800字节成功了, 132872 字节失败了, 中间一定可以找到一个成功的最大值, 呵呵, 这个有另外的用途...........

作者: Wengier     时间: 2004-7-10 00:00
我刚才试了一下,bootgrub的最大值好像是8191字节(即8KB减去一个字节)。再多一个字节都不行。
作者: 不点     时间: 2004-7-10 00:00
OK, 我刚才也得到这个结果, 正好是 16 扇区减去一个字节, 也就是 8191 字节.

这有两种可能:

1. 微软判断一个引导扇区文件, 如果小于 16 扇区, 它就认为合法, 否则, 它拒绝采用.

2. 微软可以采用任何大小的引导扇区文件, 但是具体装入内存之后, 可能覆盖掉了微软的程序, 导致控制无法传递到我们的 BOOTGRUB 来, 因此导致死机.

不管怎样, 现在好像 8191 个字节是安全了. 请大家多多测试, 看看在别的机器上这是否安全? 用其它任意字节例如 0xff 填充 bootgrub 的尾部, 看看结果是否一样(是否还是8191这个极限)?

注: bootgrub 只有开头 512 字节起引导作用, 其它字节都用不上, 都可以填充为任意字节.

=============

现在应当做另外一个试验, 这次只要 256 次就可判断出来了.

制作一个 8192 字节的 BOOTGRUB 文件. 我们知道 8191 字节是通过了, 我们假定微软采取上述第 2 个方案.

于是, 我们只需要改变 8192 字节中的最后一个字节, 将它从 00 一直变到 FF, 生成 BOOTGRUB_00 至 BOOTGRUB_FF 共 256 个文件. 我们看看这些文件是否有一个会成功. 如果微软采取的是上述第 2 个方案, 则肯定有一个 BOOTGRUB_xx 要成功的. 如果全部失败, 则可以肯定微软不是采用第 2 个方案, 而是采用第一个方案.




[此贴子已经被作者于2004-7-10 上午 10:33:20编辑过]



作者: Wengier     时间: 2004-7-10 00:00
刚才那个我只试了不到10次就得出8191字节这个值了,这回要试256次(当然,有可能小于256次)呀?

能说一下测试bootgrub的最大长度的主要用途是什么吗?
作者: 不点     时间: 2004-7-10 00:00
如果微软是采取第 2 种方案, 那就是说, 它首先把 BOOTGRUB 读入内存, 那么, 我们在 BOOTGRUB 接管控制之后仍然可以查找内存中的 BOOTGRUB 映像. 这样, 我们就可以在 BOOTGRUB 中放入更多的代码, 而不是只有 512 字节了. 这个 512 字节的空间, 确实太狭窄了, 扩展的程序, 只好写入 MBR 之后的扇区, 这很不舒服. 如果有 8K 的代码空间, 我们就可以支持很多文件系统了.


作者: Wengier     时间: 2004-7-10 00:00
不过无论MS是用的第一种还是第二种方案,现在不是已经基本上证明了8KB的bootgrub空间是安全的了吗(除非有网友报告说有问题)?8KB的空间对于支持各种文件系统来说自然已经是完全足够的了,连2KB就足以支持各种FAT和NTFS分区了。而如果是想将bootgrub的内容写入mbr及其后的扇区的话,那就与ntldr的限制无关了,即使再去测试也没有什么用处。


作者: aria     时间: 2004-7-10 00:00
刚才看了故障恢复控制台的bootsect.dat文件,大小为8192字节,从cd4h后均为0
即最后一个字节也为0
作者: 不点     时间: 2004-7-10 00:00
感谢 aria !!!! 你能否把这个文件放到一个我可以下载的地方? 或者用 Email:tinybit@tom.com 传给我? 另外你见过的最大的 bootsect 文件有多大? 也请传给我. 谢谢.

==========

wengier:

我们现在并不能断定 BOOTGRUB 一定被全部读入内存了. 如果 aria 所说的情况可靠的话, 那就证明 bootsect 文件可以达到 8192 这个值, 甚至超过这个值也有可能. 现在我们的任务就是, 确定它被装入到内存中的什么位置上了, 注意, 它有可能被装入 1M 以上的扩展内存中.

还有一个问题顺便也应当解决, 那就是 c:\BOOTSECT="ghgjhghjg" /parameters 命令行参数是否允许非微软的参数? 如果不允许, 则我们就不能再用 config-file 之类的路径了; 如果允许, 我们要定位这个参数N存放在内存中的何处? 以便用这个命令行参数指定的 menu.lst 来取代 (hd0,0)/boot/grub/menu.lst


作者: aria     时间: 2004-7-10 00:00
好,已经发过去了
最大的?好像就数这个最大了
作者: 不点     时间: 2004-7-10 00:00
麻烦 aria 兄再发一次. 刚才我的邮箱执行拒收邮件功能, 现在可以接受 50K 以内的邮件了.

或者最保险的, 可以匿名上传到这里:

ftp://ftp.cosoft.org.cn/incoming/

谢谢.


[此贴子已经被作者于2004-7-10 下午 03:23:25编辑过]



作者: aria     时间: 2004-7-10 00:00
ok,传上去了
作者: 不点     时间: 2004-7-10 00:00
已经收到, 谢谢.
============
看了这个文件, 感到非常震惊! aria 兄没有仔细看过吗? 建议你也看看, 大家共同研究一下.

这个文件和你机器 C: 分区开头的 16 扇区不是几乎完全一样吗? 无非是将 N.T.L.D.R 改成了 C.M.L.D.R

是这样吗? 仅仅只有两个字节的差别, 是吗?
=========
既然如此, 就麻烦你再上传 CMLDR 文件. 它位于你的 C: 盘根目录. 并且可能是隐藏文件.










[此贴子已经被作者于2004-7-10 下午 06:16:24编辑过]



作者: aria     时间: 2004-7-10 00:00
是啊
它的作用就是引导cmldr,cmldr是ntldr的变体,和setupldr.bin几乎是一样的
只有少数几处不同



[此贴子已经被作者于2004-7-10 下午 06:50:59编辑过]



作者: 不点     时间: 2004-7-10 00:00
setupldr.bin 是什么作用? 也请上传吧. 你的根目录或者 cmdcons 子目录还有什么重要的文件, 都可以上传.

为什么在我的机器上一用 C:\BOOTSECT.DAT="hhhhhhh" /cmdcons 就死机?


作者: aria     时间: 2004-7-10 00:00
setupldr.bin是winnt安装时引导系统的,也在cmdcons目录下
剩下的文件与本贴关系应该不大了吧
死机?这个问题比较奇怪,至少在我这,改成C:\BOOTSECT.DAT="hhhhhhh" /cmdcons
也可以正常启动

作者: 不点     时间: 2004-7-11 00:00
试试这个:

ftp://ftp.linuxeden.com/tinybit/grldr

BOOT.INI:

C:\GRLDR="GRLDR"


作者: aria     时间: 2004-7-11 00:00
成功启动!
第一个主分区为FAT32,第二个主分区为NTFS
作者: chenall     时间: 2004-7-11 00:00
第一个主分区为FAT16,第二个主分区为FAT32
放在第一个主分区上启动成功,
放在第二个主分区上启动不成功.
作者: 不点     时间: 2004-7-12 00:00
已经重新上传:
ftp://ftp2.linuxeden.com/tools/grldr
ftp://ftp.linuxeden.com/tinybit/grldr
看看这次怎么样? 这是没有打 NTFS_CDROM 补丁的版本, 因此不应当失败.


作者: Wengier     时间: 2004-7-12 00:00
可见先前结合后的GRLDR不能启动还是GRLDR开头的1024字节的原因造成的。经过在FAT16和FAT32下的测试结果(两者测试情况完全一样),上面的GRLDR可以正常启动;然后我用这个GRLDR的前1024字节替换原带有NTFS_CD补丁的结合后却无法直接启动的GRLDR的前1024字节,结果直接启动这个新的GRLDR非常成功,不仅可以直接启动到GRUB下,而且可以支持NTFS和CD驱动器。可见问题的根本还是先的那个GRLDR的前1KB的内容导致文件总大小不能超过8191字节,否则无法启动。使用新的这1KB内容来替换以前的那前1KB内容就一切正常了(至少在FAT16/32分区上是如此)。

附:以下是带有NTFS_CD补丁的结合后可正常启动的GRLDR下载:

http://newdos.yginfo.net/dosware/grub/grldr


作者: aria     时间: 2004-7-12 00:00
难道原来的1KB修改了后面的内容?
作者: Wengier     时间: 2004-7-13 00:00


  Quote:
以下是引用aria在2004-7-12 上午 11:55:42的发言:
难道原来的1KB修改了后面的内容?

其实倒并不见得是原来的1KB修改了后面的内容,因为我试了一下用NTLDR调用一些其它的BS文件,也有8191字节的大小限制,即只要超过这个大小就无法正常启动,即使除了前512字节外后面的内容全是CHR(0)字符(比如我将某512字节的BS文件的后面内容加长并全部填零,如果小于或等于8191字节则可以启动,如果大于8191字节则死机或出错)。估计是新的GRLDR的前1KB采取了某种方法或技巧来突破了8191字节这个限制,使得新的GRLDR能够被NTLDR直接调用且正常启动。


作者: gmy     时间: 2004-8-1 00:00
关于GRLDR的命名与位置实验1
GRLDR改名后,无法启动. 提示:
try hd0,0...skip
...
...
Error实验2
GRLDR放在/boot/gho1/下,用BOOT.INI设置好了,GRLDR也用16位编辑器改了相应的二级目录,但还是无法启动. 出错同上.不知GRLDR是否加了密? 我用的是 linuxeden.com的0.2的pre10的GRLDR


作者: Gandalf     时间: 2004-8-2 00:00
[em12]