Board logo

标题: GRUB 伤脑筋的问题, 大家会诊一下 [打印本页]

作者: 不点     时间: 2003-11-14 00:00    标题: GRUB 伤脑筋的问题, 大家会诊一下

我知道这里的 DOS/BIOS 高手多, 大家齐心协力, 看看这是怎么回事.

新版的 GRUB 带来了许多新功能, 比如, 可以仿真任意尺寸的软盘或者硬盘映像; 不仅可以从仿真磁盘读出, 还可以写入仿真磁盘; 另外, 还可以启用 "就地仿真" 功能, 这样, 在 GRUB 的命令行状态就可以使用仿真了.

然而, 出现了一个奇怪的事情详述如下:

第一种情况, 我用

map (hd1,0)/dos98.img (fd0)

chainloader (hd0)+1

boot

这是从 C: 盘启动 win98, 这样启动后, 在 win98 里面可以正常访问仿真后的软盘内容.

第二种情况, 用

map (hd1,0)/dos98.img (fd0)

map --hook

(上述这条命令启用就地仿真功能)

chainloader (hd0)+1

boot

结果, 进入 win98 后发现软盘不能访问了, 软盘的第一扇区被改写了, 其它扇区似乎都还在, 没有遭到破坏.

第三种情况, 用

map (hd1,0)/dos98.img (fd0)

map --hook

map --unhook

(上述这条命令解除就地仿真功能)

chainloader (hd0)+1

boot

这样也不行, 软盘映像第一扇区仍然被毁.

第四种情况, 用

map --read-only (hd1,0)/dos98.img (fd0)

(上述这条命令禁止用 int13/AH=03h 或者 int13/AH=43h 写入软盘映像)

map --hook

chainloader (hd0)+1

boot

这样启动 win98, 软盘不再被毁.


根据以上情况, 初步可以断定是某个非常隐蔽的 int13/AH=03h 或者 int13/AH=43h 写入了软盘.

首先, win98 是在 vmware 中, 我没有安装多余的软件, 不可能染病毒; 其次, 即使 win98 染了病毒, 想想它为什么在第一种情况不破坏软盘呢? 所以, 应当不是 win98 等这类操作系统的原因造成的.

那么问题就集中在 GRUB 的代码上了. 然而 GRUB 上很少有写磁盘的操作, 尤其找不到写软盘的操作. GRUB 在极少数情况下才写入磁盘, 例如安装 GRUB 到 MBR 等等. 这类操作, 我们根本都不可能涉及, 怎么突然会出现写入软盘这样的动作呢?

实在是一头雾水!!


作者: 如是大师     时间: 2003-11-14 00:00
试试看..再说..
作者: 不点     时间: 2003-11-15 00:00
哇!本来怀疑 GRUB 代码有问题,把 biosdisk 函数开头加上判断,如果是写盘操作就打印出错信息并死循环。这样满以为会死的,结果,没有死,还是一直启动了 win98,在 win98 一看软盘,当然第一扇区仍然破坏掉了。

因此,我猜测是 win98 写入了软盘,换用 DOS,或许就不再写入软盘了。果然,在启动 WIN98 时按 F8 呼出菜单,选择安全模式命令行启动,这下子,软盘没有问题了。

至于说 win98 在什么时候写入软盘,这还有待研究。这究竟算是 win98 的 BUG 呢?还是它的秘密?另外,它会不会破坏掉硬盘?

如果它(哪怕是偶然有一次)破坏硬盘第一扇区,那简直受不了。软盘第一扇区不包含重要数据,然而硬盘第一扇区却有分区表,如果这个弄丢了,整个硬盘不就完了?

另外,奇怪的是,win98 也并非任何时候都破坏软盘。在上述第一种情况下,它总是不破坏。只是用了 --hook 之后,它才破坏。


作者: cba-xyz     时间: 2003-11-15 00:00
这里懂程序的人不多吧,支持你创作的软件。
作者: Wengier     时间: 2003-11-15 00:00
我用GRUB的map命令“就地仿真”虚拟软盘后,用chainloader/boot命令启动到MS-DOS 7.1(是用的“MS-DOS 7.10完整安装版”安装的DOS)后运行Win98,但出现"Unable to write to Drive C"的蓝屏错误或者直接黑屏死机而无法继续启动到Win98界面下,重启动后发现此IMG镜像已损坏而无法读取;而如果不先用map命令虚拟软盘,则用chainloader/boot命令启动DOS+Win98后不会出现这些现象,而是正常启动。

随后我将Win98的“系统属性”中的“使用32位磁盘存取”功能禁用了,再用GRUB用跟上面同样的命令来调用启动MS-DOS 7.1+Win98启动,结果问题果然解决,不仅启动到了Win98界面下,而且软盘无任何损坏!可见目前GRUB的虚拟软盘的“就地仿真”功能似乎与Win98的32位IFSMGR子系统功能还不兼容,导致如果启用“32位磁盘存取”时Win98无法正常启动/使用。

[此贴子已经被作者于2003-11-15 5:32:49编辑过]



作者: 不点     时间: 2003-11-15 00:00
非常感谢 Wengier! 感谢您的重大发现。情况仍然很复杂,请继续关注这一问题,试图给它一个完全的解决。

我来报告一下我测试的新情况。我用就地仿真启动,按 F8 出现菜单,选择 command prompt only,这时,在 DOS 下访问软盘正常。然后,在 DOS 命令行敲入 win 启动 win98,结果,软盘第一扇区变成垃圾了。

这就进一步证实了,GRUB 没有写软盘的操作,是 win98 而不是别的任何程序写入了软盘。

结合刚才 Wengier 所述,是否可以认为,win98 的 “32位磁盘存取” 本身存在着 BUG 呢?前面我已经证实了,通过禁止 int13/ah=3h/ah=43h 就可以确保软盘不被损坏。因此,这个 “32位磁盘存取” 也是通过 int13/ah=3/ah=43 来写入软盘的。我的疑问就是:它干嘛要这么干?这有什么意图?难道说,“32位磁盘存取” 就必须调用这些写盘的功能吗?事实上在不用就地仿真时,“32位磁盘存取” 并未调用写盘功能。所以,我目前觉得,这要么是 “32位磁盘存取” 的 BUG,要么是什么未公开的秘密。

Wengier 兄,你再看看,那个破坏了的硬盘,究竟有多少个扇区遭到了破坏?我猜想可能也正好是 MBR 一个扇区被毁掉。

另外,假如问题的根源就是这么样的,那么请大家建议一下,我们的程序应当怎么对付这一情况?谢谢。


作者: 不点     时间: 2003-11-15 00:00
在 google 中查找 “32位磁盘存取” 得到这样的结果:

------------------------------

二,在Windows环境下对CD-ROM进行操作时,显示出“32磁盘访问失败”,然后死机?

很显然,Windows的32位磁盘存取对CD-ROM有一定的影响。CD-ROM大部分接在硬盘的IDE接口上,不支持Windows的32位磁盘存取功能,使Windows产生了内部错误而死机。进入Windows后,在“主群组”中双击“控制面板”,进入 “386增强模式”设置,单击“虚拟内存”按钮后再单击“更改”,把左下角的“32位磁盘访问”核实框关闭,在确认后,再重启动Windows,在 Windows中再访问CD-ROM进就不会出错误。

------------------------------

这说明微软的 “32位磁盘存取” 本身就不成熟,是它的程序的 BUG。我觉得不用再找别的原因了。

作者: 不点     时间: 2003-11-15 00:00
又找到一个非常好的网页,说的是 win98 的种种启动故障以及解决办法:
http://tech.sina.com.cn/c/2001-12-13/7856.html

摘录:

  启动故障

  Windows 98启动时死机的原因比较复杂,因为Windows 98在系统引导时要经过一个彻
底的硬、软件检测过程,其中的任何一个环节都可能引起系统工作不正常。

  1、系统第一次启动就死机

  如系统第一次启动就死机,应怀疑硬件安装或设置有问题。这时,应在系统引导出现"Start Windows 98"时立即按下F8键,选"Safe mode"(安全模式)启动系统。单击"开始/运行",在打开的框中输入"msconfig",单击"确定"。然后根据下面不同的情况选择不同的选项卡。

  ①禁止32位磁盘存取

  如果硬盘不支持32位存取方式,那么系统会在启动过程中挂起。这时应单击"高级"选中"强制兼容方式磁盘访问"复选框,并按"确定"。系统提示重新启动计算机,单击"是"重新启动系统。如果计算机正常启动,则说明硬盘太陈旧了,不能支持32位存取方式,应将它换掉。

  如果系统无法使用"Safe mode"进入安全模式,则可按F8键通过"Command prompt only"项进入DOS状态。当出现DOS提示符后,键入"WIN/D:F"来启动Windows 98。如果成功,同样说明系统拒绝采用32位磁盘存取模式来运行Windows 98。

  ②保证基于BIOS的磁盘操作

  如果采用上述方法不能成功,那么Windows 98可能要求使用基于BIOS的磁盘操作系统。单击"高级",选中"禁止虚拟HD IRQ"复选框,单击"确定",再击"确定",再重新启动系统。

  如果系统无法使用"Safe mode"进入安全模式,则可按F8键通过"Command prompt only"项进入DOS状态。当出现DOS提示符时,键入"WIN/D:V"来启动Windows98。如果启动成功,那么可在SYSTEM.INI文件中的[386Enh]项目后面加入下列设置:

  VirtualHDirq=0

  ③禁止Windows 98使用ROM断点

  一个ROM断点是PC BIOS中的一个地址,它含有Windows 98从安全模式转换成实模式时所使用的指令。一般情况下,Windows 98在指定地址寻找那些断点指令。但是,如果使用了第三方内存管理程序,需禁止使用ROM断点。单击"高级",选中"禁用系统ROM断点"复选框,单击"确定",再击"确定",重新启动计算机,如启动成功,说明系统不能使用ROM断点。

  如果系统无法使用"Safe mode"进入安全模式,则可按F8键通过"Command prompt only"项进入DOS状态。当出现DOS提示符时,键入"WIN/D:S"来启动Windows98。如果启动成功,那么可在SYSTEM.INI文件中的[386Enh]项目后面加入下列设置:

  SystemROMBreakPoint=0

  2、出现"Starting Windows 98……"信息后死机

  这种故障多是由于Windows 98的DOS启动部分受到损坏。如果有安装Windows 98时创建的启动盘,将此盘插入软驱重新启动机器,启动后使用"SYS C:"命令向C盘传送系统即可。如安装时没有建立启动盘,可到其他机器上通过"控制面板/添加删除程序/创建启动盘"来创建启动盘。但要注意,传输的系统版本须与原系统版本一致,否则系统无法启动。

  3、启动后立即自动关机

  产生该故障的原因是Windows 98启动时,设置驱动程序转载出错,导致系统认为硬件无法正常工作。可以在系统启动出现"Start Windows 98"时按下F8键,利用启动模式中的"Step-by-step confirmation"选项来确认。如果系统运行至"Load all Windows drivers[ENTER=Y,ESC=N]"时,按回车键后出现安全关机信息,则肯定是这个原因。

  重新启动系统,进入Windows安全模式(Safe mode)。打开Windows/System.INI,检查其中的boot项,将每一条装载的驱动程序与C:WindowsSystem下对应的drv 文件对比,即检查[boot]项后面扩展名为drv的语句的等号右边的驱动程序名是否与C:WindowsSystem下对应的drv文件的文件名相一致,若不一致则加以更正。若System.INI所指定的驱动程序丢失或受到破坏,则可从其他机器的Windows 98系统中拷贝过来。如无法拷贝,也可临时在该行前加注解符";"跳过该行。


作者: Wengier     时间: 2003-11-15 00:00
我有几个问题想说一下,

Win3.11和Win98中的“32位磁盘存取”有些不同。在Win98中,假设在不支持FAT32分区的MS-DOS 7.0下运行未启用“32位磁盘存取”的Win98的话,那Win98也无法看到FAT32分区;但如果在MS-DOS 7.0下运行启用了“32位磁盘存取”的Win98的话,则Win98可以看到FAT32分区。可见Win98在DOS下运行后只是在启动时用32位的IFSMGR对磁盘分区进行了一次重定向。

关于不用"map --hook"IMG不被损坏,而用"map --hook"后IMG则被损坏,可以检查一下这两种方式后系统略有哪些不同,会不会因为这些细微的不同(或者是细微的小BUG,或者像FreeDOS Kernel 2030那样的BUG)而造成IFSMGR重定向磁盘驱动器时失败?

我也是用软盘IMG试的,前512字节确实变成了其它内容。我本来想用硬盘IMG试验的,但实在是做不到,因为GRUB要求IMG镜像文件空间必须连续,软盘IMG还略容易些(我也是复制了几次才成功的),至于硬盘IMG镜像想做到这点则非常非常难。不知GRUB能不能想办法支持不连续的IMG镜像,以使得它更方便实用些?
作者: sd8     时间: 2003-11-15 00:00
你不会用圆规吗,哈哈,搞笑。
作者: 不点     时间: 2003-11-15 00:00
又有新发现。换了一个软盘映象,这次即便用第一种方法启动,也毁坏了软盘映象!

这就证明了,并非只有 --hook 才导致软盘被毁。不用 --hook 也能导致软盘被毁。

所以,决非 "就地仿真" 功能本身的错。这个功能很简单,不会有任何问题的。它就是简单的把 int13 挂上,使得 GRUB 本身可以使用仿真罢了。通常如果不用 --hook,则一直到 boot 命令执行之后才挂接 int13 仿真。所以,使用 --hook 和不使用 --hook ,其差别是及其微小的,或者说,对于将要引导的操作系统来说,这个先后顺序本来就没有差别,最终都是挂接了 int13 的仿真程序。

本次的发现之后,我确认问题不是出在 --hook 本身。
作者: Wengier     时间: 2003-11-15 00:00
我上面回复了一下,不知您看到了没有。那可能确实Win98自己有问题,我看先不管它了吧,如果DOS能正常使用它就行。。
作者: 不点     时间: 2003-11-15 00:00
Wengier 兄,你不是坏掉过硬盘吗?你就再检查一下,那个坏掉的硬盘究竟有多少个扇区坏掉了。

======

哦,对不起,刚刚看明白,你的硬盘没有损坏,损坏的是软盘。

=========

> 不知GRUB能不能想办法支持不连续的IMG镜像,以使得它更方便实用些?

不行啊。为了编程的简单,不想考虑那么复杂了。典型的情况,一个 1.44M 的文件,可以占据 1000 个甚至更多个不连续的区域。如果这样,仿真起来不知道要增加多少困难呢,程序也容易出现隐含错误,造成潜在的危险。退一步说,即使这样能仿真,其运行效率将会大大受到影响。光是保存这 1000 个指针,就需要 4000 个字节的空间。4K 的空间啊,这还不包括 int13 的代码。所以,这对于存贮空间也是不利的。更不用说 2.88M 或者硬盘映象的仿真了。

其实,产生连续硬盘映象也是容易的。格式化一个硬盘,然后拷贝文件到这个硬盘,则这个硬盘上就没有碎片了。

=======

不过可以用 (hd0,0)+666666 来直接使用整个分区,此处 666666 应当是分区的全部扇区总数。这样的表示法,肯定是连续的了。

我正在编写代码,从而把 (hd0,0)+1 解释成整个分区,这样就不必让人工计算分区的扇区数目了。

好了,硬盘映象的问题我自己先弄,大家可以暂且不管了。


作者: 不点     时间: 2003-11-15 00:00


  Quote:
以下是引用Wengier在2003-11-15 12:32:28的发言:
那可能确实Win98自己有问题,我看先不管它了吧,如果DOS能正常使用它就行。。

我已经看到了解决问题的曙光了。特别佩服、感谢 Wengier 兄指出了 32位磁盘存取这个焦点、根源。我刚才在 google 上搜索 32-bit disk access ,终于知道什么叫做 “32位磁盘存取” 了。它应当叫做 “保护模式磁盘存取”,以避免产生歧义。

在保护模式执行 16 位实模式的 int13 程序,要求这些程序的代码不使用 32 位寄存器。我的程序中使用了大量的 32 位寄存器,所以导致 “保护模式磁盘存取” 产生了误操作。

好了,接下来大概不难解决了。现在先歇一歇。


作者: Wengier     时间: 2003-11-16 00:00


  Quote:
以下是引用不点在2003-11-15 12:56:26的发言:
其实,产生连续硬盘映象也是容易的。格式化一个硬盘,然后拷贝文件到这个硬盘,则这个硬盘上就没有碎片了。

不点,不知有没有能在DOS下实现直接将文件连续复制的软件?毕竟如果就为了产生连续的IMG镜像供GRUB for DOS使用就让大家来格式化硬盘未免显得有些不切实际,况且GRUB的最终目标毕竟是要真正用在真实电脑而不是在虚拟机中玩的。
作者: 不点     时间: 2003-11-16 00:00
windows 磁盘碎块整理怎么样,够不够用?

我也期望谁能编写一个。
作者: Wengier     时间: 2003-11-16 00:00
Windows磁盘碎片整理程序实在是太慢且效率低而且用得人不多,何况不能在DOS下运行。而DOS6的DEFRAG又不支持长文件名和FAT32。。。
作者: 不点     时间: 2003-11-17 00:00
磁盘碎片整理需要文件系统的知识,比较复杂,不是我力所能及的。我不可能做这个工作。请在这方面熟练的兄弟们做吧。


作者: Wengier     时间: 2003-11-17 00:00
不点:不知有没有在DOS命令行下(而不是GRUB的命令行下)运行的blocklist命令呢?因为这样的话就可以随时检验刚复制的文件是否连续了。
作者: 不点     时间: 2003-11-17 00:00
干脆这么说吧, 要是有一个 COPY 命令, 能够直接生成连续的文件就好了. 这样也就不需要 blocklist 命令了.

谁能作出这样一个 COPY 命令就好了. 这个难度应当不算太大, 比起碎块整理而言.

我没有时间, 否则我会尝试一下的.


作者: 不点     时间: 2003-11-17 00:00


  Quote:
以下是引用Wengier在2003-11-16 21:42:49的发言:
Windows磁盘碎片整理程序实在是太慢且效率低而且用得人不多,何况不能在DOS下运行。而DOS6的DEFRAG又不支持长文件名和FAT32。。。

对了, 我突然想到你这段话. 你不是提到 DEFRAG 程序吗? 这个程序能否加上某种开关以便仅对一个文件进行碎片整理? 或者 google 一下网络, 看看有无这种东东?


作者: lyh728     时间: 2003-11-17 00:00


  Quote:
以下是引用Wengier在2003-11-17 11:18:18的发言:
不点:不知有没有在DOS命令行下(而不是GRUB的命令行下)运行的blocklist命令呢?因为这样的话就可以随时检验刚复制的文件是否连续了。

为了测试 我的vflopy,我曾经 写过 ,在 winnt  和 dos  下的

附件 是 dos  的
C:\boot>blklstds.exe -h
blkls -f filename
Or
blkls -d device -f filename
       -d (hd0,0)      : partition where the files are  C = (hd0,0) D=(hd0,4)

作者: lyh728     时间: 2003-11-17 00:00
为了测试 我的vflopy,我曾经 写过 ,在 winnt  和 dos  下的

附件  for  ddos 和 winnt
[/quote]打开附件
作者: Wengier     时间: 2003-11-18 00:00
lyh728:原来您就是VFLOPPY的作者呀,非常感谢!我有两个问题想问一下:

1:这个DOS版的blklstds.exe文件在运行时经常出现"Exiting due to signal .."之类的错误信息而无法运行(而NT版的blklst.exe就没有此问题),不知何故?而且在用-f查看一个较大的文件时经常出现"dir failed xx, 15, fat blocklist failed"之类的提示且停止运行,不知是不是因为文件不连续或者是其它原因?

2:不知现在最新版的VFLOPPY支持1.68MB的软盘IMG镜像吗?


[此贴子已经被作者于2003-11-18 4:55:45编辑过]



作者: lyh728     时间: 2003-11-18 00:00


  Quote:
以下是引用Wengier在2003-11-18 0:00:16的发言:
lyh728:原来您就是VFLOPPY的作者呀,非常感谢!我有两个问题想问一下:

1:这个DOS版的blklstds.exe文件在运行时经常出现"Exitingduetosignal.."之类的错误信息而无法运行(而NT版的blklst.exe就没有此问题),不知何故?而且在用-f查看一个较大的文件时经常出现"dirfailedxx,15,fatblocklistfailed"之类的提示且停止运行,不知是不是因为文件不连续或者是其它原因?

2:不知现在最新版的VFLOPPY支持1.68MB的软盘IMG镜像吗?



感谢 Wengier斑竹,我在你这里下载了不少好东西,还有你的启动盘,也很棒
1
dos 版本的blklstds 使用了digpp 的dpmi ,而且我做的很匆忙,是我把nt 版的blklst 向dos
移植是改写的,测试不是很全面,因为我主要在2k上测试的,在这方面nt版本的情况好一些
(不过我确实没有遇到 "Exiting due to signal .."这样的错误,我猜测是 djgpp 的代码
报告的这个错误,可能是什么原因,我也不清楚,不好意思)

至于 出现 "dir failed xx, 15, fat blocklist failed" 这个 错误,
这个错误的意思是 找不到这个文件xx,在我的使用中,都是对于新创建的文件才出现这个错误(也可能有别的时候,但是我还没有发现),
是因为 blklst直接读取
物理硬盘,而2k 在创建文件后 一般 会缓存一段时间,然后才写到硬盘上,也就是说
这时硬盘上的文件系统和内存中的不一致(这时候,如果突然断电,就会丢失文件),

这样,就会导致这个问题,可以用system internal 公司的一个小工具 flushd(大约这个名字)
可以强制os 把内存中的文件同步到硬盘上.或者等上一段时间,再试一试,
我没有在程序里面加上这个功能,是不想每次运行这个小程序,而影响os的缓存策略.

2 vfloppy 只支持144和288m 的软盘镜像,我觉得168m的没有什么用处啊,反正镜像
文件在硬盘上,也不在乎那么1m 的空间吧
最早发布的vfloppy 有个bug,导致不支持288M,可是1到2天后我就发布了一个修正版
现在网上流传的应该是修正版本吧





[此贴子已经被作者于2003-11-18 10:39:52编辑过]



作者: hunome     时间: 2003-11-18 00:00
呵呵,高手云集啊,张知识!
作者: Wengier     时间: 2003-11-19 00:00
lyh728:感谢您的回复。那个NT版的blklst出现"dir failed.."的错误信息确实比较少见,所以我估计就是您所说的缓冲原因造成的。不过DOS版的blklst却在遇到比较大的文件时经常出现"dir failed.."的错误信息(DOS下没有加载缓冲),估计是因为您所说的移植比较匆忙的原因造成的吧。

关于VFLOPPY,您说的有道理,1.44MB和2.88MB就基本上够用了。不过请问以后能否加入写入IMG的功能(就像GRUB for DOS那样)呢,以便VFLOPPY虚拟软盘后可以随时可以在DOS下配置/优化CONFIG.SYS和AUTOEXEC.BAT等文件,使得这些修改在下次虚拟时也生效(这样就可以将这个IMG虚拟的软盘作为硬盘上的一个永久的DOS系统或真正的DOS启动盘了),而不必在WIN下重新生成新的IMG文件?
作者: lyh728     时间: 2003-11-19 00:00
Wengier斑竹:
  您 怎么总是在 凌晨时间上网啊,

您说的那个写入功能,我很早旧有这个想法了,只是一直没有精力去做,思路我都考虑好了
目前的 虚拟软驱的代码 是把所有的
img 文件内容都读到内存中,就像syslinux 中那个 memdisk(grub 也是加载那个memdisk)
这种方法的 优点 是:
               速度快,完全在内存中
               加载后,可以脱离硬盘,可以format,而不影响
缺点是 :   内存占用大,不可能加载大的镜像文件 ,
               由于这个原因,所以只做了最大加载2.88M的软盘

所以 我本来打算 加入 diskem1x 中的 磁盘模拟方法,就是 直接把 读操作直接转换为
对磁盘上的镜像文件的操作,想在这里实现  写入功能
优点是 :
            支持大的镜像文件,甚至可以支持iso 文件
缺点是:
            不能脱离硬盘,不能delete ,不能format
这两种方法 是互补的,只是 我没时间, 去整理代码(
Boot Scriptor 的源代码 里面就是类似的 模拟方法)





[此贴子已经被作者于2003-11-19 9:51:35编辑过]



作者: Wengier     时间: 2003-11-19 00:00
lyh728:我现在在国外,所以时区不同呢。国内的晚上就是我这儿的下午。

关于现在VFLOPPY是将IMG读到内存中,我想能不能这样,即设计一个专门的命令,比如说WRITEIMG命令,在用户觉得刚才对IMG的修改有必要或想要保存的时候,运行一下这个WRITEIMG命令就自动将当前内存中用VFLOPPY生成的现在使用的虚拟软盘保存到硬盘上的用于虚拟的那个IMG镜像文件中了(就类似于SMARTDRV的/C选项,将内存中的缓冲写入磁盘),以便于刚做的修改永久生效?这样的话,VFLOPPY现有的速度快、完全在内存中运行、可以脱离硬盘等优点将全部保留,而且又有了写入IMG镜像、成为真正的可读写磁盘的功能。不知您觉得这样如何?

[此贴子已经被作者于2003-11-19 10:23:25编辑过]



作者: 不点     时间: 2003-11-20 00:00
FAST DEFRAG, 我在 google 中找到一些软件, 可以快速整理磁盘, 不知道这个怎么样:

http://www.techtv.com/callforhelp/freefile/story/0,24330,3425341,00.html

是免费下载的. 有人用过吗?


作者: Roy     时间: 2003-11-20 00:00


  Quote:
以下是引用不点在2003-11-20 16:02:38的发言:
FAST DEFRAG, 我在 google 中找到一些软件, 可以快速整理磁盘, 不知道这个怎么样:

http://www.techtv.com/callforhelp/freefile/story/0,24330,3425341,00.html

是免费下载的. 有人用过吗?


Fast Defrag
Free up memory and optimize how your system uses RAM and the swap-file
作者: lyh728     时间: 2003-11-20 00:00
to Wengier斑竹:
         
   我开始就猜测 你在国外,呵呵
   你说的思路倒是可行,改动也应该不是太大,就是 我现在很懒惰,没有心思改程序,这种启动程序调试起来太麻烦了,开始 我觉得没有太大问题了,就没有用 虚拟机,重启动几次后
,可把我烦死了,
后来受不了了,才装了一个vmware,这才觉得测试容易些了。

  关键是很久没看程序了,我都忘了怎么写的了,我就怕一改动,就多出来一堆bug,
你知道不知道有什么好的可以调试启动代码的调试器或者方法?我自己就用最土的print。
  
   期待 您推荐一个好的调试方法


[此贴子已经被作者于2003-11-20 19:29:06编辑过]



作者: Roy     时间: 2003-11-20 00:00


  Quote:
以下是引用lyh728在2003-11-20 19:26:38的发言:
to Wengier斑竹:
         
   我开始就猜测 你在国外,呵呵

不用猜了....他在加拿大呢
作者: cavvie     时间: 2003-11-20 00:00
如果仅仅依靠软件调试器,我想应该没有什么好的办法了,或者你可以编写一些与print功能类似的汇编宏,简化你每回print的操作?
作者: 不点     时间: 2003-11-23 00:00
唉!测试 GRUB FOR DOS 是一个长期的、艰巨的、复杂的任务啊!就为照顾好 win98,很是需要时间了。

下面看看我的一部分测试:

map --read-only (hd0) (hd0)

chainloader (hd0)+1

boot

上述命令是用只读访问 C: 盘。【简单起见,我们以后说 C: 盘就是指第一个硬盘驱动器,不是指 DOS 的逻辑 C: 盘。同样 D: 也是指第二个硬盘驱动器,不是逻辑 D: 盘。】

原以为这样启动 win98 要失败的,结果,居然成功了!在启动之初,出现两次信息:

write protect error writing drive C:

Abort, Retry, Fail ?

按 F 就可以继续启动。这样进入 win98 之后,C: 盘并非写保护,仍然可以写入文件。这一点早就料到了。由于 C: 盘不使用 BIOS,所以,C: 盘不再写保护。win98 对 C: 盘实施的是 “保护模式的磁盘访问”。

再看看这个测试:

map --read-only --disable-chs-mode (hd0) (hd0)

chainloader (hd0)+1

boot

这时,windows 终于不能启动了。禁止 CHS 后,win98 的启动程序找不到 C: 盘了,由此可见,win98 在启动的时候是用 CHS 方式来读取 C: 盘的,而不用 LBA 方式。

换一换,这次用 D: 盘,看看这个测试:

map --read-only --disable-chs-mode (hd1) (hd1)

chainloader (hd0)+1

boot

这次顺利进入 win98,并且在 win98 中访问 D: 盘很正常。这也是意料之中的,因为 win98 对 D: 盘实施的是 “保护模式的磁盘访问”。所以,虽然 DOS 访问 D: 盘可能不行,但 win98 下却能够访问。

再看看这个奇特的测试:

map (hd0) (hd1)

map (hd1) (hd0)

map (hd1,0)/dos.img (fd0)

chainloader (hd1)+1

boot

把 C: 盘和 D: 盘交换,进入 win98 之后,A: 盘无法访问了。这是由于 A: 仍然在使用 BIOS,而在 BIOS 中,A: 被映射到 (hd1) 的一块区域,此时 BIOS 不知道 win98 已经把 C盘 和 D盘 的硬件信息都交换了,它还盲目地在原来 BIOS 的那个盘上去找自己的扇区,当然找不到了。这时,如果仅仅读出 A: 盘是不要紧的。然而如果此时写入 A: 盘,那就太危险!!!!了,因为很盲目地写到另外一个错误的盘上,可能把那个磁盘全毁了,不管毁掉多少,哪怕只是毁掉一个扇区,都是不对的。我们还应当意识到,此时假如仅仅毁掉了不重要的扇区,那么这其实是最糟糕的了,因为我们可能发现不了这是个错误,还以为是很正常的呢!!

总之,win98 的 “保护模式磁盘访问” 是一层独立于 BIOS 的磁盘访问。弄不好,这两个访问会冲突、会打架的,也潜藏着巨大的危险性。所以,我们所有的使用者都得小心,也因此,我们测试的时间会拉得很长很长,毕竟安全第一嘛,宁愿没有这个软件,也不要一个危险的软件。

作者: 不点     时间: 2003-11-25 00:00
有点线索了.

在 c:\windows\ios.log 中列出了 mbrint13.sys , 这说明 windows 把这个仿真程序当成病毒来对待了(注: 这一点是肯定的), 所以它要对 A: 盘进行破坏!!!! (注: 这只是猜测)

在 google 中搜索 mbrint13 可以找到这方面的信息.

=========

另外, 发现 grub_t07 , grub_t08 有一个小的 BUG, 导致 int13 扩展功能引起死机. 已经解决, 但现在先不发布更新程序(因为这个 BUG 的影响不大, 所以等到下次再一并更新).


作者: cba-xyz     时间: 2003-11-26 00:00
支持,不懂编程帮不上忙了,抱歉。
作者: 不点     时间: 2003-11-26 00:00
不懂编程大概是谦虚. 学一学, 不会也得会了. 比如, 我也不懂, 但从 google 上就能找到很多资料了. 为了解决一个问题, 可以逼着你从不会到会.

这次 windows 把 MBR 之前加载的 int13 挂接程序当做病毒来对待, 出现很多异常情况. 现在发现在 DOS 窗口下使用 int13 不正常, 得到错误的结果, 很可能这就是最后的原因(我觉得几乎有 100% 的可能性是这个原因). 现在得考虑为 windows 除错了, 我下载了 SoftICE , 但还没有安装. 真希望有个熟悉 SoftICE 的老兄来作这个除错呀. 唉! SoftICE 很强大, 但是我不太熟悉它, 还不知道能否干掉这个 BUG.
作者: windrv     时间: 2003-11-26 00:00


  Quote:
以下是引用不点在2003-11-26 14:26:07的发言:
不懂编程大概是谦虚. 学一学, 不会也得会了. 比如, 我也不懂, 但从 google 上就能找到很多资料了. 为了解决一个问题, 可以逼着你从不会到会.

这次 windows 把 MBR 之前加载的 int13 挂接程序当做病毒来对待, 出现很多异常情况. 现在发现在 DOS 窗口下使用 int13 不正常, 得到错误的结果, 很可能这就是最后的原因(我觉得几乎有 100% 的可能性是这个原因). 现在得考虑为 windows 除错了, 我下载了 SoftICE , 但还没有安装. 真希望有个熟悉 SoftICE 的老兄来作这个除错呀. 唉! SoftICE 很强大, 但是我不太熟悉它, 还不知道能否干掉这个 BUG.

You can try to add

mbrint13.sys

into \windows\ios.ini

under [SafeList]

to make Win98 think that mbrint13.sys is safe.

See if it works for you.
作者: 不点     时间: 2003-11-26 00:00
谢谢 windrv 兄, 这个已经试验过了, must_chain, must_not_chain, 等等都试验过了, 全都不行, 当用 must_chain 从而使用 real mode mapper 时, win98 早早死掉, 根本进不去了. windows 认定这是一个病毒, 没有办法为它加载保护模式的驱动程序.

只有一种例外: OnTrack 公司的 geometry translation 软件可以被 windows 识别, 但是我不知道怎么让 windows 认为 MBR 上的 INT13 是 OnTrack 公司的软件.



作者: windrv     时间: 2003-11-27 00:00


  Quote:
以下是引用不点在2003-11-26 18:36:14的发言:
谢谢 windrv 兄, 这个已经试验过了, must_chain, must_not_chain, 等等都试验过了, 全都不行, 当用 must_chain 从而使用 real mode mapper 时, win98 早早死掉, 根本进不去了. windows 认定这是一个病毒, 没有办法为它加载保护模式的驱动程序.

只有一种例外: OnTrack 公司的 geometry translation 软件可以被 windows 识别, 但是我不知道怎么让 windows 认为 MBR 上的 INT13 是 OnTrack 公司的软件.

I am not a very technical man. But I remember one scenario when my staff developed one of our products as follows:

when we map or substitute one driver letter for another with our real-mode assembly DOS program, not using Windows' SUBST command; all drives enter into real-mode under Win98. However, when we call another DOS program doing something not essential within our DOS program before issuing win.com, after entering in Windows,Win98 can recognize all hard disk drives, using Protected Mode.

This is strange.

If we are not so busy, may be we can later learn from you what is happening.
作者: windrv     时间: 2003-11-27 00:00
I am not a very technical man. But I remember one scenario when my staff developed one of our products as follows:

when we map or substitute one driver letter for another with our real-mode assembly DOS program, not using Windows'''' SUBST command; all drives enter into real-mode under Win98. However, when we call another DOS program doing something not essential within our DOS program before issuing win.com,
after entering in Windows,Win98 can recognize all hard disk drives, using Protected Mode.

This is strange.

If we are not so busy, may be we can later learn from you what is happening






[此贴子已经被作者于2003-11-27 14:41:41编辑过]



作者: 不点     时间: 2003-11-27 00:00
这一行太长, 在我的 mozilla 浏览器中显示得不正常,所以用回车截断:

when we map or substitute one driver letter for another with our real-mode assembly DOS program,
not using Windows'''' SUBST command; all drives enter into real-mode under Win98. However, when
we call another DOS program doing something not essential within our DOS program before issuing
win.com, after entering in Windows, Win98 can recognize all hard disk drives, using Protected Mode.

=======

确实奇怪, 而且,我也是初次接触这类问题,我觉得恐怕是您的技术人员能够帮助我了,他们毕竟长期接触这方面的东西。我觉得,其一,win98 可能存在 bug,尤其是您的公司所遇到的奇怪情况,加上我们这里的 int13 所遇到的情况,都说明了这一点。其二,也存在这样的可能性,那就是,win98 把我们当作病毒来对待,它故意让系统在这种环境下运行失常。我在 DOS BOX 中用 debug 运行 int13 来读取某些扇区,这些扇区的第 2n 个字节都是对的,而第 2n+1 个字节都是 0。也就是说每隔一个字节都是 0,其余的半数字节都是对的。根据这个,我就觉得并非是 BUG 这么简单了,而是故意的。想想看,什么软件读扇区的时候会发生这种错误呢?根本不可能,不管是用 BIOS,还是用 IO port 硬件直接读写,都是整个扇区一齐读出,不是一个字节一个字节这样读出。所以,要错的话,应当是整个扇区全部面目全非,要对的话,就都对,丝毫也不差。所以,像上述所说交替出现错误,我认为几乎 100% 是故意制造的。 因此,我们查找 win98 的这段程序,把它纠正过来,应当就 OK 了。同样的,您公司所遇到的情况,(我觉得)也可以通过调试 win98 来解决(当然您公司的情况不很严重,所以也可以不解决)。

作者: windrv     时间: 2003-11-28 00:00


  Quote:
以下是引用不点在2003-11-27 19:11:06的发言:
这一行太长, 在我的 mozilla 浏览器中显示得不正常,所以用回车截断:

when we map or substitute one driver letter for another with our real-mode assembly DOS program,
not using Windows'''' SUBST command; all drives enter into real-mode under Win98. However, when
we call another DOS program doing something not essential within our DOS program before issuing
win.com, after entering in Windows, Win98 can recognize all hard disk drives, using Protected Mode.

=======

确实奇怪, 而且,我也是初次接触这类问题,我觉得恐怕是您的技术人员能够帮助我了,他们毕竟长期接触这方面的东西。我觉得,其一,win98 可能存在 bug,尤其是您的公司所遇到的奇怪情况,加上我们这里的 int13 所遇到的情况,都说明了这一点。其二,也存在这样的可能性,那就是,win98 把我们当作病毒来对待,它故意让系统在这种环境下运行失常。我在 DOS BOX 中用 debug 运行 int13 来读取某些扇区,这些扇区的第 2n 个字节都是对的,而第 2n+1 个字节都是 0。也就是说每隔一个字节都是 0,其余的半数字节都是对的。根据这个,我就觉得并非是 BUG 这么简单了,而是故意的。想想看,什么软件读扇区的时候会发生这种错误呢?根本不可能,不管是用 BIOS,还是用 IO port 硬件直接读写,都是整个扇区一齐读出,不是一个字节一个字节这样读出。所以,要错的话,应当是整个扇区全部面目全非,要对的话,就都对,丝毫也不差。所以,像上述所说交替出现错误,我认为几乎 100% 是故意制造的。 因此,我们查找 win98 的这段程序,把它纠正过来,应当就 OK 了。同样的,您公司所遇到的情况,(我觉得)也可以通过调试 win98 来解决(当然您公司的情况不很严重,所以也可以不解决)。

Hi, are you the author of the project Grub for Dos?

We are at Guangzhou. And where are you?

If we are close together, we can meet to help out each other.
作者: 不点     时间: 2003-11-28 00:00
是的,我是 tinybit。我现在居住在北方,不过由于网络这么方便,那么地理上的障碍应该是微不足道的了。网络这个世界既是虚拟的,又是真实的;我喜欢网络,甚至胜过喜欢真实世界。我也很喜欢技术,只要是技术,只要我力所能及,我就会尽力,而不管问题来自何方。

作者: windrv     时间: 2003-11-29 00:00


  Quote:
以下是引用不点在2003-11-27 19:11:06的发言:
这一行太长, 在我的 mozilla 浏览器中显示得不正常,所以用回车截断:

when we map or substitute one driver letter for another with our real-mode assembly DOS program,
not using Windows'''' SUBST command; all drives enter into real-mode under Win98. However, when
we call another DOS program doing something not essential within our DOS program before issuing
win.com, after entering in Windows, Win98 can recognize all hard disk drives, using Protected Mode.

=======

确实奇怪, 而且,我也是初次接触这类问题,我觉得恐怕是您的技术人员能够帮助我了,他们毕竟长期接触这方面的东西。我觉得,其一,win98 可能存在 bug,尤其是您的公司所遇到的奇怪情况,加上我们这里的 int13 所遇到的情况,都说明了这一点。其二,也存在这样的可能性,那就是,win98 把我们当作病毒来对待,它故意让系统在这种环境下运行失常。我在 DOS BOX 中用 debug 运行 int13 来读取某些扇区,这些扇区的第 2n 个字节都是对的,而第 2n+1 个字节都是 0。也就是说每隔一个字节都是 0,其余的半数字节都是对的。根据这个,我就觉得并非是 BUG 这么简单了,而是故意的。想想看,什么软件读扇区的时候会发生这种错误呢?根本不可能,不管是用 BIOS,还是用 IO port 硬件直接读写,都是整个扇区一齐读出,不是一个字节一个字节这样读出。所以,要错的话,应当是整个扇区全部面目全非,要对的话,就都对,丝毫也不差。所以,像上述所说交替出现错误,我认为几乎 100% 是故意制造的。 因此,我们查找 win98 的这段程序,把它纠正过来,应当就 OK 了。同样的,您公司所遇到的情况,(我觉得)也可以通过调试 win98 来解决(当然您公司的情况不很严重,所以也可以不解决)。

Hi,

Thank you very much!

Let's keep in contact.

By the way, I agree with you that it is M$ which intentionally causes those trouble.
It always tests something to make sure that it is in M$'s environment before Windows starts properly.

Examples:

1. You cannot install or start Win9x under Freedos.
2. It uses MSDOS.SYS to configure information about where Win9x is installed.
3. It creates Registry to better control or hide its system initialization information
4. It causes troubles in situations which you and we experience. For instance, when you use Mapping for different drives instead of using M$ SUBST command; and when you use int13 hook to redirect the location of access, M$ does something to make sure either one part or all parts of Windows fail.
5. Windows Update is another function in which it will use to destroy your machine.

Some some people have expressed the opinion that Win9x might be more and more valueable as it is less affected by Windows Update function or some features built into those later versions of Windows that enable M$ to control the Windows OS running in your machine.

For the technical problems you face, you should make sure you know what you want first. That is what do you want Grub for DOS for.

If it is for starting real DOS and running real mode DOS programmes. You have no problem.

If you want to start Win9x, then you should make sure you restore the environment changes that you made to fool Win9x to think that it is right for it to start.

So if you boot from the VFloppy, you should remove the VFloppy [or restore other changes as well] before you start Win9x.

If you want to access the image of the VFloppy within Win9x, you probably can use our VDisk Manager included with our WINDRV. The VDisk Manager and the associated Protected Mode Virtual Disk Driver is free for personal and private use.

We shall release a better version of WINDRV in the coming week.

Please pay a visit to:

windrv.net

and enter the Forum area: Windrv FAQ

for details.

Our VDisk Manager can help you load the IMG files into a ramdisk and you can also save the contents of the ramdisk back into IMG files. The IMG files can be up to Gigabytes. And you can use Defrag with our Virtual Ramdisk. You can see how fast it is.

We are busy with the new version now. After that, we shall write better FAQ & Help files.
作者: 不点     时间: 2003-11-30 00:00
谢谢您! 我的回复夹杂在您的帖子中, 如下:

Examples:

1. You cannot install or start Win9x under Freedos.

是的, 我也知道这个.

2. It uses MSDOS.SYS to configure information about where Win9x is installed.

是的, 还有很多别的复杂配置文件, 像是方便的控制手段, 也像是秘密通道之类的玩意儿. 如 ios.ini, winstart.bat 等等.

3. It creates Registry to better control or hide its system initialization information

是的, 注册表对于商家用密码加密产品保护自己, 是很有用的, 对于用户, 似乎没有用处.

4. It causes troubles in situations which you and we experience. For instance,
when you use Mapping for different drives instead of using M$ SUBST command;
and when you use int13 hook to redirect the location of access, M$ does something
to make sure either one part or all parts of Windows fail.

是的, 微软善于变换标准, 不支持以往的软件, 这些早期的软件是别的公司生产的, 可能很有竞争力.

5. Windows Update is another function in which it will use to destroy your machine.

Some some people have expressed the opinion that Win9x might be more and more valueable
as it is less affected by Windows Update function or some features built into those
later versions of Windows that enable M$ to control the Windows OS running in your machine.

我也害怕, 但对于 win98 来说, 这种破坏的实际发生, 我还没有听说过.

For the technical problems you face, you should make sure you know what you want first.
That is what do you want Grub for DOS for.

If it is for starting real DOS and running real mode DOS programmes. You have no problem.

If you want to start Win9x, then you should make sure you restore the environment changes
that you made to fool Win9x to think that it is right for it to start.

我本人希望 GRUB for DOS 可以在 win98 下正常使用. 这是我原来的目标. 自从发现我们上面的问题之后,
我不再特别鼓励其他人也这么用了. 在 DOS 以及无 "32-bit disk access" 的情况下已经比较正常了. 但这
并不说明在这种环境是绝对安全的. 比如, EMM386 下是否安全? 一些磁盘分区和备份软件是否能安全运行?
等等, 这都是问题. 安全只是相对的, 相对于运行 win98 而言, 运行 DOS 确实是安全了一些.

So if you boot from the VFloppy, you should remove the VFloppy [or restore other changes as well]
before you start Win9x.

关于这个, 我如果在 win98 启动过程中先禁止仿真, 那么 win98 就不再使用 int13 接口了, 也就是说, win98
下只能访问真实的软盘而无法访问 int13 重新定向了的软盘. 如果这涉及到您公司的专利, 我不再详细追问.
如果您的公司可以公布刚才所说的方法(或者源程序), 我当然十分欢迎了.

If you want to access the image of the VFloppy within Win9x, you probably can use our VDisk
Manager included with our WINDRV. The VDisk Manager and the associated Protected Mode Virtual
Disk Driver is free for personal and private use.

这是个好消息. 商业公司支持仿真软件, 可以使得仿真软件得到大众的充分利用. 真是一个好消息!

另外, 您公司对个人用户免费, 我向来赞成这种行为, 这是最实际可行的商业授权方法(尤其是在中国).

We shall release a better version of WINDRV in the coming week.

Please pay a visit to:

windrv.net

and enter the Forum area: Windrv FAQ

for details.

我还没有去看, 不过我会去看的. 谢谢您.

Our VDisk Manager can help you load the IMG files into a ramdisk and you can also save the
contents of the ramdisk back into IMG files. The IMG files can be up to Gigabytes. And you
can use Defrag with our Virtual Ramdisk. You can see how fast it is.

We are busy with the new version now. After that, we shall write better FAQ & Help files.

您公司所实现的(这种方法), 我一开始就没有打算实现. 我不使用 RAM 磁盘. 我知道用 RAM 磁盘之后,
问题大概就解决了, 但是我不具有 RAM 磁盘的有关知识, 不能编写这样的程序. 我所编写的仿真程序太初级,
太入门, 一点也不复杂, 很容易看懂. 但功能或者性能不会太好, 这是缺点了. 目前我还要致力于解决 grub
for dos 在 win98 中出现的问题.

谢谢您! 网络交流很不错!


作者: windrv     时间: 2003-12-1 00:00
Hi, Tinybit,

I have talked to my staff and he is also interested in your project. He should know much more about the relevant technical details than me.

After talking to him, he mentioned that according to his experience in writing a Partition Manager using VXD under Win9x, Win9x does not import real-mode DOS int13 information when entering into Protected-Mode. So it is different when you use real-mode int13 for disk access and protected-mode 32-bit disk access. This may be the reason for the trouble you find. Sometimes, he has to transit into real-mode to get the real-mode int13 information for the protected-mode process he works out.

May be someday when he is not so busy, I ask him to contact you.

Could you give us your email address so that we can correspond?

My email is:

windrv@windrv.net
作者: hunome     时间: 2003-12-1 00:00
to windrv:
does your products support the img files in a ntfs partition?
作者: windrv     时间: 2003-12-1 00:00


  Quote:
以下是引用hunome在2003-12-1 15:25:16的发言:
to windrv:
does your products support the img files in a ntfs partition?

Please go to www.systeminternals.com and install its NTFS driver for Win9x. We have tested after installing this driver, you can access NTFS partition uploaded onto our virtual ramdisk.

We may implement direct NTFS partition support in future if there is demand.
作者: 不点     时间: 2003-12-2 00:00
您好 windrv,和您的帖子一起回复如下:

I have talked to my staff and he is also interested in your project. He should know much more about the relevant technical details than me.

好消息,谢谢您和您的这位职员!

After talking to him, he mentioned that according to his experience in writing a Partition Manager
using VXD under Win9x, Win9x does not import real-mode DOS int13 information when entering
into Protected-Mode.

是的,如果 windows 采用了 32-bit 磁盘存取,它就不再使用 int13 接口了。但是,如果发现有必要对某个磁盘使用DOS 兼容模式的磁盘访问,那么 win98 还是要使用 int13 的。另外,即使是完全采用 32-bit disk access,windows 也并非完全脱离了 int13 接口。windows 似乎有一个 vxd 来处理 int25 , int26, int13 这些调用。另外在 MS-DOS 窗口中总是可以使用 int13 的(只不过有时候会出现错误,正如我上面提到的故意弄错)。关于 32-bit disk access 的内部机制,我还不清楚。我不知道它是像 win2000 一样完全脱离实模式 int13 呢?或者是设法在保护模式环境下直接调用 int13 的 16 位程序(这或许不太可能)。

So it is different when you use real-mode int13 for disk access and protected-mode
32-bit disk access. This may be the reason for the trouble you find.

两者确实不同,但由于我的 int13 终究要被 windows 用 MS-DOS 兼容模式来对待,所以,我最终都接触不到 32-bit disk access 的。也就是说,我一直都得用 16 位的 int13 接口。当 win98 用兼容模式访问磁盘时,它的行为和 DOS 窗口中的行为完全一样。这是我的一个发现。所以,只要解决了 DOS 窗口中出现的问题,整个问题也就解决了。所以我要用 SoftICE 来找出 windows 的错误(不管这个错误发生在何时何地,把它纠正过来就行了)。

Sometimes, he has to transit into real-mode to get the real-mode int13 information for the
protected-mode process he works out.

不知道是否可以在保护模式直接使用 int13?保护模式的程序段属性也可以设置成 16位的。另外,如果仅仅是调用 int13,那么似乎 windows 本身的某个 vxd 就提供这种接口,不必转入 real mode。

May be someday when he is not so busy, I ask him to contact you.

Could you give us your email address so that we can correspond?

My email is:

windrv@windrv.net

我理解。能者多劳,他们总是比较忙的。我的邮件是:tinybit@163.net。谢谢您的引见。
(不过,补充一点,邮件我不常看,大约每月看一次;但论坛我常来,几乎每天来一次。)


作者: 不点     时间: 2003-12-2 00:00

糟糕,SoftICE driver suite 2.7 无法在 vmware 中 win98 下使用。

真是邪了。以前安装在真实机器上是可以的,这次在 vmware 下不行。谁能帮忙啊?只要加载 winice,就不能进入 win98,就死机了。这与 GRUB 仿真无关。还没有开始使用 grub,就不能进入 win98 了。


作者: Wengier     时间: 2003-12-3 00:00


  Quote:
以下是引用不点在2003-12-2 21:47:09的发言:
糟糕,SoftICE driver suite 2.7 无法在 vmware 中 win98 下使用。

不点:这个Soft-ICE 2.7是指DOS版的还是WIN版的?是什么时候以及什么状态下死机的?
作者: 不点     时间: 2003-12-3 00:00
老兄您有所不知. 我为了安装 softice, 可以说历尽艰辛. 先是找到最新版 SOFTICE DRIVER SUITE 3.0 安装, 这东西用 rar 压缩后居然要占用 92M 空间, 我用 U 盘两次才把它从办公室搬到家里. 可是, 居然说这个不能在 win98 下运行, 说应当安装 2.7 的版本. 寻找 2,7 颇费周折, 终于找到了好几个 2.7 的版本. 这些版本都是 for win9x 的, 可是居然不支持 vmware 的硬件(我估计是 vmware 的显卡). 这下子麻烦了. 启动到将近出现 windows 桌面而还没有出现的时候死机了. 安装多次, 情况依旧.

除非在真实机下使用, 这我知道肯定行, 但我不敢在这种状况下调试 GRUB 啊.


作者: windrv     时间: 2003-12-3 00:00


  Quote:
以下是引用不点在2003-12-3 9:09:15的发言:
老兄您有所不知. 我为了安装 softice, 可以说历尽艰辛. 先是找到最新版 SOFTICE DRIVER SUITE 3.0 安装, 这东西用 rar 压缩后居然要占用 92M 空间, 我用 U 盘两次才把它从办公室搬到家里. 可是, 居然说这个不能在 win98 下运行, 说应当安装 2.7 的版本. 寻找 2,7 颇费周折, 终于找到了好几个 2.7 的版本. 这些版本都是 for win9x 的, 可是居然不支持 vmware 的硬件(我估计是 vmware 的显卡). 这下子麻烦了. 启动到将近出现 windows 桌面而还没有出现的时候死机了. 安装多次, 情况依旧.

除非在真实机下使用, 这我知道肯定行, 但我不敢在这种状况下调试 GRUB 啊.


Hi,

Have you tried using Bochs instead of Vmware?

And could you tell me where in the northern part of China you are?
作者: windrv     时间: 2003-12-3 00:00


  Quote:
以下是引用不点在2003-12-3 9:09:15的发言:
老兄您有所不知. 我为了安装 softice, 可以说历尽艰辛. 先是找到最新版 SOFTICE DRIVER SUITE 3.0 安装, 这东西用 rar 压缩后居然要占用 92M 空间, 我用 U 盘两次才把它从办公室搬到家里. 可是, 居然说这个不能在 win98 下运行, 说应当安装 2.7 的版本. 寻找 2,7 颇费周折, 终于找到了好几个 2.7 的版本. 这些版本都是 for win9x 的, 可是居然不支持 vmware 的硬件(我估计是 vmware 的显卡). 这下子麻烦了. 启动到将近出现 windows 桌面而还没有出现的时候死机了. 安装多次, 情况依旧.

除非在真实机下使用, 这我知道肯定行, 但我不敢在这种状况下调试 GRUB 啊.


Hi Tinybit,

Why not use a real hard disk to test instead?

Last Saturday, I bought 2 second hand hard disks at Guangzhou. Its size is 1.2G and looks like a new one after refurbishing.

It costs me only RMB15 each [fifteen].

So you could try using this kind of cheap hard disks for testing and development.
作者: hunome     时间: 2003-12-3 00:00
vpc可不可以呢?
作者: 不点     时间: 2003-12-4 00:00
回复 windrv 兄:

Have you tried using Bochs instead of Vmware?

没有用过。感觉 BOCHS 还不合适。它启动 windows 很困难,至少慢得难以忍受。

And could you tell me where in the northern part of China you are?

我们在技术论坛主要关心的是技术问题及其解决,其它问题是很次要的,我感觉。特别是有了网络,地球也不过是个村庄,技术交流和思想交流都不会有任何障碍。抱歉,我从来都没有对任何人公开过自己的真实资料,因为网络是个虚拟的世界(因此也是一个不安全的世界)。我想您会理解的。

Why not use a real hard disk to test instead?

Last Saturday, I bought 2 second hand hard disks at Guangzhou. Its size is 1.2G and looks like a new one after refurbishing.

It costs me only RMB15 each [fifteen].

So you could try using this kind of cheap hard disks for testing and development.

一个真实的磁盘,我本来就可以弄到。但我觉得最好是在 vmware 中搞,因为这样很方便。

回复 hunome 兄:

vpc可不可以呢?

我用的是 LINUX 系统,只能使用 vmware,不能使用 VPC。建议使用 WINDOWS 的兄弟试试 VPC。


作者: windrv     时间: 2003-12-4 00:00
Hi Tinybit,

In my opinion, your Grub for DOS is about to complete since what you want is to have it compatible with running Win9x.

We wish to open a new project on Grub for Win on our website, would you like to join in?
作者: 不点     时间: 2003-12-4 00:00
grub for dos 的目标远远没有达到。还有仿真 iso 光盘文件系统,启动 CDROM 等复杂艰难的任务在等待着(这些问题曾经在本站的某个论坛上讨论过)。尽管我对于您的 grub for win 十分支持,但似乎我已经没有时间再去做了,很抱歉。谢谢您一直以来的帮助和支持。

grub for dos 将来或许也可以从 win98 的 DOS 窗口下运行。但不一定能从 win2000 的环境下运行。这依赖于能否 HACK win2000 使得我们能够容易地从保护模式切换到实模式。不过这些 for windows 的实现,不在计划之内,或许根本就没有时间去做。

作者: windrv     时间: 2003-12-4 00:00


  Quote:
以下是引用不点在2003-12-4 13:19:18的发言:
grub for dos 的目标远远没有达到。还有仿真 iso 光盘文件系统,启动 CDROM 等复杂艰难的任务在等待着(这些问题曾经在本站的某个论坛上讨论过)。尽管我对于您的 grub for win 十分支持,但似乎我已经没有时间再去做了,很抱歉。谢谢您一直以来的帮助和支持。

grub for dos 将来或许也可以从 win98 的 DOS 窗口下运行。但不一定能从 win2000 的环境下运行。这依赖于能否 HACK win2000 使得我们能够容易地从保护模式切换到实模式。不过这些 for windows 的实现,不在计划之内,或许根本就没有时间去做。

Hi,

Thank you for your reply.

Nevertheless, I hope you would continue improving your Grub for DOS and we wish to build upon your basis for our Grub for Win.
作者: Wengier     时间: 2003-12-5 00:00
Grub for Win? 是指Grub for Win32 DOS Console吗?
作者: windrv     时间: 2003-12-5 00:00


  Quote:
以下是引用Wengier在2003-12-5 3:16:04的发言:
Grub for Win? 是指Grub for Win32 DOS Console吗?

Grub is a bootmanager. We wish to open a project so that we can have a Win32 GUI for installing and configuring Grub.
作者: 不点     时间: 2003-12-17 00:00
关于 grub for dos,我想说一下自己的打算。我觉得 GRUB for DOS 的开发,目前可以告一个段落。更进一步的开发、HACK 等,比较琐碎、麻烦。我不想投入更多精力,我想干点别的什么。以前曾经说过要加入 ISO 引导等等功能,但是现在看来,没有时间去做了。

现在的测试版应当比较完善了。过几天(也就是在 12 月下旬)公开发布一个测试版。在大约一个月之后就正式发布 0.2.0,这个 0.2.0 应当和现在测试版的差别不太大的。这期间只有 BUG 更正,不再添加新的代码。

如果有人基于 GRUB for DOS 做进一步的开发,我对此表示十万分的支持。

作者: 不点     时间: 2003-12-18 00:00
不对呀,朋友们。看来要推迟公开测试了。

我今天在另外一台机器上用 grub_t10 ,在不用任何磁盘仿真功能的情况下,居然都不能启动 win98 了。但奇怪的是,可以启动 LINUX。用 grub_for_dos-0.1.4 没有毛病。

启动 WIN98 时的症状是:死机。按 ctrl+Alt+del 可以重新启动机器。

难道没有人碰到这一情况吗?还是大家都碰到了,只是不想报告 BUG 罢了呢?或者是,根本就没有人测试这个版本?
作者: Wengier     时间: 2003-12-19 00:00
发个GRUB最新测试版的地址吧,这样大家才可能进行测试呢。

另外现在已有FreeDOS、ROM-DOS等DOS中的XCOPY命令的完整源代码,不知能不能修改一下以给它加个连续复制文件的选项?
作者: 不点     时间: 2003-12-19 00:00


  Quote:
发个GRUB最新测试版的地址吧,这样大家才可能进行测试呢。

地址在

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

哎! 很没有意思, 其实无需大家测试, 我自己的测试就够难对付的了. 倒不是说这个版本有什么危险, 而是说, 我自己感到很糊涂, 究竟哪里出了毛病, 我也不知道. 应当是编程出现的 BUG, 可是我想像不到究竟在哪里有毛病. 过些日子, 我把源程序公开, 让大家一起找找毛病. (比较烦人). 现在还没有整理源程序和文档.

  Quote:
另外现在已有FreeDOS、ROM-DOS等DOS中的XCOPY命令的完整源代码,不知能不能修改一下以给它加个连续复制文件的选项?

这个想法不错. 我有时间的话, 准备试试.

作者: 不点     时间: 2003-12-23 00:00
grub_t11 作为公开测试版发布了。下载地址在这里:

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

说明文档仍然在这里:

http://www.linuxeden.com/edu/doctext.php?docid=3006

另外,有时间的话,准备再写一篇针对 0.2.0 的详细说明文章。

这个版本消除了迄今为止所发现的一切严重的、导致安全危险的 BUG。该是提供公开测试的时机了。


作者: cba-xyz     时间: 2003-12-24 00:00
狂支持。
作者: xiaojun     时间: 2003-12-26 00:00
不点版主:在grub的menu里有没办法把启动画面修改似Linux9.0的那个,我装在MBR里的。。。
作者: 不点     时间: 2003-12-26 00:00
我最关心的是新版本的稳定性. 目前没有时间考虑加入其它的补丁.

redhat 的 grub 是打了补丁的, 可以显示背景画面.

我目前不想增加 grub for dos 的维护复杂度, 不想加入 redhat 的补丁.

如果您有兴趣, 自己是可以加入的. 待到 grub for dos 0.2.0 发布时, 您就可以自己编译了.


作者: xiaojun     时间: 2003-12-30 00:00
不点大哥,在dos下我只要进了Grub,就只有reboot了;没找到退出命令,有没象Exit,Quit样,回到DOS下的命令呢?
作者: 不点     时间: 2003-12-31 00:00
grub for dos 的说明文件里, 已经说了, grub.exe 不能返回到 DOS 的.

如果要增加功能的话, 有很多事情等待着去做:

1. 支持从 ISO 映像文件启动(情况复杂, 有难度)
2. 支持从 CDROM 启动(情况复杂, 有难度)
3. 支持从 win98 下直接运行 grub(技术难度高)
4. 自动探测和恢复 BIOS 中断向量, 从而使 grub for dos 支持任意的实模式 DOS.(技术难度中等)
5. 在 emm386 运行时也能运行 grub for dos(首先解决从保护模式切换到实模式)(技术难度高)
6. 解决在磁盘仿真时和 win98 的一些冲突问题.(技术难度高)
7. 增加退出到 DOS 的功能.(技术难度中等)

遗憾的是, 我没有时间去做了. 但我会坚持把 0.2.0 做好, 并且, 以后当 GNU GRUB 升级的时候, 也会对 grub for dos 进行相应的升级. 但我恐怕不能继续给 grub for dos 增加功能了.

我对于近期的 grub for dos 感到满意, 是一个阶段性的产品, 可以划上一个句号了.

grub for dos 0.2.0 很有可能会成为终结版(最多只会跟踪GNU而改变), 希望有兴趣的人继续开发它.

作者: 不点     时间: 2004-1-11 00:00
第二个公开测试版发布:

  【1 月 10 日更新】 增加了将任意 MS-DOS 逻辑分区仿真为硬盘的功能(好!);通过改进算法,去除了“由 GRUB.EXE 启动 MS-DOS 7+ 之后不能再次运行 GRUB.EXE”的 BUG(好!)。正式版的推出日期基本上完全取决于英文文档的完成日期,希望有人能够帮助【可以参照本文结尾的中文文档,从而贡献一篇英文的说明文档】。我写作英文比较吃力,所以,如果由我来写 0.2.0 的英文说明,可能就太过于简化了。

  仍然可以在 Wengier 的 新 DOS 论坛 之“启动盘室”报告 BUG。


  下载第二个(也许是最后一个)公开测试版本,在这里:

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

  注记1:上述 BUG 在以前的版本中已经存在很久了,所以,这个测试版应当是最好用的了。

  注记2:改进 MS-DOS 7+ 的探测算法之后,或许会带来新的问题,导致 grub.exe 干脆就不能运行于某些机器的 MS-DOS 7+ 之下。如果是这样,请尽快报告 BUG【觉得好像不会出现这种问题】。



中文说明文档暂时放在以下网页的结尾处:
http://www.linuxeden.com/edu/doctext.php?docid=3006




[此贴子已经被作者于2004-1-11 23:50:43编辑过]



作者: Wengier     时间: 2004-1-11 00:00
不点: 我刚才试了一下,发现GRUB的T12版在VIDE-CDD.SYS光驱驱动程序加载后无法启动,而GRUB的T11版就可以. 另外您能不能介绍一下关于您刚修正的GRUB的此BUG的产生原因等更详细情况,谢谢!

[此贴子已经被作者于2004-1-12 1:01:38编辑过]



作者: 不点     时间: 2004-1-11 00:00
旧的版本根据 0000:05dc - 0000:05fb 这个范围内的值来恢复 BIOS 中断 int70 - int77 的向量。由于这一内存区域看来像一个堆栈,有时候会被覆盖掉,所以,新版的 t12 不再根据这一区域的值来恢复中断向量了。这样,新版就解决了 GRUB.EXE 不可重入的老问题。

t12 采用的方法是探测 0000:01c0 - 0000:01df 这个范围的中断向量所指向的 MS-DOS 的中断服务程序,从中找到原始的 int70 -int77 的 BIOS 中断向量。

VIDE-CDD.SYS 加载之后,可能修改了 0000:01c0 - 0000:01df 这个范围的中断向量,这就使得这种探测失败了。

解决的办法是先用旧的探测方法,失败时再用新的探测方法。

请您用 debug 列出  0000:01c0 - 0000:01df 这个范围的值,我需要看看哪些向量被修改了,哪些向量没有改动。


作者: 不点     时间: 2004-1-12 00:00
grub_t13 已经上载,应当解决了上述问题。

  【1 月 12 日更新】 修复了 grub_t12 不能启动的故障。正式版的推出日期基本上完全取决于英文文档的完成日期,希望有人能够帮助【可以参照本文结尾的中文文档,从而贡献一篇英文的说明文档】。我写作英文比较吃力,所以,如果由我来写 0.2.0 的英文说明,可能就太过于简化了。

  仍然可以在 Wengier 的 新 DOS 论坛 之“启动盘室”报告 BUG。

  下载第三个(也许是最后一个)公开测试版本,在这里:

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

  注记:改进算法使得由 grub.exe 启动 MS-DOS 7+ 之后,还可以再次运行 grub.exe。但是,多次重入会导致访问硬盘时死机,原因不明【不打算解决这个问题】。如果只是重入一次,似乎一切正常。另外,在 DOS 下并非出现其它危险(例如破坏掉某个扇区),最多仅仅是死机而已。

中文说明文档暂时放在以下网页的结尾处:
http://www.linuxeden.com/edu/doctext.php?docid=3006


作者: Wengier     时间: 2004-1-12 00:00
不点:您说要撰写英文文档,不知有没有现成的待翻译的一部分中文原文?另外格式和字数等有没有更具体的要求?

关于GRUB本身,我发现如果在DOS下启动了UCDOS,CCDOS97等汉字系统,进入了中文方式(此时屏幕为图形模式)后再运行GRUB.EXE的T11,T13等版本的话,系统会立即死机.但如果用Ctrl+F7键切换到英文方式(此时屏幕为文本模式)后再运行GRUB则不会死机.不过这样用GRUB重启硬盘上的DOS后UMBPCI加载时会提示指定的内存的参数范围错误.

[此贴子已经被作者于2004-1-12 2:02:06编辑过]



作者: 不点     时间: 2004-1-12 00:00
关于英文文档, 我目前还根本就没有时间动手去做, 只能依赖援助了. 我初步打算把英文文档放在 README 文件中[如果最后必须由我来写的话, 由于写的很少, 所以就放在 README 文件中], 但也可以另外单独放置, 而在 README 文件中指出该说明文档的位置. 关于字数, 格式等, 都没有任何限制的, 由写作的人自行决定. 例如, 文本格式也行, man 手册格式也行, html 格式也行. 由于是撰写, 所以, 不必严格翻译中文文档. 中文文档只作为参考, 完全可以大幅删减或增加, 也可以打乱次序. 总之, 是重新写作. 怎么样写都行.

热切期望 Wengier 兄再次帮助, 这里先谢谢了. 我最近身体不好, 在住院治疗, 有些事情实在照顾不过来了. wengier 兄能够帮助的话, 真是太感谢了!

==========

关于您所提到 BUG, 我初步猜测是因为运行了 int13/AX=4b00 的缘故. 这是退出光盘启动的磁盘仿真的方法, 没有太大的用处. 下一个版本将它去掉试试, 看看还有无问题.


作者: 不点     时间: 2004-1-12 00:00
grub_t14 上载,先判断 bootable CDROM 是否仿真了软盘或硬盘。如果没有仿真,就不运行 int13/AX=4b00。看看这样的话,问题是否得到解决。

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


作者: Wengier     时间: 2004-1-12 00:00
不点:原来您最近在医院呀?希望没有什么大的问题吧。祝身体键康,可不要累坏了。

您的精神确实令人感动。可惜这几天我的那台经常用的新电脑坏了(硬件故障),现在只好用一台公用的旧电脑了,不仅速度慢,而且上机时间也有了许多限制。而且由于这台电脑上没有虚拟机而且也不能安装(机器配置低而且是公用的),所以最近测试GRUB都是在真实电脑中进行的。我非常希望我能帮忙,可惜。。
作者: 不点     时间: 2004-1-12 00:00
不太要紧,谢谢关心。我是半住院,时常跑出来。您这次不能帮忙也不要紧,能测试也是最大的帮助了。希望您的测试是安全的。希望及时报告 BUG。看看这 t14 行不行。
作者: Wengier     时间: 2004-1-15 00:00
不点:我刚才试了一下这个T14版,不过在加载了UCDOS等汉字系统,当系统自动进入中文DOS命令行方式时,输入GRUB想进入GRUB还是死机。我想是不是GRUB目前还没有恢复显示模式的功能的原因?

另外,能不能让GRUB支持批处理脚本方式,例如可以自动运行以下的boothd.cmd文件,以免必须手工输入?而现有的menu.lst方式必须有菜单才行,否则根本无法被GRUB执行,希望能改进一下GRUB使之直接支持批处理脚本方式就好了。例如:

root (hd0)
chainloader +1
boot
作者: 不点     时间: 2004-1-15 00:00
第一个问题: 在加载了UCDOS等汉字系统,当系统自动进入中文DOS命令行方式时,输入GRUB想进入GRUB还是死机。我想是不是GRUB目前还没有恢复显示模式的功能的原因?

首先, 我不知道是 GRUB 一直都存在这个问题呢, 还是后续的版本引来的新问题. 这很重要. 因为新版本 0.2.0 并无特别的不同之处, 如果是以前一直存在这个问题, 那就可能是您说的原因, 显示模式没有恢复到文本模式. 可以用恢复显示模式来解决, 也可能解决不了. 如果是新版本引来的新问题, 则是一个 BUG, 需要纠正, 应当是能够纠正的.

-------

我感觉第二个问题似乎能够有办法处理的. menu.lst 似乎够用了. 把 timeout 设置为 0 就不出现菜单了, 直接从默认的 title 启动操作系统.

GRUB 有一条命令 configfile 可以用来运行 menu.lst 文件(或者指定的任何菜单文件), 相当于运行 DOS 的 BAT 文件. 要想使菜单不出现, 可以把 timeout 设置为 0. 这样就自动运行 default 项目里面的命令了.

不过, 菜单会自动在尾部增加一条 boot 命令, 这是比较难受的. 如果不想要这个 boot 命令, 可能就比较麻烦了. 这也许是当初设计 GRUB 的人没有考虑到的问题.

作者: Wengier     时间: 2004-1-15 00:00
不点:

关于第一个问题,应该是GRUB for DOS一直都存在的问题。我刚才做了个试验,先在DOS下用MODE CO40命令将DOS的显示模式切换到40列(而通常是80列),结果用GRUB命令运行GRUB for DOS发现它并没有恢复显示模式,仍然使用40列的显示模式。可见GRUB for DOS目前确实缺少了恢复显示模式的功能,造成从图形命令行方式进入GRUB for DOS时会死机。

关于第二个问题,您说的timeout设置为0我以前曾试过,但好像并非不出现菜单,而是菜单一闪而过(有时甚至更长;我还曾试图color命令来消隐菜单,但效果还是不太理想),再加上尾部确实总是自动增加一条boot命令,似乎已严重影响了操作效果(我是当时准备把GRUB for DOS加入到超级DOS启动盘中用于引导多启动时发现这些问题的)。不知有没有办法解决?
作者: 不点     时间: 2004-1-16 00:00
我用 “超级通用MS-DOS 7.10启动盘” 启动实模式的 DOS,然后运行 XZL 中文系统,之后再敲入 grub ,结果,屏幕上没有任何反应了。但是,这不是死机,仅仅是显示不出东西了。从键盘上敲入 grub 的 “reboot” 命令,照样可以重启动机器。

可以考虑用 grub 的模式转换命令,如果 GRUB 有这样的命令的话。

再研究研究吧。

========

关于 GRUB 批处理,可以尝试加入一条叫做 “exit-to-command-line” 的命令。把这条命令放在菜单中的最后一行,这样,在菜单中就可以避免执行最后的 boot 命令了。

或者用 map --exit-to-command-line 的方式来实现。

菜单闪过的问题, 应当也可以解决的。

作者: xiaojun     时间: 2004-1-16 00:00
用放于MBR里的GRUB(在Boot.ini里),来启动img,boot命令之后要么只剩光标在左下角闪动,要么花屏,但在dos执行硬盘上的guru后启动IMG正常。有没有Grub的中文命令HLP啊?


[此贴子已经被作者于2004-1-16 10:42:04编辑过]



作者: 不点     时间: 2004-1-16 00:00
谢谢.

您报告的是一个奇怪的情况. 根据您的报告, 似乎 NTLDR 在引导 512 字节的启动扇区之前, 还修改了某些 BIOS 中断向量或者别的什么. 按道理不应当发生这种情况.

希望更多的人测试研究这一情况.

GRUB 命令详细的中文帮助可能不多见(我也没有注意过), 在 google 中找吧.

------------

另外补充一下, 有些 BUG 是 GNU GRUB 的 BUG, 不仅仅是 GRUB FOR DOS 的, 或者换句话说, 与 GRUB FOR DOS 的补丁本身没有任何关系. 对于这类 BUG, 最好直接向 GNU GRUB 的 BUG 报告邮件列表报告.网页如下, 也可以查看以前别人是否报告了相同的 BUG:

GNU GRUB 主页: http://www.gnu.org/software/grub/
BUG GRUB 信息页: http://mail.gnu.org/mailman/listinfo/bug-grub
查看以前全部的 BUG 报告信息: http://mail.gnu.org/archive/html/bug-grub/

对于 GNU GRUB 的 BUG, 即使我们发现了, 也可能不容易解决. 我们只可能解决其中一些容易解决的 BUG. 绝大多数 BUG 都留待 GNU GRUB 项目组去解决.

我们只能着重解决 GRUB FOR DOS 特有的 BUG, 也就是对于 GNU GRUB 的扩充部分:

1. 由 DOS 启动代码部分而导致的 BUG.

2. 由磁盘仿真代码部分而引起的 BUG.


[此贴子已经被作者于2004-1-16 14:18:42编辑过]



作者: 《电脑爱好     时间: 2004-1-16 00:00
GRUB双启动,只要WINDOWS盘格式化后就文件损坏。MBR
作者: 不点     时间: 2004-1-16 00:00
《电脑爱好者》 兄说详细一些吧, 我没有看太明白.

用了磁盘仿真命令没有?

格式化谁? 损坏的是谁?

网页上关于 grub for dos 0.2.0 磁盘仿真有详细的说明, 尤其是有关格式化的功能, 有说明. 看看吧:

中文说明文档暂时放在以下网页的结尾处:
http://www.linuxeden.com/edu/doctext.php?docid=3006


作者: 不点     时间: 2004-1-20 00:00
【1 月 20 日更新】 Wengier 报告 BUG:当 DOS 汉字系统存在时,显示实际上处于图形模式。这时 grub 的输出在屏幕上看不见。问题已经解决了。解决的办法:增加两条指令恢复文本显示模式。其它没有改动。

  顺便有一个发现【好像比较令人吃惊】:用 Wengier 的“超级通用 MS-DOS 7.10 启动盘”启动 DOS 之后,由于在这个 DOS 下加载了鼠标驱动程序,所以,在 grub.exe 运行之后的 grub 环境中能够使用鼠标了。我在别的情况下运行 grub.exe 后,不能使用鼠标。看来“超级通用 MS-DOS 7.10 启动盘”中的那个鼠标驱动程序是够厉害的。

  正式版的推出日期基本上完全取决于英文文档的完成日期,希望有人能够帮助【可以参照本文结尾的中文文档,从而贡献一篇英文的说明文档】。我写作英文比较吃力,所以,如果由我来写 0.2.0 的英文说明,可能就太过于简化了。

  仍然可以在 Wengier 的 新 DOS 论坛 之“启动盘室”报告 BUG。


  下载第五个(也许是最后一个)公开测试版本,在这里:

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

==========

批处理的问题不想解决了,因为那是另外编程,有可能和 GNU 未来的设想发生冲突,或者导致重复开发。

NTLDR 所引起的问题,也不一定能够解决。我们对 DOS 的支持是重点,NTLDR 不属于 DOS,就要放在以后再去解决了。


中文说明文档暂时放在以下网页的结尾处:
http://www.linuxeden.com/edu/doctext.php?docid=3006
作者: Wengier     时间: 2004-1-21 00:00
我用GRUB for DOS在这台电脑上试图用map命令虚拟软盘,比如说:

map (hd0,1)/grub/dos.img (fd0)

路径本身应该是正确的,但GRUB总提示以下错误信息:

Cannot mount selected partition.

不知何故?

作者: 不点     时间: 2004-1-22 00:00
或许这个路径是错误的。

(hd0,0) 一般是主分区,(hd0,1) 一般是 DOS 的扩展分区“容器”,它不是一个分区。只有 (hd0,4) 才是一个逻辑分区。所以,一般不存在一个叫做 (hd0,1)/.../... 的路径。

Cannot mount selected partition.

这个错误信息说明了 (hd0,1) 不能被 mount,因为它不是逻辑分区,没有【grub 所认识的】文件系统在里面。

-------------------

看来 grub for dos 已经很稳定了,很难再碰到什么 BUG 了。

最近准备做一个 grub for NTLDR 的东东,使得在 NTLDR 的 boot.ini 中可以启动 grub。


作者: Wengier     时间: 2004-1-22 00:00
不点:我发现在纯DOS下加载了USB驱动程序(USBASPI.SYS+DI1000DD.SYS)成功在DOS下驱动U盘后,然后用GRUB命令来启动GRUB for DOS时,系统通常会死机(是真正的死机,而不是屏幕显示不出来)或自动重启。是不是GRUB for DOS与这些USB驱动程序不兼容?
作者: 不点     时间: 2004-1-22 00:00
严格来说,GRUB for DOS 是不能使用鼠标以及任何其它 DOS 下的驱动程序的。GRUB 将所有重要的 BIOS 中断向量都加以恢复。如果鼠标以及 USB 等所使用的中断没有被恢复到 BIOS 的初始值,则一般会导致死机。

GRUB 本来是直接接管启动任务的,它在操作系统之前就开始接管。GRUB 假定没有操作系统在它之前运行。GRUB FOR DOS 力求恢复所有重要的 BIOS 中断向量,以便让 GRUB 觉得舒服。但是也有大量漏网的 BIOS 向量没有恢复。这种情况下,如果漏网的中断还在活动,就会导致死机。

要解决这类问题, 需要知道设备驱动程序或者 TSR 究竟修改和使用了哪些中断,以便将该中断屏蔽掉。

但是,如果要在 GRUB 下使用 USB 盘,那一般是不行的。GRUB 的环境应当是干净的 BIOS 环境,如果 BIOS 不支持 USB 盘,那么 GRUB 就不能访问 USB 盘【目前是如此】。


作者: 不点     时间: 2004-1-24 00:00
grub for ntldr 初始版本发布了。

软件简介:从 Windows 2000 的 NTLDR 引导菜单中可以直接启动 GRUB。下载地址:

ftp://ftp.cosoft.org.cn/incoming/grub_for_ntldr-test001.tar.gz

用法:解压后将 bootgrub 和 grldr 两个文件拷贝到 C: 盘根目录,修改 Boot.ini 文件即可。一般是在 Boot.ini 文件末尾增加如下一行:

C:\bootgrub="boot grub"

bootgrub 是一个引导扇区,它要引导 grldr 文件。GRUB 的程序代码是在 grldr 文件中。

中文信息网页暂时还在这里:
http://www.linuxeden.com/edu/doctext.php?docid=3006


作者: xiaojun     时间: 2004-1-24 00:00
这应该是没有Menu.lst的纯Grub吧?
作者: 不点     时间: 2004-1-24 00:00
支持 menu.lst 的功能,是在 GNU GRUB 中实现的,因此,GRUB for DOS 以及 GRUB for NTLDR 都可以用 menu.lst 文件。

for NTLDR 的版本所不同的,是在 BOOT.INI 中无法写命令行参数,所以,只能使用默认的 (hd0,0)/boot/grub/menu.lst 文件。

如果没有这个菜单文件,那么还可以在命令行中使用

configfile (hd0,7)/boot/grub/menu.lst

之类的命令来启动菜单。

当然了,如果 (hd0,0) 是 NTFS 分区,那么菜单是无法起作用的,因为 GNU GRUB 还没有支持 NTFS。

------------

另外,虽然 GNU GRUB 不支持 NTFS,但是,GRUB for NTLDR 仍然可以在 NTFS 系统的 NTLDR 菜单下引导成功。

这是两个概念:引导 GRUB 的系统可以处于 NTFS 之下,当然 GRUB 获得引导之后,在 GRUB 中仍然无法读取 NTFS 分区里面的文件。

也就是说,BOOTGRUB 和 GRLDR 两个文件可以处于 NTFS 文件系统中,它们能够完成引导 GRUB 的任务。


作者: xiaojun     时间: 2004-1-24 00:00
不点大哥,我放Grub在MBR的,lst文件在boot\grub里,从Boot.ini启动后的菜单功能都正常,其中1项是Map了1个dos的img,便是启动到纯dos,而我要回到Grub的命令行,又得键:Grub;在lst文件该如何定义1项启动Grub纯命令行的呢?还有,有时进了命令行又忘了想Map那个IMG名了,看半天找不到列目录的命令,只好重chainloader到boot.ini返回dos,看清img名又进Grub,有列目录的命令吗?       谢谢...

作者: 不点     时间: 2004-1-24 00:00
GNU GRUB 原始的功能,有些做得不很方便,例如,就没有一个菜单命令直接退回到命令行。我不想为 GNU GRUB 增加这样的命令,一个原因是没有时间,第二个原因是恐怕别人也做这个,重复劳动浪费精力;第三个原因,觉得这个问题不很紧迫,也没有太大的兴趣。

--------

另外我感觉 xiaojun 兄似乎对 GNU GRUB 不很熟悉,应当 google 网络找找资料看看了。

1。从菜单进入命令行的方法:直接敲键盘左上角的 ESC 键即可。【从 GRUB 命令行返回到 GRUB 菜单,似乎也是用 ESC 键。】

2。虽然 GRUB 没有一个 DIR 命令,但是可以用命令行自动补齐功能来察看文件等信息。举例:

敲入

root (

在左括号敲入后,按一下键盘上的 Tab 制表键,就可以列出 fd0, hd0, hd1 等硬盘了,

root (hd0

再按 Tab 键,可能出来一些分区信息:

root (hd0,0)

这时候,敲入一个 “/” 路径分隔符:

root (hd0,0)/

再次按下 Tab 键,则列出 (hd0,0) 根目录下的内容。当你看到根目录中有一个 boot 的时候,你敲入:

root (hd0,0)/boot/

这时再次按下 Tab 键,则列出 boot 目录下的内容。当你看到 boot 目录中有一个 grub 的时候,你敲入:

root (hd0,0)/boot/grub/

这时再次按下 Tab 键,就看到 GRUB 目录中全部文件的列表了。

---------------

Tab 键很方便,例如你敲入

ch

然后按一下 Tab 键,则自动把命令补齐,变成

chainloader


作者: xiaojun     时间: 2004-1-24 00:00
以前用过自动补齐,当我敲root (h 后Grub补出的是分区信息,原以为它只补分区,惭愧惭愧,感谢不点大哥,又教兄弟1招,多谢了... !          :)
作者: Wengier     时间: 2004-1-26 00:00
不点:

我现在这个系统中有两个硬盘,但每次只能从其中的一个硬盘启动。我想通过GRUB for DOS用以下命令来实现从另一个硬盘启动:

root (hd1)
chainloader (hd1)+1
boot

但是,我发现此命令执行后仍然是从第一个硬盘启动,而不是从第二个硬盘启动。交换硬盘后也一样。路径本身应该没错,从tab键的显示就可以看出来。不知是什么原因呢?

不过您的GRUB for DOS及GRUB for NTLDR做得都非常好,我们大家都非常感谢!我想问一下,您做的许多关于GRUB的新增的很有用的功能以及bugfixes,那些GNU GRUB的作者会将它们加入到新版本的GNU GRUB中吗?我希望如此,毕竟这些功能和bugfixes都是非常有意义的,而且还可以避免重复开发。您说对吗?

[此贴子已经被作者于2004-1-26 6:10:00编辑过]



作者: 不点     时间: 2004-1-26 00:00
应当用以下的命令集来达到您的目的:

map (hd1) (hd0)
map (hd0) (hd1)
chainloader (hd1)+1 或者 chainloader (hd1,0)+1
rootnoverify (hd0)
boot

在您的命令集当中,root (hd1) 是错误的。这条命令告诉 BOOTLOADER 程序谁是引导盘。PC 机 BIOS 标准规定只有 A:盘和 C:盘才能成为引导盘,也就是 0x00 和 0x80 才可以引导,其它 BIOS 磁盘不能引导。由微软生产的 MBR 以及 DOS 引导代码都假定引导机器的硬盘盘号是 0x80, 也即 (hd0) 而不是 (hd1) 等等,所以,当我们用 (hd1) 来引导机器的时候,总是失败的。

既然必须从 (hd0) 来引导机器,因此我们只好用两条 map 命令来交换磁盘号码了。其实如果我们不仅引导 DOS,还想引导 windows 的话,还得使用 GRUB 的 hide 命令隐藏 NTFS 分区,否则 win98 启动时会一直查找 NTFS 分区从而导致死锁。

rootnoverify (hd0) 命令是需要的,因为 chainloader (hd1)+1 命令将引导盘的盘号变成了 0x81, 所以需要用 rootnoverify (hd0) 命令来加以纠正。chainloader (hd1)+1 命令的主要作用仅仅是把引导扇区放在 0000:7c00 的位置,等待 boot 命令将控制转移到这里。boot 命令在转移控制之前,先把 CPU 的 DL 寄存器设置成  rootnoverify (hd0) 命令所指定的值,也就是 0x80。

DL 寄存器携带着启动盘的号码,这一点必须保证,否则,引导过程就可能失败。

另外,Windows 和 DOS 有很多 BUG,我们基本上无能为力。能躲过去,则躲;躲不过去,则只有认命了。如果 FreeDOS 有什么 BUG,我们还可以向开发者报告 BUG,或者我们自己也可以试图消除它。

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

您提到的第二个问题,是我从一开始就要面对的问题。当时我也不想另外立一个项目,自己维护。因为这样很复杂,而交给 GNU GRUB 去维护,则省去了我的不少麻烦。但是左思右想,还是觉得自己维护比较可行。原因有以下这些:

1。我不能肯定 GNU GRUB 的开发者是否会接受我的 PATCH。虽然我并未向 GNU GRUB 提交 PATCH,但我曾经向别的项目提交过补丁,项目维护者甚至连一封回信都没有,就石沉大海了【当然只有一次没有采纳,其它的PATCH还是采纳了】。

2。GRUB for DOS 不是一个小补丁,而是一个大大的补丁,处于开发之中,经常变动。在这种情况下,不适合提交补丁。只有等不再继续开发之后再提交才合适。

3。提交补丁是一个琐碎的事情,比较麻烦。我喜欢编程,不喜欢写文档,也不喜欢提交补丁。

4。我对 GNU GRUB 开发组的工作效率表示极大的疑问。他们居然有好几个月都不对 GRUB 进行升级,仍然是 0.93 的版本。这个效率是不能令人满意的。我可是个急性子,不想被他们这样拖住。

大致基于以上这些原因,我决定由自己来维护一个新项目。现在看来,这确实是一个比较明智的决定了。因为直到现在,GNU GRUB 的版本还是 0.93,这简直太慢了,受不了。

当然了,在 GRUB for DOS 0.2.0 推出之后,我也要考虑提交给 GNU GRUB 的问题了。但是,他们未必会采用,因为英文的文档我写不好。没有好的英文文档,他们是不会轻易采纳的。我所以很希望有人能够帮忙啊。

顺便说,GRUB for DOS 0.2.0 将把 GRUB for NTLDR 包括在内了。


作者: Wengier     时间: 2004-1-26 00:00
不点:谢谢以上信息!

刚才我对GRUB for NTLDR做了进一步的测试,发现它在我的大硬盘(C盘是2048MB的FAT16)上运行基本正常;但在我的小硬盘(C盘是500MB的FAT16)上则无法正常运行,现象是在NTLDR菜单上选择此项后自动返回NTLDR菜单,而无法进入GRUB。两个硬盘中所用的MENU.LST文件是相同的(MENU.LST修改过也无效,看来不是MENU.LST的原因),而且GRUB for DOS则没有此问题。不知何故?

另外,我发现BOOTGRUB.INI中有以下信息:

Error: NTLDR not found. Press Ctrl+Alt+Del to restart.

其中的“NTLDR”应为“GRLDR”吧。
作者: 不点     时间: 2004-1-26 00:00
试试 test002 怎么样?

ftp://ftp.cosoft.org.cn/incoming/grub_for_ntldr-test002.tar.gz
ftp://211.100.7.71/incoming/grub_for_ntldr-test002.tar.gz


作者: Wengier     时间: 2004-1-26 00:00
不点:我刚才试了一下test002版,不过跟test001版一样,还是在小硬盘上的NTLDR菜单中启动失败,不知何故?
作者: 不点     时间: 2004-1-27 00:00
1。系统中有几个硬盘,各个硬盘的分区格式是什么?

2。机器中有几个 windows NT 系统?系统的版本?

3。有几个含有 NTLDR 的分区?【怀疑启动了另外一个NTLDR的 boot 分区,是一种错位。】

4。把 MBR 扇区,以及含有 NTLDR 的分区的开头 16 个扇区拷贝下来【可以用debug来拷贝】,放在一个我可以下载的地方。


作者: Wengier     时间: 2004-1-27 00:00
系统中无论放一个或两个硬盘,只要从那个小硬盘启动的效果就是一样的,甚至无论GRLDR文件是存否在都是一样的(可见不是GRLDR的原因,而是BOOTGRUB的原因)。两个硬盘中的NTLDR、MENU.LST文件是一样的,而且都在相应硬盘的C盘上。小硬盘上有C盘和D盘,全是FAT16分区。

不过,那个小硬盘中并没有任何Windows NT系统,仅仅有个WinNT/2K/XP的引导菜单来引导DOS、OS/2、从软盘启动、从光盘启动等系统罢了,也就是说,仅仅是将NTLDR当作一个普通的启动管理器。不知GRUB for NTLDR无法在这个系统中启动跟这个有关?

[此贴子已经被作者于2004-1-27 10:19:36编辑过]



作者: 不点     时间: 2004-1-27 00:00
请您把 MBR 扇区,以及含有 NTLDR 的分区的开头 16 个扇区拷贝下来【可以用debug来拷贝】,放在一个我可以下载的地方。

我怀疑您的两个硬盘的引导扇区中的程序不同。那个大的 2G 盘是正常的引导扇区,小的 500M 盘的引导扇区,不正常。GRUB for NTLDR 要用到这个扇区里面的程序。所以,还是得看看这段程序有什么不同之处。


作者: Wengier     时间: 2004-1-27 00:00
不点:经检查,两个硬盘的引导扇区虽然都是NT的引导扇区,但确实有所不同。我已将您想要的MBR扇区和NTLDR所在的主分区的16个扇区的内容打包上传了上来:
打开附件

说明:里面的HD1???.DAT是小硬盘的扇区,而HD2???.DAT是大硬盘的扇区。
作者: 不点     时间: 2004-1-27 00:00
已经下载了,正在处理。谢谢。


作者: 不点     时间: 2004-1-27 00:00
版本 test003 应当 OK 了,试试看吧:

ftp://211.100.7.71/incoming/grub_for_ntldr-test003.tar.gz

就是把 bootgrub 改了一下。


作者: i659     时间: 2004-1-27 00:00
是这样的,大家可以在网上下载grub for dos然后可以直接用它引导boot.flp(bsd启动2.88M软盘镜像),就可以装了。
这其实就是一个怎么在dos下让软盘镜像启动起来的问题,grub for dos的说明上说不支持2.88M的软盘镜像,好像特别

说明了不能用来启动bsd的引导软盘镜像,但我试了一下,确实可以做到的
我的例子
一:把grub.exe和boot.flp放在c:的根目录下,也可以自己选者目录
二:c:\>grub
三:grub\>map (hd0,0)/boot.flp (fd0)
四:grub\>chainloader (hd0,0)/boot.flp
五:grub\>rootnoverify (fd0)
六:boot
往下的就和用真实的软盘一样的了,我就不再说了,

注意:1->要在实模式dos下操作(我在虚拟机里没有成功)
2->grub.exe和boot.flp在硬盘里的物理结构上的位置应该在同一个连续的扇区上(自己想办法做到),不然会出

现"file for drive emulation must be in one contiguous disk area"的提示。

以上这段文字是我从 www.linuxsir.org 上摘过来的,利用这种方法可以在dos下安装freebsd
不知能否把这个程序完善一下,利用它来装freebsd倒是一个好方法,还有我在xp下引导到grub就无法启动上面的步骤

(也就是第三步)
作者: Wengier     时间: 2004-1-28 00:00
不点:我刚才试了一下这个test003版,果然可以正常启动了,谢谢!

另外,我想问一下有没有办法通过GRUB命令来禁用一个硬盘,以使得DOS以及WIN看不见?由于种种原因,现在我想禁用其中一个硬盘时总得在BIOS中禁用,比较麻烦,所以我希望用GRUB来直接完成就好了。谢谢!

对了,我看到您在那个linuxden网页上写着“Wengier的论坛”。其实,这个论坛显然不是我一个人的,而是大家的。当时是我联合了其他几个DOS站长和版主一起建的这个DOS论坛,所以叫“联合DOS论坛”或“中国DOS联盟论坛”。所以这个论坛是大家(所有华人)共同拥有和使用的DOS论坛,是为整个中文DOS世界而造福的,您说呢?
作者: 不点     时间: 2004-1-28 00:00
i659 兄:
GRUB 的软盘仿真功能,可以启动任何软盘【包括 LINUX 和 FREEBSD 的软盘,总之,任何用途的软盘】,这一点,没有任何限制。但是,也有若干关于操作系统的限制,主要是基于这样的事实:某些操作系统在接管控制之后不使用 BIOS 的 INT13 接口,如果这样的话,就可能出现某些问题,也可能不出现问题。具体说明如下:

当这类操作系统不使用、不访问软盘中的内容时,能够正常操作,和真实软盘启动没有任何差别。例如绝大多数 LINUX 软盘以及 FreeBSD 软盘就是这样的。

当软盘映象中的程序要访问软盘映象自身的内容时,就会出现访问失败的情况。这样,启动就会出现故障。这是因为,用户程序是通过操作系统【不是通过 BIOS 接口】来访问真实软盘的,而真实的软盘不在软驱之中,所以访问失败。

GRUB for DOS 0.1.x 对 2.88M 的软盘一般是不支持的。GRUB for DOS 0.2.0 对任意尺寸的软盘映象都支持了,还支持任意尺寸的硬盘映象的仿真。现在虽然还没有发布 GRUB for DOS 0.2.0 的正式版,但现在的测试版几乎就等于正式版了。

=========

在 XP 下,如果您的磁盘是 NTFS 格式的,您将无法在 GRUB 下访问磁盘中的文件 (hd0,0)/boot.flp,您可以访问另外一个 FAT32 分区中的文件。把 boot.flp 放在 FAT32 分区,就可以在 GRUB 下访问它了。

另外,如果您的 boot.flp 已经处于 FAT32 之下,那么,map 失败的原因就是,boot.flp 文件有碎片。你可以多拷贝几个 boot.flp 的备份,看看哪个没有碎片就用哪个。

网页上对此说的很详细:
http://www.linuxeden.com/edu/doctext.php?docid=3006

----------------------------------

Wengier 兄:

禁用磁盘的功能,我原来也曾考虑过,但是,由于 windows 可能不使用 BIOS ,所以,这种禁用不一定好使。windows 的 32位磁盘存取,其实就是跳过 BIOS int13 接口。

在 DOS 下禁用磁盘,可能效果会好一些。关于禁用某个磁盘,或者增加某个磁盘,有三点考虑:

1。在 BIOS 数据区有软盘个数和硬盘个数的字段,增删磁盘时,最好应当调整一下这些字段。

2。在 CMOS 中保存了磁盘配置信息,但是,最好还是别动它。

3。用 map 命令使磁盘不可访问。

关于第1条,由于我们的 GRUB 有时候要重入,改动之后重入时要再恢复它,比较麻烦,容易搞错,所以,第1条我们也不做了。因此我们只用第3条来实现。例如,禁用 (hd1):

map --disable-chs-mode --disable-lba-mode (hd1) (hd1)

我不知道这个命令是否工作正常,我没有试验过。

增加一个硬盘 (hd3):

map (hd2,0)/hard_disk.img (hd3)

由于 BIOS 数据区的硬盘个数没有增加,所以,这条命令并不能增加一个 (hd3)。

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

我在网页上的说法比较随便,看来,得改改了。我以前对本站的概况不了解。


[此贴子已经被作者于2004-1-28 10:19:23编辑过]



作者: i659     时间: 2004-1-28 00:00
我用  blocklist 看了一下:
blocklist (hd0,6)/boot.flp
(hd0,6)13700944+5760

显示这样,应该没有碎片吧(我不是太清楚的说,对这方面我不是太懂的说)
作者: i659     时间: 2004-1-28 00:00
我的硬盘有C  D  E  F四个盘,C D E均为ntfs格式,F为FAT32格式,按照这里的方法(作了一个变通)

一:把grub.exe和boot.flp放在f:的根目录下
二:c:\>grub
三:grub\>map (hd0,6)/boot.flp (fd0)
四:grub\>chainloader (hd0,6)/boot.flp
五:grub\>rootnoverify (fd0)
六:boot


启动后它提示要kernel文件,下一步我该怎样做呢?我不知该怎样提供这个kernel文件给你


出错信息如下:

>load /kernel
/kernel text=0x257ba8 data=0x32d68+0x3fb78
zf_read: unexpected EOF

elf32_loadexec: archsw.readin failed
load : can't load file '/kernel' : input/output error
作者: i659     时间: 2004-1-28 00:00
我的硬盘有C  D  E  F四个盘,C D E均为ntfs格式,F为FAT32格式,用的是ntloader,我一般用它来引导xp(这是当然

的了)另外,我还用它来引导redhat以及debian

ftp://ftp.cosoft.org.cn/incoming/grub_for_ntldr-test003.tar.gz  

从这里下载for ntloader的grub for dos 程序后,按照说明,把解压后得到的bootgrub  grldr 放到c:根目录下
在boot.ini添加如下选项:
c:\bootgrub=" boot grub"


重启后,选择进入 boot grub

一、 grub\>map (hd0,)/boot.flp (fd0)
二、 grub\>chainloader (hd0,)/boot.flp
三、 grub\>rootnoverify (fd0)
四、 boot

(说明:我已经从下载的iso文件中解压出boot.flp,并把它放在f:盘的根目录下)
能够进入安装程序,后面我没试过,也就不知能否真正安装下去。(其中在第一步:
一、 grub\>map (hd0,)/boot.flp (fd0)
出现如下信息:
Autodetect number-of-heads failed.  Use default value 2
Autodetect sectors-per-track failed.  Use default value 36      
但后面步骤能够继续)



但我在网上搜了一些资料,它们都说用硬盘安装,必须把下载得到的iso文件解压到c:\freebsd目录下,否则不能安装

,可是我前C  D   E 均为ntfs格式,只有f盘是fat32格式


作者: Wengier     时间: 2004-1-28 00:00
以下是引用“不点”的发言:

“禁用磁盘的功能,我原来也曾考虑过,但是,由于 windows 可能不使用 BIOS ,所以,这种禁用不一定好使。windows 的 32位磁盘存取,其实就是跳过 BIOS int13 接口。
在 DOS 下禁用磁盘,可能效果会好一些。”


这个我知道,不过我之所以提到在WIN下也可以试着禁用硬盘,是有几个原因的。其中一个重要原因是我想试验一下DOS下禁用硬盘后取消盘符交错现象后对WinME启动路径设置的影响等等。我马上试试您说的map方法,谢谢!

[此贴子已经被作者于2004-1-28 14:21:49编辑过]



作者: i659     时间: 2004-1-28 00:00
或许是程序的问题,在dos下我用的是  grub for dos 0.1.4  (下载地址  

http://newdos.yginfo.net/dosware/grub/grub014.zip )
版本就出现上面的贴子中出现的问题,找不到kernel
刚换了一下最新的测试版 grub_t14.exe
( ftp://211.100.7.71/incoming/grub_t14.exe   )
就解决问题了,但还是出现在用ntloader 中出现的提示:
Autodetect number-of-heads failed.  Use default value 2
Autodetect sectors-per-track failed.  Use default value 36     

跟在windows xp中一样,后面步骤能够继续
作者: Wengier     时间: 2004-1-28 00:00
不点:刚才我已试了,证明使用GRUB for DOS的map方法对于DOS和Windows ME都是有效的。用map命令禁用第二个硬盘后,DOS及WinME都是看不到已被禁用的硬盘的。由此可见,Win9x/ME跳过BIOS存取磁盘是有一定限度的,可能仅仅是对磁盘镜像虚拟等情况下会造成问题?而且,上面都是针对WIN的“32位保护模式磁盘存取”打开时的情况而言的,更不用说关闭“32位保护模式磁盘存取”时的情况了。不过,我通过使用GRUB的map命令禁用硬盘,已成功解决了我在双硬盘时盘符交错导致WinME无法正常启动的问题,而不再需要在BIOS中设置了。可以说这回GRUB for DOS/NTLDR是真正解决了我最近遇到的一个实际问题,所以非常感谢您的大作,希望它越来越强大实用!

[此贴子已经被作者于2004-1-28 14:56:28编辑过]



作者: 不点     时间: 2004-1-28 00:00
呵呵,真是不错!我也是很高兴!看来好人有好报,您为 GRUB for DOS/NTLDR 所做的许许多多,本来就应当有所回报的。

您的测试成功,说明 GRUB for DOS 的程序代码是够健壮的了。这更增强了我的信心。衷心感谢您!

关于“32位保护模式磁盘存取”的情况,还需要我们进一步研究。在 0.2.0 之后不打算开发了,但是我们可以充分测试 0.2.0 在 windows 下的各种表现,看看究竟有什么新情况出现。


作者: 不点     时间: 2004-1-28 00:00


  Quote:
以下是引用i659在2004-1-28 12:22:26的发言:
我用  blocklist 看了一下:
blocklist (hd0,6)/boot.flp
(hd0,6)13700944+5760

显示这样,应该没有碎片吧(我不是太清楚的说,对这方面我不是太懂的说)

是的,这是个连续的文件,所有 5760 个扇区连成一块,没有碎片。

5760 × 512 = 2880 × 1024

就是说,它是一个 2.88M 的连续文件。

这个文件可以用 grub_t14/t15 来仿真 2.88M 的软盘。


作者: 不点     时间: 2004-1-28 00:00


  Quote:
以下是引用i659在2004-1-28 13:47:31的发言:
或许是程序的问题,在dos下我用的是  grub for dos 0.1.4  (下载地址  

http://newdos.yginfo.net/dosware/grub/grub014.zip )
版本就出现上面的贴子中出现的问题,找不到kernel
刚换了一下最新的测试版 grub_t14.exe 
( ftp://211.100.7.71/incoming/grub_t14.exe  &nbsp
 就解决问题了,但还是出现在用ntloader 中出现的提示:
Autodetect number-of-heads failed.  Use default value 2
Autodetect sectors-per-track failed.  Use default value 36     

跟在windows xp中一样,后面步骤能够继续

grub_t14/15.exe 和 grub_for_ntldr-test??? 的有关磁盘仿真的内核都是最新的。因此它们的效果是一样的。


Autodetect number-of-heads failed.  Use default value 2
Autodetect sectors-per-track failed.  Use default value 36     

这两条信息不是错误。当软盘第一扇区没有 DOS  的 BPB 结构时,就会出现这条消息。因为自动探测 DOS 的BPB 结构失败,所以 用默认的 2 面【也就是两个磁头】、每个磁道 36 扇区来仿真。对于 2.88M 的磁盘来说,这是正确的。

您可以继续了,就软盘仿真而言,没有什么危险的。


作者: windrv     时间: 2004-1-30 00:00
Hi TinyBit,

Your previous message says:

******
GRUB for DOS 0.1.x 对 2.88M 的软盘一般是不支持的。GRUB for DOS 0.2.0 对任意尺寸的软盘映象都支持了,还支持任意尺寸的硬盘映象的仿真。现在虽然还没有发布 GRUB for DOS 0.2.0 的正式版,但现在的测试版几乎就等于正式版了。
******

in which: 还支持任意尺寸的硬盘映象的仿真

I want to know:

1. What are the exact commands for doing that? Could you give some examples?

2. After issuing such commands and booting the harddisk image file into real DOS mode, is there any way or real DOS mode programme [included in Grub For DOS?] that we can use to unmap/hide/delete such mapping? Could we use DOS Subst command?

Thanks a lot!
作者: 不点     时间: 2004-1-30 00:00
回 windrv 兄:

1. What are the exact commands for doing that? Could you give some examples?

例子1:用某个 img 文件仿真 0x80 号的 BIOS 硬盘【要求 img 文件在磁盘上没有碎块】:
map (hd0,0)/hd.img (hd0)

例子2:用 DOS 分区(hd0,4)+1 仿真 BIOS 的 0x80 号硬盘:
map (hd0,4)+1 (hd0)

关于硬盘仿真,有安全问题,需要注意,尽量不要在仿真硬盘的情况下启动windows。在以下网页的尾部有详细说明:
http://www.linuxeden.com/edu/doctext.php?docid=3006

2. After issuing such commands and booting the harddisk image file into real DOS mode, is there any way or real DOS mode programme [included in Grub For DOS?] that we can use to unmap/hide/delete such mapping? Could we use DOS Subst command?

仿真一个磁盘,进入某个操作系统之后,这时候不应当撤掉仿真,否则操作系统会混乱。因为操作系统已经认可了已经实施的仿真,假如突然撤掉这个仿真,则系统将找不到所需要的文件。例如,当 C: 盘是仿真的,里面有 command.com 文件,这时,如果撤掉仿真,则系统将无法找到 command.com 文件。这仅仅是举例,其实撤掉仿真之后还有更复杂的情况会发生,按照扇区读写的程序将会带来灾难,破坏掉真实硬盘上的资料。所以,GRUB 不提供撤掉仿真的 DOS 命令或者类似的方法。

但是,如果在 DOS 下再次运行 GRUB.exe 命令,则以前的仿真即被完全撤销。如果不再次使用 map 命令,将不会有任何仿真继续起作用了。这是安全的,因为运行 GRUB.exe 之后,就意味着原来的 DOS 环境不复存在了。




作者: windrv     时间: 2004-1-30 00:00


  Quote:
以下是引用不点在2004-1-30 13:27:03的发言:
回 windrv 兄:

1. What are the exact commands for doing that? Could you give some examples?

例子1:用某个 img 文件仿真 0x80 号的 BIOS 硬盘【要求 img 文件在磁盘上没有碎块】:
map (hd0,0)/hd.img (hd0)

例子2:用 DOS 分区(hd0,4)+1 仿真 BIOS 的 0x80 号硬盘:
map (hd0,4)+1 (hd0)

关于硬盘仿真,有安全问题,需要注意,尽量不要在仿真硬盘的情况下启动windows。在以下网页的尾部有详细说明:
http://www.linuxeden.com/edu/doctext.php?docid=3006

2. After issuing such commands and booting the harddisk image file into real DOS mode, is there any way or real DOS mode programme [included in Grub For DOS?] that we can use to unmap/hide/delete such mapping? Could we use DOS Subst command?

仿真一个磁盘,进入某个操作系统之后,这时候不应当撤掉仿真,否则操作系统会混乱。因为操作系统已经认可了已经实施的仿真,假如突然撤掉这个仿真,则系统将找不到所需要的文件。例如,当 C: 盘是仿真的,里面有 command.com 文件,这时,如果撤掉仿真,则系统将无法找到 command.com 文件。这仅仅是举例,其实撤掉仿真之后还有更复杂的情况会发生,按照扇区读写的程序将会带来灾难,破坏掉真实硬盘上的资料。所以,GRUB 不提供撤掉仿真的 DOS 命令或者类似的方法。

但是,如果在 DOS 下再次运行 GRUB.exe 命令,则以前的仿真即被完全撤销。如果不再次使用 map 命令,将不会有任何仿真继续起作用了。这是安全的,因为运行 GRUB.exe 之后,就意味着原来的 DOS 环境不复存在了。




Dear TinyBit,

Thank you very much!

I however wish you could clarify what would happen if I do the following:

1. I have one hard disk with only one FAT32 partition.
2. I boot Grub for DOS and map (hd0,0)/hd.img (hd0)
3. and boot hd.img with DOS system

Does hd.img appear as C: after booting into real DOS mode?
and
Does the only partition in the hard disk appear as D:?

So if could I issue DOS Subst command as:

Subst C: D:\

and I could use DOS normally and have the partition appear as both C: & D:?

作者: 不点     时间: 2004-1-30 00:00
windrv兄:

谢谢您提的问题。您的问题很有启发性。

1. I have one hard disk with only one FAT32 partition.
2. I boot Grub for DOS and map (hd0,0)/hd.img (hd0)
3. and boot hd.img with DOS system

Does hd.img appear as C: after booting into real DOS mode?

是的,由于 hd.img 成为第一个 BIOS 硬盘,所以,它里面的某个分区将成为 C: 盘。注意它里面可以有多个逻辑分区的,那些逻辑分区,如果存在的话,将成为 D:, E: 等等。

Does the only partition in the hard disk appear as D:?

不。GRUB for DOS 不增加系统中磁盘的个数。GRUB for DOS 仅仅把 (hd0) 的读写,重新定向到 (hd0,0)/hd.img 文件。如果系统中没有另外一个硬盘 (hd1),那么 GRUB for DOS 也不会增加上一个硬盘 (hd1) 的。但是,如果系统中存在一个真实的 (hd1),则您可以同时用这样两条命令:

map (hd0,0)/hd.img (hd0)
map (hd0) (hd1)

来定义您的磁盘 map。这样,BIOS 访问 0x80 硬盘的时候,就去找 hd.img ,而访问 0x81 硬盘的时候,就去找 真实的 0x80 号硬盘。如此一来,真实的 0x80 号硬盘上的那个分区,就会被访问到的,也即,会成为 D: 盘。而真实的 0x81 号磁盘,将不可访问了,也就是,它将被隐藏了。

正如以前和 wengier 讨论的那样,我们的 GRUB for DOS 不增加磁盘总数,也不减少磁盘总数。要想增减磁盘总数的话,必须同时修改 BIOS 数据区中的硬盘和软盘个数字节;这一点,我们没有实现【也不打算实现,不过,如果有很多人要求实现的话,我可以考虑加入这一功能】。

假如有了真实的 (hd1) 硬盘,要达到 C: == D: 的目的,不需要 DOS 的 subst 命令。我们可以这样做:

map (hd0) (hd1)

这条命令使得对 0x81 的读写,转向对 0x80 进行读写。所以,磁盘 D: 将和磁盘 C: 完全一样。而真实的 0x81 号硬盘将不可访问了。

作为对比,以下命令将交换 0x80 和 0x81 :

map (hd0) (hd1)
map (hd1) (hd0)

两个硬盘都可以访问,不过真实的 C:成了虚拟的 D:,而真实的 D:成了虚拟的 C:了。
----------------

以上都假定只运行 DOS,不运行 windows。

作者: windrv     时间: 2004-1-30 00:00


  Quote:
以下是引用不点在2004-1-30 16:15:55的发言:
windrv兄:

谢谢您提的问题。您的问题很有启发性。

1. I have one hard disk with only one FAT32 partition.
2. I boot Grub for DOS and map (hd0,0)/hd.img (hd0)
3. and boot hd.img with DOS system

Does hd.img appear as C: after booting into real DOS mode?

是的,由于 hd.img 成为第一个 BIOS 硬盘,所以,它里面的某个分区将成为 C: 盘。注意它里面可以有多个逻辑分区的,那些逻辑分区,如果存在的话,将成为 D:, E: 等等。

Does the only partition in the hard disk appear as D:?

不。GRUB for DOS 不增加系统中磁盘的个数。GRUB for DOS 仅仅把 (hd0) 的读写,重新定向到 (hd0,0)/hd.img 文件。如果系统中没有另外一个硬盘 (hd1),那么 GRUB for DOS 也不会增加上一个硬盘 (hd1) 的。但是,如果系统中存在一个真实的 (hd1),则您可以同时用这样两条命令:

map (hd0,0)/hd.img (hd0)
map (hd0) (hd1)

来定义您的磁盘 map。这样,BIOS 访问 0x80 硬盘的时候,就去找 hd.img ,而访问 0x81 硬盘的时候,就去找 真实的 0x80 号硬盘。如此一来,真实的 0x80 号硬盘上的那个分区,就会被访问到的,也即,会成为 D: 盘。而真实的 0x81 号磁盘,将不可访问了,也就是,它将被隐藏了。

正如以前和 wengier 讨论的那样,我们的 GRUB for DOS 不增加磁盘总数,也不减少磁盘总数。要想增减磁盘总数的话,必须同时修改 BIOS 数据区中的硬盘和软盘个数字节;这一点,我们没有实现【也不打算实现,不过,如果有很多人要求实现的话,我可以考虑加入这一功能】。

假如有了真实的 (hd1) 硬盘,要达到 C: == D: 的目的,不需要 DOS 的 subst 命令。我们可以这样做:

map (hd0) (hd1)

这条命令使得对 0x81 的读写,转向对 0x80 进行读写。所以,磁盘 D: 将和磁盘 C: 完全一样。而真实的 0x81 号硬盘将不可访问了。

作为对比,以下命令将交换 0x80 和 0x81 :

map (hd0) (hd1)
map (hd1) (hd0)

两个硬盘都可以访问,不过真实的 C:成了虚拟的 D:,而真实的 D:成了虚拟的 C:了。
----------------

以上都假定只运行 DOS,不运行 windows。

Dear TinyBit,

Thank you very much for your clarification.

From your clarification, I now know that:

If I have only one hard disk with one FAT32 partition in which I place the hd.img,
after mapping the hd.img and booting it up, my hd0 will disappear and the hd.img
within will become C:. Is that correct?

What I actually want is to explore whether and how your Grub For DOS can be used
together with our WINDRV to enable users to deploy different bootable img files on
a FAT32 hard disk so that they can start up Grub For DOS and boot into these
different bootable img files so that they can select different versions of Win95, Win98
or WinMe of different sizes and different configurations and run these graphical OSes
safely.

Let me explain a little bit how WINDRV takes Win95/98/ME to run on ramdisk.

Suppose we have one hard disk with one partition.

After booting in DOS from this single harddisk-partition C:, we run a loader, WDDOS,
which loads up a real-mode ramdisk driver and copy an img file onto the ramdisk D:.
Let's call this img file rd.img.

WDDOS then maps the harddisk-partition C: as D: and the ramdisk D: as C:

WIN.COM is then run and the system runs into protected mode Win95/98/ME.

With your Grub For DOS, we may perhaps do something like that:

1. Turn the bootable harddisk-partition into a hd.img
2. The hd.img contains boot-sector code, io.sys, command.com, msdos.sys,
config.sys, himem.sys, ifshlp.sys and our WINDRV product files as well as the
rd.img
3. Reformat a brandnew single hard-disk partition into FAT32 and install
Grub For DOS
4. Boot up hd.img as C: and run WINDRV
5. WINDRV loads rd.img in hd.img as ramdisk D:
6. WINDRV swaps C: with D:
7. we issue "Subst D: C:\" to hide the hd.img
8. After issuing WIN.COM, we enter into Windows protected mode
9. I guess Windows 95/98/ME will then recognize the original hd0 as E:
and access it using 32bit protected mode driver. And hd.img will re-appear
on E: as a file.

So we can have a 95.img, mini95.img, 98.img, mini98.img, ME.img, miniME.img
or as many as we could on the hd0.

On start up Grub For DOS, we can let people select which OS of the size and
configuration they want to boot up.

We can back up these img files and this prevent virus attack.

By the way, for computer that can boot up USB hard disk, the only USB hard disk
can be removed also. So only ramdisk Windows is run on a standalone diskless
computer.

How do you think?

Is this workable?
作者: 不点     时间: 2004-1-30 00:00
回复 windrv 兄:

From your clarification, I now know that:

If I have only one hard disk with one FAT32 partition in which I place the hd.img,
after mapping the hd.img and booting it up, my hd0 will disappear and the hd.img
within will become C:. Is that correct?

是的。而且,这个事实与“只有一个分区”无关。您可以有不只一个的分区,只要硬盘只有一块就行。更有甚者,这其实与硬盘的个数也没有关系。单个的命令 “map (....)/somewhere/some_img_file (hd0)” 总是隐藏真实的硬盘 0x80,而把  (....)/somewhere/some_img_file 当作虚拟的硬盘 0x80。

What I actually want is to explore whether and how your Grub For DOS can be used
together with our WINDRV to enable users to deploy different bootable img files on
a FAT32 hard disk so that they can start up Grub For DOS and boot into these
different bootable img files so that they can select different versions of Win95, Win98
or WinMe of different sizes and different configurations and run these graphical OSes
safely.

Let me explain a little bit how WINDRV takes Win95/98/ME to run on ramdisk.

Suppose we have one hard disk with one partition.

After booting in DOS from this single harddisk-partition C:, we run a loader, WDDOS,
which loads up a real-mode ramdisk driver and copy an img file onto the ramdisk D:.
Let's call this img file rd.img.

WDDOS then maps the harddisk-partition C: as D: and the ramdisk D: as C:

WIN.COM is then run and the system runs into protected mode Win95/98/ME.

With your Grub For DOS, we may perhaps do something like that:

1. Turn the bootable harddisk-partition into a hd.img
更正一个说法。应当是 Turn the bootable harddisk into a hd.img。文件 hd.img 应当包括 MBR,也就是主引导扇区,否则不能用来仿真一个硬盘,只能用来仿真一个软盘。

2. The hd.img contains boot-sector code, io.sys, command.com, msdos.sys,
config.sys, himem.sys, ifshlp.sys and our WINDRV product files as well as the
rd.img

如上所说,文件 hd.img 包括 MBR,以及 DOS 的 boot-sector code, io.sys,等等。

3. Reformat a brandnew single hard-disk partition into FAT32 and install Grub For DOS

4. Boot up hd.img as C: and run WINDRV
是的,这一步应当是成功的。

5. WINDRV loads rd.img in hd.img as ramdisk D:
6. WINDRV swaps C: with D:
这两个步骤是您公司独有的特技,您们自己清楚它的工作状况。

7. we issue "Subst D: C:\" to hide the hd.img
通常这个步骤也是成立的。您公司清楚它的工作情况。

8. After issuing WIN.COM, we enter into Windows protected mode
由于您只用了 hd.img 作为仿真的磁盘,而 subst 命令又隐藏了它,所以,按照常规,windows 应当是找不到它了,也就是说,windows 应当是可以启动的。

9. I guess Windows 95/98/ME will then recognize the original hd0 as E:
and access it using 32bit protected mode driver. And hd.img will re-appear
on E: as a file.
是的,如果 windows 能够启动,它通常可以找到真实硬盘的。

So we can have a 95.img, mini95.img, 98.img, mini98.img, ME.img, miniME.img
or as many as we could on the hd0.

On start up Grub For DOS, we can let people select which OS of the size and
configuration they want to boot up.

We can back up these img files and this prevent virus attack.

By the way, for computer that can boot up USB hard disk, the only USB hard disk
can be removed also. So only ramdisk Windows is run on a standalone diskless
computer.

How do you think?

Is this workable?

我没有看出有什么不合适的地方。好像是个很不错的主意。

作者: windrv     时间: 2004-1-31 00:00
Hi TinyBit,

Thank you for your prompt response and enlightnment!

We have run WIN95/98/ME successfully on a standalone notebook computer with bootable USB harddisk using WINDRV. We can also remove the USB hard disk to make the standalone notebook computer run diskless completely.

So from now on, diskless computers running sophisticated graphical OS are not limited to network computers anymore.

Thank you any way for your kind help.

作者: 不点     时间: 2004-2-1 00:00
GRUB for DOS 的测试版暂且和 GRUB for NTLDR 放在一起了。最新的测试版采用 GNU GRUB 0.94 的版本。

信息页:
http://www.linuxeden.com/download/softdetail.php?softid=1026

下载:
ftp://211.100.7.71/incoming/grub_for_ntldr-test005.tar.gz

作者: cavvie     时间: 2004-2-3 00:00
呵呵,grub for dos越来越完善了,不过请问有没有更新过的能安装在mbr中的版本(即你上回给我的stage2文件) ^_^
作者: 不点     时间: 2004-2-3 00:00
下次一起吧.

考虑到现在的测试阶段即将完成, 所以, 下一个 GRUB FOR NTLDR 的测试版本就要包括所有的那些 STAGE 文件了.

再等待几天吧.

谢谢您一直以来的跟踪支持.


作者: cavvie     时间: 2004-2-3 00:00
呵呵,帮不上什么忙,只好当潜水员了:),眼看着grub for dos越来越好还是很激动的。
作者: 不点     时间: 2004-2-7 00:00
看看 FOR NTLDR 部分是否一切正常,如果没有问题,就可以把它直接当作最终正式版了。

下载:
ftp://211.100.7.71/incoming/grub_for_dos-0.2.0pre.tar.gz


作者: cavvie     时间: 2004-2-7 00:00
终于出来了:)
作者: Wengier     时间: 2004-2-8 00:00
不点:能不能在2.0最终正式版中加入对ROM-DOS 7.10的支持呢?因为它也是个比较稳定实用的DOS,全面支持FAT32、大硬盘和长文件名,而且我们经常用到的。这儿有ROM-DOS 7.10的启动盘,以便您的测试:

http://newdos.yginfo.net/dosware/rdos71bd.zip

另外,我发现www.linuxeden.com最近好像已经进不去了。不过不知您发现没有,本论坛现在所用的这个服务器比以前要稳定多了。您是否愿意在这个服务器上建立GRUB网站(中英文均可)?如果您愿意的话,可以直接用FTP上传网页和文件让大家阅读或下载,如何?

[此贴子已经被作者于2004-2-8 2:48:22编辑过]



作者: 不点     时间: 2004-2-8 00:00
谢谢各位的支持!谢谢!本站对于 GRUB for DOS 的支持,无法用言词来形容。如果没有大家的支持,GRUB for DOS 的开发将不会有如此的顺利。谢谢 wengier 站长。

如果能够在本站建立一个 GRUB for DOS 的中文主页,我很赞成,并感到高兴。英文主页 wengier 兄已经建立过了,我觉得非常好,所以,我就不再做了【其实我是做不好】。那就麻烦 wengier 兄多多操劳了。

wengier 兄以前提到 PC-DOS,现在又提到了 ROM-DOS。它们都是不错的,支持它们应当不很困难。只可惜我目前没有时间,没有打算做。希望将来有机会再做这件事。将来要做的话,很可能是改进探测算法,支持任意的 DOS。

刚刚在 LINUX伊甸园的以下网页看到有人报告 BUG:
http://www.linuxeden.com/download/softdetail.php?softid=1026

我希望各位再看看 0.2.0pre 的 NTLDR 部分是否工作正常?因为这部分是改动过的,以前启动 GRUB 成功的,现在有可能启动失败。

还希望有人在 windows 2003 这类最新系统上测试,用 FAT32 和 NTFS 等不同格式的文件系统作为 C:盘来测试。因为到目前为止,还没有人明确说在 windows 2003 下成功启动到 GRUB。

如果发现失败的情况,请把 MBR 以及 windows NT 的 C:盘最开头的 16 扇区保存下来,放在某个我可以下载的地方。


作者: Wengier     时间: 2004-2-8 00:00
不点:我刚才将它试了一下,发现bootgrub、grub.exe等文件都基本正常,没有发现什么问题,唯独这个新的GRLDR文件本身似乎有些明显问题。在bootgrub等文件已更新的情况下,我用上次那个旧的GRLDR文件来代替这个新的GRLDR,发现就一切正常了。
作者: 不点     时间: 2004-2-8 00:00
谢谢 wengier。

是个明显而愚蠢的错误,刚刚更新:

ftp://ftp.cosoft.org.cn/incoming/grub_for_ntldr-test006.tar.gz

再试试看。

作者: 不点     时间: 2004-2-8 00:00
哎哟,又遗忘了一件事情。FreeDOS kernel build 2033 也发布了,但我没有下载,不知道最新的 grub.exe 是否可以在 FreeDOS 2033 下运行。谁有时间的话,请测试一下。

作者: chenall     时间: 2004-2-8 00:00
我的系统是WINDOWS 2003 用grub_for_ntldr第一版就可功启动GRUB了
作者: chenall     时间: 2004-2-8 00:00
我现在用的是第四版,一切正常
作者: 不点     时间: 2004-2-9 00:00
谢谢 chenall 兄.

另外, 我想了解, 您的 C: 盘是 FAT32 呢? 还是 NTFS? 因为这很不同, FAT32 能启动, 不代表 NTFS 也能启动.


作者: SunSpring     时间: 2004-2-9 00:00
我用NTFS格式,XP一样可以启动成功,太好了,我装Linux不用再装什么LILO了.我已成功用grub_for_ntldr启动XteamLinu4.0
作者: SunSpring     时间: 2004-2-9 00:00
可不可以出一个中文版的,好多命令不太会用.中文提示可能会更好一点.
作者: cavvie     时间: 2004-2-10 00:00
中文估计比较困难,并且也没有什么意义:)
作者: 不点     时间: 2004-2-10 00:00
支持 i18n 国际化, 这是一个庞大的工作, 目前 GNU GRUB 没有支持.

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

同时使用 win2003 和 NTFS 系统的, 还没有人说成功启动到 GRUB 的. 只要有一个人报告成功, 我们就可以发布正式版了.


作者: SunSpring     时间: 2004-2-10 00:00
想问一下不点,可不可以将bootgrub和grldr放到任意目录中都可以从ntldr中启动.我试过现在好像不行.
作者: 不点     时间: 2004-2-10 00:00
不行的。必须放在 C: 盘根目录。

我们的 BOOTGRUB 和 GRLDR 文件,不会因为磁盘文件整理、文件移动位置而导致失效,只要它们存在,就一定管用。这是原来的 GNU GRUB 所不能做到的。【我们的 GRUB.EXE 也是如此,不受磁盘碎片整理的影响】。

GNU 原来的 GRUB,其真正的程序代码是在 stage2 文件中。只要 stage2 文件所占据的物理扇区有变化,GRUB 就不能启动了(如果 GRUB 是在 MBR 中,这将导致整个系统无法从硬盘启动)。

我们的 BOOTGRUB 和 GRLDR 文件,只要处在 C:盘根目录就行,无论怎么磁盘整理,它都不受影响,这应当说是非常理想的了。“不用任何复杂的安装,拷贝就能用”,这是我们的 GRUB for DOS 以及 GRUB for NTLDR 的巨大优越之处。

即使微软的 NTLDR 以及 BOOT.INI 等,也都必须放在 C:盘根目录。定位在 C:盘根目录,并没有任何不方便之处。NTLDR 和 BOOT.INI 在哪里,我们的 GRLDR 和 BOOTGRUB 就在哪里。



作者: chenall     时间: 2004-2-11 00:00
GRLDR必须放在启动盘的根目录下,BOOTGRUB可以放在任何地方.
作者: windrv     时间: 2004-2-11 00:00


  Quote:
以下是引用不点在2004-2-10 22:28:17的发言:
不行的。必须放在 C: 盘根目录。

我们的 BOOTGRUB 和 GRLDR 文件,不会因为磁盘文件整理、文件移动位置而导致失效,只要它们存在,就一定管用。这是原来的 GNU GRUB 所不能做到的。【我们的 GRUB.EXE 也是如此,不受磁盘碎片整理的影响】。

GNU 原来的 GRUB,其真正的程序代码是在 stage2 文件中。只要 stage2 文件所占据的物理扇区有变化,GRUB 就不能启动了(如果 GRUB 是在 MBR 中,这将导致整个系统无法从硬盘启动)。

我们的 BOOTGRUB 和 GRLDR 文件,只要处在 C:盘根目录就行,无论怎么磁盘整理,它都不受影响,这应当说是非常理想的了。“不用任何复杂的安装,拷贝就能用”,这是我们的 GRUB for DOS 以及 GRUB for NTLDR 的巨大优越之处。

即使微软的 NTLDR 以及 BOOT.INI 等,也都必须放在 C:盘根目录。定位在 C:盘根目录,并没有任何不方便之处。NTLDR 和 BOOT.INI 在哪里,我们的 GRLDR 和 BOOTGRUB 就在哪里。



Dear TinyBit,

If I use Grub for DOS to install its MBR to my bootable hard disk, does it still hold true
that fragmentation and change of location of Boot Grub & GRLDR [assuming still in the root directory] still works?

[em12][em12][em12]
作者: chenall     时间: 2004-2-11 00:00
我试过了,在WINDOWS 2003 启动盘(c盘)为NTFS 或 FAT32 格式时,用第六版都可以正常启动.只是不支持NTFS,所以C:盘的菜单配置文件没有办法使用了.只能进入到命今行.

其实GRLDR必须放在C:盘根目录下是没错的,但是BOOTGRUB可以放在C: 任何目录下.
中要在BOOT.INI中添加
C:\XXXX\BOOTGRUB="GRUB 启动"
XXXX为BOOTGRUB的路径.

不知各位有何看法.

[此贴子已经被作者于2004-2-11 19:31:38编辑过]



作者: cavvie     时间: 2004-2-11 00:00
很简单,是windows 2003 得osloader把bootgrub装载进来的,所以bootgrub放在哪儿都可以,只要osloader能找到
作者: 不点     时间: 2004-2-11 00:00
诸位兄弟眼力不凡,在下很佩服,呵呵。

是的,bootgrub 放在哪儿都可以,甚至改成任何名字都无关紧要,只要 NTLDR 能够找到它就行。但是,也有例外:我把 BOOTGRUB 和 GRLDR 放在软盘上,在 BOOT.INI 用 A:\BOOTGRUB="......." 就不行了。好像是因为 NTLDR 找不到 A:\BOOTGRUB 文件。

-----------
回复 windrv 兄:
> If I use Grub for DOS to install its MBR to my bootable hard disk, does it still hold true that fragmentation
> and change of location of Boot Grub & GRLDR [assuming still in the root directory] still works?

当你用 GRUB for DOS 或者 GRUB for NTLDR 将 GRUB 安装到 MBR 之时,此时 MBR 上的 GRUB 就完全脱离了 GRUB for DOS 以及 GRUB for NTLDR。

MBR 上的 GRUB 实际上使用的是 (hd?,?)/boot/grub/stage2 文件,不再使用 GRUB.EXE 以及 GRLDR 了。因此,磁盘碎块整理有可能移动 stage2 文件,从而使系统引导失败。

GRUB.EXE 以及 BOOTGRUB 和 GRLDR 文件不受磁盘碎块整理的影响。无论怎么整理,它们都可以工作。前提是:对于 GRUB.EXE 来说,要能启动到 DOS 实模式;对于 BOOTGRUB 和 GRLDR 来说,要求能够启动 NTLDR。

从这一意义来说,跟其它启动方法相比,GRUB for DOS 以及 GRUB for NTLDR 是比较安全的一种启动方法。

-----------

感谢 SunSpring 兄 和 Chenall 兄对于 win xp/2003 NTFS/FAT32 启动成功的报告!我们可以放心地发布 GRUB for DOS 0.2.0 了。请朋友们再耐心一点,沉住气,再多等待一段时日,看看是否还有人报告别的 BUG。

另外 FreeDOS 2033 也能启动 GRUB.EXE,这是我自己测试的。



作者: Wengier     时间: 2004-2-12 00:00
"是的,bootgrub 放在哪儿都可以,甚至改成任何名字都无关紧要,只要 NTLDR 能够找到它就行。但是,也有例外:我把 BOOTGRUB 和 GRLDR 放在软盘上,在 BOOT.INI 用 A:\BOOTGRUB="......." 就不行了。好像是因为 NTLDR 找不到 A:\BOOTGRUB 文件。"

NTLDR是不支持“A:”这个路径的。不过,据我上次的测试,其实如果NTLDR、BOOT.INI等文件都在A盘上的话,用“C:”来代替“A:”的话,NTLDR就可以成功从A盘上启动BOOT.INI中指定的相应的Boot Sector了。

FreeDOS Kernel 2033下启动GRUB for DOS确实没有问题,我昨天也已试过。只是昨天我这儿网速很慢,所以没有报告上来,sorry.


[此贴子已经被作者于2004-2-12 0:33:26编辑过]



作者: xiaojun     时间: 2004-2-12 00:00
怪不得我引导得好好的grub(mbr里放在C下的.dat)无缘无故就失效,是defrag啊...
作者: 不点     时间: 2004-2-12 00:00
采用 stage2 作为实际程序代码的 GRUB, 其死机的理由有好多种:

1. 磁盘碎块整理, 导致 stage2 文件所占据的物理扇区移动了位置.

2. stage2 文件被删去, 然后又拷贝一个 stage2 文件进来, 一般也是不行的, 因为不能保证新的 stage2 文件正好精确的处于原来的扇区位置.

3. 当你用分区软件重新调整了分区, 例如增加或者减少了分区, 各分区的号码发生变化, 从而导致 GRUB 找不到 stage2 文件, 也会死机.

所以, 有 DOS 和 WinNT 的机器, 最方便的就是采用 GRUB.exe 或者 GRLDR 了.


作者: SunSpring     时间: 2004-2-12 00:00


  Quote:
以下是引用不点在2004-2-10 22:28:17的发言:
不行的。必须放在 C: 盘根目录。

我们的 BOOTGRUB 和 GRLDR 文件,不会因为磁盘文件整理、文件移动位置而导致失效,只要它们存在,就一定管用。这是原来的 GNU GRUB 所不能做到的。【我们的 GRUB.EXE 也是如此,不受磁盘碎片整理的影响】。

GNU 原来的 GRUB,其真正的程序代码是在 stage2 文件中。只要 stage2 文件所占据的物理扇区有变化,GRUB 就不能启动了(如果 GRUB 是在 MBR 中,这将导致整个系统无法从硬盘启动)。

我们的 BOOTGRUB 和 GRLDR 文件,只要处在 C:盘根目录就行,无论怎么磁盘整理,它都不受影响,这应当说是非常理想的了。“不用任何复杂的安装,拷贝就能用”,这是我们的 GRUB for DOS 以及 GRUB for NTLDR 的巨大优越之处。

即使微软的 NTLDR 以及 BOOT.INI 等,也都必须放在 C:盘根目录。定位在 C:盘根目录,并没有任何不方便之处。NTLDR 和 BOOT.INI 在哪里,我们的 GRLDR 和 BOOTGRUB 就在哪里。



为什么安装后的Grub从MBR引导后用得不是GRLDR而是stage2,如果是GRLDR的话是不是就不再受碎片整理的影响?
作者: 不点     时间: 2004-2-13 00:00
安装程序是 GNU GRUB 内建的功能。它只使用 boot/grub/ 目录下的那些 stage 文件。这个我们没办法改动。

由于我们的 GRUB for DOS/NTLDR 需要系统能够引导到一种状态【DOS或者NTLDR】,所以,我们的 GRUB for DOS/NTLDR 不能直接安装到 MBR。但也可以这么试验试验:

把 BOOTGRUB 的程序代码放在 MBR 中,但要保留 MBR 尾部的分区表【66个字节】,不要毁坏分区表【危险!分区表毁坏之后的严重性,不用在此多说了吧,最好事先把分区表备份到软盘。】。如此一来,我们的 GRUB for NTLDR 就可以从 MBR 而不是 NTLDR 菜单来启动了。【GRUB.EXE 无法用这种办法,因为它需要一个 DOS 操作系统】。由于我们仍然要使用 GRLDR,所以,这样做不受磁盘碎片整理的影响。

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

背景画面可以支持了,请下载测试:
ftp://211.100.7.71/incoming/grub_for_dos-0.2.0pre2.tar.gz

本次增加了对 splash image 背景画面支持。解压后,在 splash 目录下可以找到具有 splashimage 功能的程序文件。

本次主要测试 splashimage 背景画面是否工作正常。注意:应当使用 splash 目录中的文件来进行测试。

作者: Wengier     时间: 2004-2-13 00:00
我刚才将它下载测试了一下(注:均为真实机中),结果发现,无论是有splashimage支持还是无splashimage支持的GRLDR文件好像还是有些问题,具体如下:

在上次那个大硬盘中用BOOTGRUB调用GRLDR时,系统黑屏,光标在屏幕左上方闪烁并无任何反应;

在上次那个小硬盘中用BOOTGRUB调用GRLDR后可以出现菜单,但无论选哪项总是出现以下错误信息:

Selected Partition does not exist.

但如果将GRLDR更换为第一版(2004-1-23)的那个GRLDR的话,就一切正常了。

测试了一下splashimage目录中的GRLDR(小硬盘中)和GRUB.EXE,但输入splashimage命令时却出现“Unrecognized command”,不知为何?

另外,建议在splashimage目录中包含一个让大家测试用的XPM测试图片,如何?
作者: Roy     时间: 2004-2-13 00:00


  Quote:
以下是引用不点在2004-2-13 1:26:32的发言:
安装程序是 GNU GRUB 内建的功能。它只使用 boot/grub/ 目录下的那些 stage 文件。这个我们没办法改动。

由于我们的 GRUB for DOS/NTLDR 需要系统能够引导到一种状态【DOS或者NTLDR】,所以,我们的 GRUB for DOS/NTLDR 不能直接安装到 MBR。但也可以这么试验试验:

把 BOOTGRUB 的程序代码放在 MBR 中,但要保留 MBR 尾部的分区表【66个字节】,不要毁坏分区表【危险!分区表毁坏之后的严重性,不用在此多说了吧,最好事先把分区表备份到软盘。】。如此一来,我们的 GRUB for NTLDR 就可以从 MBR 而不是 NTLDR 菜单来启动了。【GRUB.EXE 无法用这种办法,因为它需要一个 DOS 操作系统】。由于我们仍然要使用 GRLDR,所以,这样做不受磁盘碎片整理的影响。

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

背景画面可以支持了,请下载测试:
ftp://211.100.7.71/incoming/grub_for_dos-0.2.0pre2.tar.gz

本次增加了对 splash image 背景画面支持。解压后,在 splash 目录下可以找到具有 splashimage 功能的程序文件。

本次主要测试 splashimage 背景画面是否工作正常。注意:应当使用 splash 目录中的文件来进行测试。

實際上可以改gnu grub 的install指令的.....可是那個部份得重寫.....
作者: windrv     时间: 2004-2-13 00:00


  Quote:
以下是引用Roy在2004-2-13 7:11:36的发言:

  Quote:
以下是引用不点在2004-2-13 1:26:32的发言:
安装程序是 GNU GRUB 内建的功能。它只使用 boot/grub/ 目录下的那些 stage 文件。这个我们没办法改动。

 由于我们的 GRUB for DOS/NTLDR 需要系统能够引导到一种状态【DOS或者NTLDR】,所以,我们的 GRUB for DOS/NTLDR 不能直接安装到 MBR。但也可以这么试验试验:

 把 BOOTGRUB 的程序代码放在 MBR 中,但要保留 MBR 尾部的分区表【66个字节】,不要毁坏分区表【危险!分区表毁坏之后的严重性,不用在此多说了吧,最好事先把分区表备份到软盘。】。如此一来,我们的 GRUB for NTLDR 就可以从 MBR 而不是 NTLDR 菜单来启动了。【GRUB.EXE 无法用这种办法,因为它需要一个 DOS 操作系统】。由于我们仍然要使用 GRLDR,所以,这样做不受磁盘碎片整理的影响。

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

 背景画面可以支持了,请下载测试:
 ftp://211.100.7.71/incoming/grub_for_dos-0.2.0pre2.tar.gz

 本次增加了对 splash image 背景画面支持。解压后,在 splash 目录下可以找到具有 splashimage 功能的程序文件。

 本次主要测试 splashimage 背景画面是否工作正常。注意:应当使用 splash 目录中的文件来进行测试。
 

實際上可以改gnu grub 的install指令的.....可是那個部份得重寫.....

Dear TinyBit & Roy,

Such modification is an essential item as it can free us from depending on the use of another intermediate agent, i.e. DOS or NTLDR, for booting up an image file containing a bootable disk image.

Could TinyBit do us a favour to give higher priority to this item?

[em12][em12][em12]
作者: 不点     时间: 2004-2-13 00:00
我本想早点结束这事,不曾想到,竟然一下子出来了好几个事情。

1。 SunSpring 兄的话引出了从 MBR 调用 GRLDR 的话题。Roy 兄说修改 GNU GRUB 的程序可以达到目的。

2。 windrv 兄甚至希望完全脱离 DOS 和 NTLDR 这类中介机构,直接从 MBR 运行我们的 GRUB 代码, 而非 stage2。

这些确实是我不曾想到的问题。诸位兄弟,我很佩服,受到启发,也很感谢您们的讨论。

3。wengier 使用 FAT16 仍然存在故障。而使用 FAT32 和 NTFS 的都通过了。

4。splash 还漏掉了一些东西,所以失效。

作者: SunSpring     时间: 2004-2-13 00:00


  Quote:
以下是引用不点在2004-2-13 1:26:32的发言:
安装程序是 GNU GRUB 内建的功能。它只使用 boot/grub/ 目录下的那些 stage 文件。这个我们没办法改动。

由于我们的 GRUB for DOS/NTLDR 需要系统能够引导到一种状态【DOS或者NTLDR】,所以,我们的 GRUB for DOS/NTLDR 不能直接安装到 MBR。但也可以这么试验试验:

把 BOOTGRUB 的程序代码放在 MBR 中,但要保留 MBR 尾部的分区表【66个字节】,不要毁坏分区表【危险!分区表毁坏之后的严重性,不用在此多说了吧,最好事先把分区表备份到软盘。】。如此一来,我们的 GRUB for NTLDR 就可以从 MBR 而不是 NTLDR 菜单来启动了。【GRUB.EXE 无法用这种办法,因为它需要一个 DOS 操作系统】。由于我们仍然要使用 GRLDR,所以,这样做不受磁盘碎片整理的影响。

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

背景画面可以支持了,请下载测试:
ftp://211.100.7.71/incoming/grub_for_dos-0.2.0pre2.tar.gz

本次增加了对 splash image 背景画面支持。解压后,在 splash 目录下可以找到具有 splashimage 功能的程序文件。

本次主要测试 splashimage 背景画面是否工作正常。注意:应当使用 splash 目录中的文件来进行测试。

如何把BOOTGRUB写到MBR?那样会不会影响NTLDR呢?如果有影响,且系统装在NTFS格式分区,那又如何用Grub启动NTFS分区上的系统呢?
作者: 不点     时间: 2004-2-14 00:00
现在还不提供把 BOOTGRUB 写入 MBR 的命令. 以后有机会再做这件事.

把 BOOTGRUB 的开头 446 字节写入 MBR 引导扇区, 但要保持 MBR 中的分区表不变. 分区表位于 MBR 扇区的末尾 66 字节. 446 + 66 = 512 , 一定要计算准确!!!! 万一毁掉分区表, 硬盘全部资料可都没了!!!!

至于说用什么工具写入, 都无关紧要, 用 debug 也可以, 用 LINUX 的 dd 命令也可以, 这个就"八仙过海,各显神通", 不再多说了. 不熟悉 debug 的人, 不会用 dd 命令的人, 不要尝试这样做.

这样安装不会影响 NTLDR 的.

在 GRUB 命令行敲入

chainloader (hd0,0)+1
rootnoverify (hd0)
boot

就启动 NT 了.

这里假定 (hd0,0) 是你的 NTFS 分区, 它是 C: 盘.





作者: 不点     时间: 2004-2-14 00:00
pre3 上载了:
ftp://211.100.7.71/incoming/grub_for_dos-0.2.0pre3.tar.gz

请全面测试这个版本.

看看 FAT16 下的 GRLDR 能否正常运行.

看看 spalsh 目录下的 spalshimage 版本的文件是否可以显示背景画面.


作者: Wengier     时间: 2004-2-14 00:00
剛才用這個新版本試了一下,發現用splashimage命令顯示那個測試XPM成功,不錯!而且GRLDR在FAT16的兩個硬盤下均啟動成功(不過據在Bochs虛擬機下的測試結果,GRLDR在FAT12下仍啟動失敗)。
作者: windrv     时间: 2004-2-14 00:00


  Quote:
以下是引用不点在2004-2-14 10:49:30的发言:
现在还不提供把 BOOTGRUB 写入 MBR 的命令. 以后有机会再做这件事.

把 BOOTGRUB 的开头 446 字节写入 MBR 引导扇区, 但要保持 MBR 中的分区表不变. 分区表位于 MBR 扇区的末尾 66 字节. 446 + 66 = 512 , 一定要计算准确!!!! 万一毁掉分区表, 硬盘全部资料可都没了!!!!

至于说用什么工具写入, 都无关紧要, 用 debug 也可以, 用 LINUX 的 dd 命令也可以, 这个就"八仙过海,各显神通", 不再多说了. 不熟悉 debug 的人, 不会用 dd 命令的人, 不要尝试这样做.

这样安装不会影响 NTLDR 的.

在 GRUB 命令行敲入

chainloader (hd0,0)+1
rootnoverify (hd0)
boot

就启动 NT 了.

这里假定 (hd0,0) 是你的 NTFS 分区, 它是 C: 盘.





Dear TinyBit,

Could you upload those 446 bytes of BootGrub here, so that I can download and have a trial?

Thank you.

[em12][em12][em12]
作者: 不点     时间: 2004-2-14 00:00
这 446 字节就是 bootgrub 的开头 446 个字节。
把 BOOTGRUB 的开头 446 字节再加上 MBR 的末尾 66 字节
组成一个 512 字节的扇区,把这个新扇区写入  MBR 中,就可以了。


作者: 不点     时间: 2004-2-14 00:00


  Quote:
以下是引用Wengier在2004-2-14 14:14:40的发言:
剛才用這個新版本試了一下,發現用splashimage命令顯示那個測試XPM成功,不錯!而且GRLDR在FAT16的兩個硬盤下均啟動成功(不過據在Bochs虛擬機下的測試結果,GRLDR在FAT12下仍啟動失敗)。

谢谢。那么问题就只剩下 FAT12 了。请最好在真实机下测试,如果失败,请提供 MBR 和分区开头 16 个扇区。
另外,失败的现象也请详细描述一下。另外,当失败时,请试试 grub_for_ntldr-test003/004 是否成功。


作者: xiaojun     时间: 2004-2-15 00:00
请教不点大哥: 我C已有Boot\Grub目录,是放splash在boot下呢,还是Grub下呢,还是只用其中的哪个图片显示文件呢? 谢谢...!
作者: 不点     时间: 2004-2-15 00:00
xpm.gz 文件放在哪里无关紧要。

grub> splashimage (hd0,0)/..../..../..../myphoto.xpm.gz

也就是,只是在命令行指出路径便可。

把你 C:盘上旧的 boot/grub 目录删掉,换成 splash 目录里面的 boot/grub

splash 目录下的文件都放在 C:盘根目录。C:盘之下不要有 splash 子目录。

作者: windrv     时间: 2004-2-15 00:00


  Quote:
以下是引用不点在2004-2-14 19:13:03的发言:

  Quote:
以下是引用Wengier在2004-2-14 14:14:40的发言:
剛才用這個新版本試了一下,發現用splashimage命令顯示那個測試XPM成功,不錯!而且GRLDR在FAT16的兩個硬盤下均啟動成功(不過據在Bochs虛擬機下的測試結果,GRLDR在FAT12下仍啟動失敗)。

谢谢。那么问题就只剩下 FAT12 了。请最好在真实机下测试,如果失败,请提供 MBR 和分区开头 16 个扇区。
另外,失败的现象也请详细描述一下。另外,当失败时,请试试 grub_for_ntldr-test003/004 是否成功。


Dear TinyBit,

We have just tested using your Pre3 by putting BootGrub's first 446bytes into MBR with GRLDR in the root directory of either an active FAT16 or FAT32 primary partition.

But it fails and displays the following error message:

Error: NT Boot Partition not found, press Ctrl+Alt+Del to restart.

Could you explain the exact booting mechanism and if NT Boot Partition is required?

[em12][em12][em12]
作者: 不点     时间: 2004-2-15 00:00
to windrv 兄:

是的,目前需要有 NT 的分区存在才行。如果系统中没有 NT 的 boot 分区,那么 BOOTGRUB 就无法运行。

注意,是说一定要有 NT 的引导扇区存在,并非要求 NTLDR 一定存在。我们的 BOOTGRUB 利用了 NT 的 boot record 来引导 GRLDR 文件。假如您仅仅有 DOS/win9x 的 boot record,那是不能引导 GRLDR 文件的。

在 MBR 的四个分区表项中查找 NT 的 boot record,如果四个主分区都没有 NT 的 boot record,那么就显示您所看到的错误信息了。

将来再写一段程序,以便支持那些没有 NT 引导程序的分区。请您耐心等待着。


作者: windrv     时间: 2004-2-16 00:00


  Quote:
以下是引用不点在2004-2-15 11:17:15的发言:
to windrv 兄:

是的,目前需要有 NT 的分区存在才行。如果系统中没有 NT 的 boot 分区,那么 BOOTGRUB 就无法运行。

注意,是说一定要有 NT 的引导扇区存在,并非要求 NTLDR 一定存在。我们的 BOOTGRUB 利用了 NT 的 boot record 来引导 GRLDR 文件。假如您仅仅有 DOS/win9x 的 boot record,那是不能引导 GRLDR 文件的。

在 MBR 的四个分区表项中查找 NT 的 boot record,如果四个主分区都没有 NT 的 boot record,那么就显示您所看到的错误信息了。

将来再写一段程序,以便支持那些没有 NT 引导程序的分区。请您耐心等待着。


Dear TinyBit,

Is it possible just to use Syslinux to boot up GRLDR?

Have you tried that out?

[em12][em12][em12]
作者: 不点     时间: 2004-2-16 00:00
我没有尝试过.

根据我以前对 syslinux 的印象, 觉得 syslinux 的功能很有限. 它在一个 FAT 分区上可以工作, 但似乎在其它类型的分区上不能很好的工作. 我没有采用 syslinux 的计划. 我觉得, syslinux 的技术, 或许有些过时了.


作者: windrv     时间: 2004-2-16 00:00


  Quote:
以下是引用不点在2004-2-16 14:44:59的发言:
我没有尝试过.

根据我以前对 syslinux 的印象, 觉得 syslinux 的功能很有限. 它在一个 FAT 分区上可以工作, 但似乎在其它类型的分区上不能很好的工作. 我没有采用 syslinux 的计划. 我觉得, syslinux 的技术, 或许有些过时了.


Hi TinyBit,

What is the difference between your GRUB.EXE and GRLDR?

Could we rename GRLDR into GRLDR.EXE and run it?

[em12][em12][em12]
作者: 不点     时间: 2004-2-16 00:00
不同之处在于头部.

GRLDR 只有一个扇区的 header, 而 GRUB.EXE 有 8 个扇区的 header. 其余的部分都相同, 是 pre_stage2 文件.

GRLDR 不是一个普通的 EXE 文件, 也不能看成是一个 .com 文件. 不能通过重新命名为 .exe 而运行它.

作者: windrv     时间: 2004-2-16 00:00


  Quote:
以下是引用不点在2004-2-16 16:31:32的发言:
不同之处在于头部.

GRLDR 只有一个扇区的 header, 而 GRUB.EXE 有 8 个扇区的 header. 其余的部分都相同, 是 pre_stage2 文件.

GRLDR 不是一个普通的 EXE 文件, 也不能看成是一个 .com 文件. 不能通过重新命名为 .exe 而运行它.

Dear TinyBit,

I am sorry to put forward so many questions to you.

But I want to speak from GNU Grub's perspective.

Its aim, may be I am wrong, is to provide a bootloader that can be used independant
of another bootloader, especially [again may be I am wrong] MS's bootloader.

Your project may not have this goal. But with further development, it is possible.

For instance, your GRUB.EXE relies on DOS system and your GRLDR relies on bootsector of an active NT Boot Partition.

To speed up your GRUB.EXE and go independent of DOS, I suggest you try the way of Syslinux or BootProg by Alexei A. Frounze at http://alexfru.chat.ru/epm.html

I.e. have an MBR that boots up the Boot Sector and have the Boot Sector that loads
up GRUB.EXE

Syslinux provides the MBR for FAT12/16 for loading a com/exe file

and

BootProg provides the Boot Sector for FAT12/16 that loads up a com/exe file.

Both claims that they can be used in FAT16 HDD.

So to make your project perfect; you may wish to try:

1. make an MBR - your BootGrub already?
2. make your bootsector - for reading in either your GRUB.EXE or your GRLDR
   for FAT12/16/32/NT partition

For FAT12/16 partition, BootProg can provide you some source code to model on.

For FAT32/NT partition, it may be a bit time-consuming.

[em12][em12][em12]
作者: 不点     时间: 2004-2-16 00:00
感谢 windrv 兄一番话。由衷感谢您的关心。

But I want to speak from GNU Grub's perspective.

Its aim, may be I am wrong, is to provide a bootloader that can be used independant
of another bootloader, especially [again may be I am wrong] MS's bootloader.

GNU GRUB 的目的,似乎也不能说就是要与其它的引导器独立。我们知道 GNU GRUB 可以安装在分区的引导扇区,这使得它可以跟其它引导器进行链式互相引导。我认为不是 GNU 要跟 MS 的引导器独立,而是 MS 要跟 GNU 的引导器独立。GNU 力图支持 MS 的操作系统(map 命令就是为了支持 DOS/Windows的),而 MS 似乎从来都不支持 GNU 的程序。MS 设置许多不兼容性的障碍,让别人无法和它沟通【甚至为了淘汰以前的 DOS/Windows,它也跟它自己不兼容】。它的 bootloader,本来只想引导它自己的 DOS/Windows 的,我们却让它来为我们的 GRLDR 服务,打破它的这种不兼容性壁垒,这正是众多终端用户所关心的。

Your project may not have this goal. But with further development, it is possible.

是的,我的项目没有跟 MS 对立的意图,而是力图跟它兼容以及互操作。即使进一步做开发,也不会有意和 MS 分立,而是进一步提高兼容性。我认为,兼容性问题是当今非常突出、非常重要的问题。试想,一个只懂英语不懂汉语的人,以及一个只懂汉语不懂英语的人,他们之间的交流,将是多么的痛苦啊。今天您和我的交流,就是一种实实在在的兼容。

For instance, your GRUB.EXE relies on DOS system and your GRLDR relies on bootsector of an active NT Boot Partition.

是的,正如我以上所说,这并非对 MS 有好处,也并非对 GNU 有坏处。它有用,这就够了。西方充满着理想、正义等等高尚的东西,而中国人大多都讲实际,更多受到现实的制约,较少有人具有西方的气质。

To speed up your GRUB.EXE and go independent of DOS, I suggest you try the way of Syslinux or BootProg by Alexei A. Frounze at http://alexfru.chat.ru/epm.html

感谢您提供此线索,我会找时间研究一下的。

I.e. have an MBR that boots up the Boot Sector and have the Boot Sector that loads
up GRUB.EXE

Syslinux provides the MBR for FAT12/16 for loading a com/exe file

and

BootProg provides the Boot Sector for FAT12/16 that loads up a com/exe file.

Both claims that they can be used in FAT16 HDD.

So to make your project perfect; you may wish to try:

1. make an MBR - your BootGrub already?
2. make your bootsector - for reading in either your GRUB.EXE or your GRLDR
   for FAT12/16/32/NT partition

For FAT12/16 partition, BootProg can provide you some source code to model on.

For FAT32/NT partition, it may be a bit time-consuming.

如果目的是从 MBR 引导 GRUB 代码,我们根本不需要 SYSLINUX 和 BOOTPROG。有更简捷漂亮的方法可以达到目的。FreeDOS 的 boot loader 可以加以改造,用来引导 FAT12/16/32 上的 GRLDR 文件。我目前正在做这件事。而处于 NTFS 分区的 GRLDR,我们现在就已经可以成功引导了。我们已经花费最小的力气,达到了很可观的目的。如果您了解到:我对于 NTFS 的系统结构并无任何研究,甚至不能读取 NTFS 系统的任何文件,在这样的情况下居然可以从 MBR 找到 NTFS 分区中的 GRLDR 文件并启动它,这确实是一个偷懒的诀窍。如果不偷懒的话,要实现它,则不知道将是哪年哪月的事情了。

谢谢您一直以来的提醒、帮助、关心、建议,并希望您继续多多帮助。谢谢。

作者: Roy     时间: 2004-2-16 00:00


  Quote:
以下是引用不点在2004-2-16 19:14:39的发言:
如果目的是从 MBR 引导 GRUB 代码,我们根本不需要 SYSLINUX 和 BOOTPROG。有更简捷漂亮的方法可以达到目的。FreeDOS 的 boot loader 可以加以改造,用来引导 FAT12/16/32 上的 GRLDR 文件。我目前正在做这件事。而处于 NTFS 分区的 GRLDR,我们现在就已经可以成功引导了。我们已经花费最小的力气,达到了很可观的目的。如果您了解到:我对于 NTFS 的系统结构并无任何研究,甚至不能读取 NTFS 系统的任何文件,在这样的情况下居然可以从 MBR 找到 NTFS 分区中的 GRLDR 文件并启动它,这确实是一个偷懒的诀窍。如果不偷懒的话,要实现它,则不知道将是哪年哪月的事情了。

谢谢您一直以来的提醒、帮助、关心、建议,并希望您继续多多帮助。谢谢。

那麼會支持OS/2的HPFS嗎?(HPFS正正是NTFS的前身啊)
題外話:由始至終M$也是在偷懶.....
把OS/2的核心、檔案系統修改一點就當成自己的東西......
作者: 不点     时间: 2004-2-16 00:00
> 那麼會支持OS/2的HPFS嗎?

HPFS 我没有接触过,不知道了。

> HPFS正正是NTFS的前身啊

怪不得 LINUX 的 FDISK 命令列出的 NTFS 分区显示为 HPFS/NTFS,原来它们是一家呀!

> 題外話:由始至終M$也是在偷懶.....

大家都在偷懒。中学数理化让我学会了偷懒和捷径。

作者: Wengier     时间: 2004-2-17 00:00
OS/2所用的HPFS原来是用分区代码07,后来MS小改了一下就成了NTFS呢,其实就是HPFS的改名版或升级版罢了,WinNT和OS/2的关系也是一样的。

至于FAT12,我在虚拟机中将FAT12的软盘、硬盘都试过,GRLDR无法启动。其实FAT12很容易找到的,普通软盘都是FAT12的。注:我以前试过在软盘中用NTLDR调用bootsect.dos是可以成功的,但由于GRLDR目前不支持FAT12所以目前还无法调用它成功。
作者: 不点     时间: 2004-2-17 00:00
问题越是到最后, 越是难解决了. GRLDR 的程序代码, 似乎并无其它毛病了. 我反复查看程序代码, 没有发现有什么错误. FAT12 应当是支持的了. 不过我确实没有把 最新版的GRLDR 在软盘下测试. 我最近就准备去试试.
作者: Wengier     时间: 2004-2-17 00:00
不点:我刚才到真实机上试了一下,在一个很小的FAT12硬盘分区上,结果NTLDR+GRLDR启动成功!看来现在它已支持FAT12分区了,先前只是虚拟机的问题。
作者: windrv     时间: 2004-2-17 00:00


  Quote:
以下是引用不点在2004-2-16 19:14:39的发言:
感谢windrv兄一番话。由衷感谢您的关心。

ButIwanttospeakfromGNUGrub'sperspective.

Itsaim,maybeIamwrong,istoprovideabootloaderthatcanbeusedindependant
ofanotherbootloader,especially[againmaybeIamwrong]MS'sbootloader.

GNUGRUB的目的,似乎也不能说就是要与其它的引导器独立。我们知道GNUGRUB可以安装在分区的引导扇区,这使得它可以跟其它引导器进行链式互相引导。我认为不是GNU要跟MS的引导器独立,而是MS要跟GNU的引导器独立。GNU力图支持MS的操作系统(map命令就是为了支持DOS/Windows的),而MS似乎从来都不支持GNU的程序。MS设置许多不兼容性的障碍,让别人无法和它沟通【甚至为了淘汰以前的DOS/Windows,它也跟它自己不兼容】。它的bootloader,本来只想引导它自己的DOS/Windows的,我们却让它来为我们的GRLDR服务,打破它的这种不兼容性壁垒,这正是众多终端用户所关心的。

Yourprojectmaynothavethisgoal.Butwithfurtherdevelopment,itispossible.

是的,我的项目没有跟MS对立的意图,而是力图跟它兼容以及互操作。即使进一步做开发,也不会有意和MS分立,而是进一步提高兼容性。我认为,兼容性问题是当今非常突出、非常重要的问题。试想,一个只懂英语不懂汉语的人,以及一个只懂汉语不懂英语的人,他们之间的交流,将是多么的痛苦啊。今天您和我的交流,就是一种实实在在的兼容。

Forinstance,yourGRUB.EXEreliesonDOSsystemandyourGRLDRreliesonbootsectorofanactiveNTBootPartition.

是的,正如我以上所说,这并非对MS有好处,也并非对GNU有坏处。它有用,这就够了。西方充满着理想、正义等等高尚的东西,而中国人大多都讲实际,更多受到现实的制约,较少有人具有西方的气质。

TospeedupyourGRUB.EXEandgoindependentofDOS,IsuggestyoutrythewayofSyslinuxorBootProgbyAlexeiA.Frounzeathttp://alexfru.chat.ru/epm.html

感谢您提供此线索,我会找时间研究一下的。

I.e.haveanMBRthatbootsuptheBootSectorandhavetheBootSectorthatloads
upGRUB.EXE

SyslinuxprovidestheMBRforFAT12/16forloadingacom/exefile

and

BootProgprovidestheBootSectorforFAT12/16thatloadsupacom/exefile.

BothclaimsthattheycanbeusedinFAT16HDD.

Sotomakeyourprojectperfect;youmaywishtotry:

1.makeanMBR-yourBootGrubalready?
2.makeyourbootsector-forreadingineitheryourGRUB.EXEoryourGRLDR
forFAT12/16/32/NTpartition

ForFAT12/16partition,BootProgcanprovideyousomesourcecodetomodelon.

ForFAT32/NTpartition,itmaybeabittime-consuming.

如果目的是从MBR引导GRUB代码,我们根本不需要SYSLINUX和BOOTPROG。有更简捷漂亮的方法可以达到目的。FreeDOS的bootloader可以加以改造,用来引导FAT12/16/32上的GRLDR文件。我目前正在做这件事。而处于NTFS分区的GRLDR,我们现在就已经可以成功引导了。我们已经花费最小的力气,达到了很可观的目的。如果您了解到:我对于NTFS的系统结构并无任何研究,甚至不能读取NTFS系统的任何文件,在这样的情况下居然可以从MBR找到NTFS分区中的GRLDR文件并启动它,这确实是一个偷懒的诀窍。如果不偷懒的话,要实现它,则不知道将是哪年哪月的事情了。

谢谢您一直以来的提醒、帮助、关心、建议,并希望您继续多多帮助。谢谢。

Dear TinyBit,

Your analysis is correct. And your effort in providing a GRUB FOR DOS /NTLDR is also highly appreciated by all of us. There is no question about this.

Your project has provided a lot of convenience. My suggestion is about how you can perfect your project. This is also about convenience.

Please consider if we could just copy an MBR or MBP = Master Boot Programme =
MBR minus Partition Table minus 55AA --- to the MBR of a hard disk and together with
GRUB.EXE/GRLDR and /BOOT/GRUB files to partitions of FAT12/16/32/NTFS/ext [any other in future?] and we can bootup GRUB for starting any operating system, it would be very very convenient. Isn''t it?

[em12][em12][em12]


[此贴子已经被作者于2004-2-17 9:34:59编辑过]



作者: 不点     时间: 2004-2-17 00:00
Please consider if we could just copy an MBR or MBP = Master Boot Programme = MBR minus
Partition Table minus 55AA --- to the MBR of a hard disk and together with GRUB.EXE/GRLDR
and /BOOT/GRUB files to partitions of FAT12/16/32/NTFS/ext [any other in future?] and we
can bootup GRUB for starting any operating system, it would be very very convenient. Isn''t it?

是啊, 经过诸位兄弟的帮助和探讨, 我已经认识到了这个全新的问题的重要性了, 目前正在着手干这件事情. 没有支持 ext 等文件系统的计划, 我对 LINUX 文件系统的结构很不熟悉, 正如对 NTFS 也不熟悉一样.

我想把这事尽快做完, 干别的事情. 以较少的代价, 干较多的事情, 这是我的习惯. 对于有困难的, 就暂且搁置下来.


作者: 不点     时间: 2004-2-17 00:00


  Quote:
以下是引用Wengier在2004-2-17 9:17:54的发言:
不点:我刚才到真实机上试了一下,在一个很小的FAT12硬盘分区上,结果NTLDR+GRLDR启动成功!看来现在它已支持FAT12分区了,先前只是虚拟机的问题。

非常感谢. 我不用再去测试了.

pre3 的程序代码比较完美, 按照我们先前的目标, 完全可以作为正式版发布了.

要不要大家来个投票, 决定是否把 pre3 作为正式版?

pre3 的磁盘仿真内核经历了大约两个月而没有任何变化, 从 grub_t10 开始一直没有变化. 是非常稳定的了.

至于说我们正在做的从 MBR 引导 GRLDR 的工作, 完全不是太紧要的, 可以作为 0.2.1 来发布.

wengier 兄的意见如何?

大家都可以说说看.

作者: windrv     时间: 2004-2-17 00:00


  Quote:
以下是引用不点在2004-2-17 14:31:05的发言:

  Quote:
以下是引用Wengier在2004-2-17 9:17:54的发言:
不点:我刚才到真实机上试了一下,在一个很小的FAT12硬盘分区上,结果NTLDR+GRLDR启动成功!看来现在它已支持FAT12分区了,先前只是虚拟机的问题。

非常感谢. 我不用再去测试了.

pre3 的程序代码比较完美, 按照我们先前的目标, 完全可以作为正式版发布了.

要不要大家来个投票, 决定是否把 pre3 作为正式版?

pre3 的磁盘仿真内核经历了大约两个月而没有任何变化, 从 grub_t10 开始一直没有变化. 是非常稳定的了.

至于说我们正在做的从 MBR 引导 GRLDR 的工作, 完全不是太紧要的, 可以作为 0.2.1 来发布.

wengier 兄的意见如何?

大家都可以说说看.

Dear TinyBit,

I think naming convention is something you can decide. What is important is about substance.

[em12][em12][em12]
作者: Roy     时间: 2004-2-17 00:00


  Quote:
以下是引用不点在2004-2-17 14:31:05的发言:

  Quote:
以下是引用Wengier在2004-2-179:17:54的发言:
不点:我刚才到真实机上试了一下,在一个很小的FAT12硬盘分区上,结果NTLDR+GRLDR启动成功!看来现在它已支持FAT12分区了,先前只是虚拟机的问题。

非常感谢.我不用再去测试了.

pre3的程序代码比较完美,按照我们先前的目标,完全可以作为正式版发布了.

要不要大家来个投票,决定是否把pre3作为正式版?

pre3的磁盘仿真内核经历了大约两个月而没有任何变化,从grub_t10开始一直没有变化.是非常稳定的了.

至于说我们正在做的从MBR引导GRLDR的工作,完全不是太紧要的,可以作为0.2.1来发布.

wengier兄的意见如何?

大家都可以说说看.

怎麼這樣不能呢?
(fd0)/minix.mnx 是Minix 2.0.4的ROOT.MNX+USR.MNX
grub> map (fd0)/minix.mnx (hd1)
                              
Error 38: 鵹                  
                              
grub> map (fd0)/minix.mnx (fd1)                          
                                                         
Autodetect number-of-heads failed. Use default value 2   
                                                         
Autodetect sectors-per-track failed. Use default value 15
                                                         
grub> map --hook                                         
                                                         
grub> chainloader (fd1)+1                                
                                                         
Error 26: Disk read error                                
                                                         
grub>

[此贴子已经被作者于2004-2-17 16:18:38编辑过]



作者: 不点     时间: 2004-2-18 00:00
(fd0)/minix.mnx 是Minix 2.0.4的ROOT.MNX+USR.MNX
grub> map (fd0)/minix.mnx (hd1)
                              
Error 38: 鵹                  

谢谢 Roy 兄, 您贴出的这个出错信息, 是一个 BUG. 漏掉了信息的描述. 这个要改正.

出错信息说明: 一个软盘的映像, 不应当作为硬盘来仿真.
                              
grub> map (fd0)/minix.mnx (fd1)                          
                                                         
Autodetect number-of-heads failed. Use default value 2   
                                                         
Autodetect sectors-per-track failed. Use default value 15
                                                         
grub> map --hook                                         
                                                         
grub> chainloader (fd1)+1                                
                                                         
Error 26: Disk read error                                
                                                         
grub>

出错信息说明: 磁盘(fd1)不存在. 我们的仿真是不能增加系统中的软盘和硬盘的个数的. 如果真实系统中只有一个软盘, 你就不能用 (fd1) 作为第二个软盘. 可以试试这样:

grub> map (fd0)/minix.mnx (fd0)
grub> map --hook
grub> chainloader (fd0)+1
grub> rootnoverify (fd0)
grub> boot

或者

grub> map (fd0)/minix.mnx (fd0)
grub> chainloader (fd0)/minix.mnx
grub> rootnoverify (fd0)
grub> boot

再次感谢 Roy 兄发现了出错信息描述部分的 BUG.


作者: 不点     时间: 2004-2-18 00:00
pre4 补上了出错信息. 没有别的改动.

ftp://211.100.7.71/incoming/grub_for_dos-0.2.0pre4.tar.gz

TO wengier 兄:

这个网页能否更新一下:
http://newdos.yginfo.net/grubdos.htm

(希望把 pre4 提供给国外的朋友下载).

网页上这段话, 能否稍微改一下:
GRUB for DOS now supports different sizes of floppy disk images, such as 720KB, 1.44MB, 1.68MB, and even hard disk images! With GRUB for DOS, you can boot your system from floppy boot images without any real bootable floppy disks at all!

改成类似于:
GRUB for DOS now supports floppy disk images of any size, such as 720KB, 1.44MB, 1.68MB, 2.88MB, and even hard disk images(also with arbitrary size)! With GRUB for DOS, you can boot your system from floppy boot images without any real bootable floppy disks at all!

2.88M 是一个标准的磁盘尺寸, 应该特别提到它的.

另外 0.2.0 包含了 grub for ntldr, 以及 splashimage 支持, 这些也可以提到.

[此贴子已经被作者于2004-2-18 15:12:37编辑过]



作者: windrv     时间: 2004-2-18 00:00
Dear TinyBit,

A simple question - does GRUB.EXE / GRLDR support reading in Menu.1st
automatically?

If so, does it support running virtualization commands within Menu.1st?

[em12][em12][em12]
作者: 不点     时间: 2004-2-18 00:00
是的, 完全支持的.

GRUB.EXE 和 GRLDR 默认使用 (hd0,0)/boot/grub/menu.lst 菜单, 如果它存在的话.

也可以用命令行参数来调整所需要的 menu.lst 文件:

GRUB --config-file=(hd?,?)/somewhere/else/your_menu_lst_file

GRLDR 的第一扇区末尾有字符串 (hd0,0)/boot/grub/menu.lst, 可以用一个 hexeditor 把它改成别的文件名.

MENU.LST 文件中可以有我们的 map 命令, 这个肯定是支持的.

作者: windrv     时间: 2004-2-18 00:00


  Quote:
以下是引用不点在2004-2-18 16:10:18的发言:
是的, 完全支持的.

GRUB.EXE 和 GRLDR 默认使用 (hd0,0)/boot/grub/menu.lst 菜单, 如果它存在的话.

也可以用命令行参数来调整所需要的 menu.lst 文件:

GRUB --config-file=(hd?,?)/somewhere/else/your_menu_lst_file

GRLDR 的第一扇区末尾有字符串 (hd0,0)/boot/grub/menu.lst, 可以用一个 hexeditor 把它改成别的文件名.

MENU.LST 文件中可以有我们的 map 命令, 这个肯定是支持的.

Oh! Thanks a lot!

That is wonderful!

After your MBRs are finished, that is a very convenient tool.

We shall develop a GRUB for Windows to support your GRUB for DOS by:

1. copy the MBRs to hard disk of choice within windows
2. copy GRUB.EXE / GRLDR and /boot/grub/menu.1st to the root directory of
    FAT12/16/32/NTFS of choice under windows

Any other files?

[em12][em12][em12]
作者: 不点     时间: 2004-2-18 00:00
只有 GRLDR 需要处于根目录, 其它不必.

从 MBR 引导的将是 GRLDR 文件, 而 GRUB.EXE 将不再使用.

GRLDR 文件接管控制之后, 自动读取 (hd0,0)/boot/grub/menu.lst 文件作为菜单. 如前所述, 可以用 hexeditor 来修改这一文件的位置和名字.

MBR 可能不仅仅是一个扇区, 而是好几个扇区. 但最多不会超过 63 个扇区.

为了找到 FAT12/16/32/NT 上的 GRLDR 文件, 只有一个扇区是不行的. 所以, 硬盘开头的 4 个扇区都要用上. 以后扩展的话, 全部 63 个扇区都可能要用上.

我们并不修改 FAT12/16/32/NT 本身的 BOOTSECTOR, 我们的引导程序全部驻留在 MBR 上, 这里所说的 MBR 是指硬盘开头的全部 63 个扇区, 精确的说, 是第 0 磁道的全部扇区(也即 0 柱面, 0 磁头的全部扇区)

注: 如果硬盘的 sectors per track 不是 63, 那么 "第 0 磁道的全部扇区" 就不等于 63 了.



作者: Wengier     时间: 2004-2-19 00:00
TO wengier 兄:

这个网页能否更新一下:
http://newdos.yginfo.net/grubdos.htm


OK,刚才已将以上网页更新,再看看吧。
作者: 不点     时间: 2004-2-19 00:00
非常感谢.

我忘了提到另一个可改之处:
as a diff patch to the grub-0.93 release
改为
as a diff patch to the grub-0.94 release

不过, 这个没有太大关系, 不改也可以.

------------

噢, 还有这一句话:

Tinybit, a nice Chinese person, ported the GRUB executable program and installer to DOS. THIS IS A VERY GOOD NEWS FOR ALL DOS USERS!

去掉比较好(提到某个人的名字不很舒服). 为了网页的干净利索, 还是去掉吧.

GPL 的项目, 通常被认为是大家的, 甚至也没有国界. 通常 GPL 的项目也不会完全是一个人的事情, 而是有多人参与的. 所以, 提到某一个人, 并不太合乎时宜.

----------------

还有, 标题上的 GNU GRUB FOR DOS 似乎改成 GRUB for DOS 比较好.

1. GRUB for DOS 不是 GNU 的 project(仅仅是以 GNU GRUB 作为基础, 在这之上做的二次开发)

2. 改成 GRUB for DOS 之后, 就不至于同 GNU GRUB 混淆起来了.

3. GNU GRUB for DOS 的说法, 容易引起歧义: a. GNU (GRUB for DOS) 和 b. (GNU GRUB) for DOS, 后者的理解才比较接近于正确, 但是我们项目的名称不叫做 GNU GRUB for DOS, 而是叫做 GRUB for DOS.









[此贴子已经被作者于2004-2-19 9:04:06编辑过]



作者: Wengier     时间: 2004-2-19 00:00
OK,已再次修改了。
作者: 不点     时间: 2004-2-19 00:00
GNU GRUB for DOS ----> GRUB for DOS

另外, 不知能否在 http://denbbs.2ya.com 也允许报告 BUG 呢?

FAQ 以及其它文档, 留待以后再完善吧.






[此贴子已经被作者于2004-2-19 9:30:39编辑过]



作者: Wengier     时间: 2004-2-19 00:00
不点:这些刚才已修改了,再看看吧。
作者: 不点     时间: 2004-2-19 00:00
谢谢 wengier

-----------------------

另外, 感谢 windrv 兄提供的 BOOTPROG 的消息. 是个不错的软件.

我今天特别看了 GRUB 的入门材料, 了解到 GRUB 通过 stage1.5 是可以引导 stage2 的. 即使 stage2 被整理了碎片也没有妨碍. 而我们目前的 bootgrub (如果放在 MBR) 已经能够解决 NTFS 系统下的类似问题. 所以, 有关 MBR 的问题其实可以算是差不多了. 有鉴于此, 所以, 我们有关 MBR 的后续工作将会放缓, 慢慢做.

我们的做法和 STAGE 1.5 是类似的, 不同的地方在于:

1. stage1.5 随文件系统的不同而变化, 而我们的程序只有一个, 可以适应一切文件系统, 只要我们支持了该文件系统(最先支持的, 仅仅是微软的文件系统FAT/NTFS).
2. stage1.5 用 C 语言编写, 占用空间大. 我们用 ASM 编写, 可以做到最精简.
3. 当用分区软件对分区进行调整时, stage1.5 可能失效, 我们的程序能够适应这种调整.
4. 我们按照微软 DOS 的惯例, 将内核文件 GRLDR 放在根目录, 而不是 /boot/grub 目录.

---------------------

呵呵, GRUB 越来越像是一个操作系统了. 和真正的操作系统( 例如 DOS )不同, GRUB 不修改 BIOS 的中断向量. 真实的操作系统都要安装在某个固定的分区上, 而 GRUB 可以流动, 无固定场所, 寄生在任意一个分区里面, 四海为家.


作者: windrv     时间: 2004-2-19 00:00


  Quote:
以下是引用不点在2004-2-19 14:46:39的发言:
谢谢 wengier

-----------------------

另外, 感谢 windrv 兄提供的 BOOTPROG 的消息. 是个不错的软件.

我今天特别看了 GRUB 的入门材料, 了解到 GRUB 通过 stage1.5 是可以引导 stage2 的. 即使 stage2 被整理了碎片也没有妨碍. 而我们目前的 bootgrub (如果放在 MBR) 已经能够解决 NTFS 系统下的类似问题. 所以, 有关 MBR 的问题其实可以算是差不多了. 有鉴于此, 所以, 我们有关 MBR 的后续工作将会放缓, 慢慢做.

我们的做法和 STAGE 1.5 是类似的, 不同的地方在于:

1. stage1.5 随文件系统的不同而变化, 而我们的程序只有一个, 可以适应一切文件系统, 只要我们支持了该文件系统(最先支持的, 仅仅是微软的文件系统FAT/NTFS).
2. stage1.5 用 C 语言编写, 占用空间大. 我们用 ASM 编写, 可以做到最精简.
3. 当用分区软件对分区进行调整时, stage1.5 可能失效, 我们的程序能够适应这种调整.
4. 我们按照微软 DOS 的惯例, 将内核文件 GRLDR 放在根目录, 而不是 /boot/grub 目录.

---------------------

呵呵, GRUB 越来越像是一个操作系统了. 和真正的操作系统( 例如 DOS&nbsp不同, GRUB 不修改 BIOS 的中断向量. 真实的操作系统都要安装在某个固定的分区上, 而 GRUB 可以流动, 无固定场所, 寄生在任意一个分区里面, 四海为家.


Dear TinyBit,

Waiting for your good news!

Your idea is equivalent to: GNU GRUB's MBR (Stage 1) + an ever expanding
Stage 1.5 for all popular partition types = Stage 1+ all-purpose Stage 1.5
put into the first sectors (within 63 sectors limit) of any bootable hard disk.

Is it?

I think it should be able to load up GRLDR independently without relying on
,let's say, NT boot sector or other boot sectors. To boot up these boot sectors
should be the responsibility or task of GRLDR.

So GRLDR could then boot up any OS relying on their own boot sector residing on
their own partition or boot up bootable disk-image files using virtualization commands.

[em12][em12][em12]
作者: 不点     时间: 2004-2-20 00:00
Your idea is equivalent to: GNU GRUB's MBR (Stage 1) + an ever expanding
Stage 1.5 for all popular partition types = Stage 1+ all-purpose Stage 1.5
put into the first sectors (within 63 sectors limit) of any bootable hard disk.

Is it?

是的.

I think it should be able to load up GRLDR independently without relying on
,let's say, NT boot sector or other boot sectors. To boot up these boot sectors
should be the responsibility or task of GRLDR.

这个问题, 就看怎么理解了. 其实在使用时完全没有问题的. 对于 FAT12/16/32 这类, 我们完全使用自己的代码来启动 GRLDR, 而对于 NTFS 里面的 GRLDR, 我们借用 NT 的 bootsector 中的程序来引导 GRLDR. 我们仅仅是不想编写 NTFS 的 boot sector 才利用 NTFS 分区已经存在的 boot sector 的. (编写这样的 bootsector 程序, 将是一件比较困难的事情). 当 GRLDR 被引导起来之后, 它当然可以启动 NTFS 的 bootsector 了, 此时使用 chainloader 命令, 启动的将是通常的 NTLDR.

不要混淆了这样两件事情: BOOTGRUB 和 GRLDR:

BOOTGRUB 的目的仅仅是找到 GRLDR 并把控制交给 GRLDR. 因此, BOOTGRUB 用什么手段找到 GRLDR, 都无关紧要. 当 GRLDR 接管控制之后, GRLDR 不知道自己是处在哪个分区, 也不知道它自己是怎么引导起来的. 它只是被 BOOTGRUB 放在了内存中, 它不知道它自己在磁盘上的确切位置. GRLDR 只管运行自己的代码, 别的都不管. 因此, 它完全像通常的 GRUB 一样, 可以使用 chainloader 命令来引导任意的操作系统, 当然也可以用任意的 map 命令来仿真磁盘.

BOOTGRUB 和 GRLDR 的分工是很明确的. BOOTGRUB 只管找人, GRLDR 只管干活. 它们谁都不会重复去做对方也做的那些事情. 找人的人, 完全不知道被找的人能干什么和要干什么. 被找到的人完全胜任自己的工作, 但它不会知道它自己是怎么被找到的, 不知道是谁从哪里用什么方法把它找到的. 它就像是被人用囚车送来工场干活的一样.

So GRLDR could then boot up any OS relying on their own boot sector residing on
their own partition or boot up bootable disk-image files using virtualization commands.

当然是的. 现在的 BOOTGRUB 和 GRLDR , 从某种意义上说, 已经(部分地)达到了这个目标. 它的限制是: GRLDR 需要处于一个含有 NT BOOT SECTOR 的主分区上.

作者: xiaojun     时间: 2004-2-22 00:00
当我还原了1个有xp的启动文件镜像到Vpc里,即使没有NT分区,它同样在Boot.ini里能启动. 问问不点大哥: Splashimage命令只能用在命令行吗? 怎么放在Menu里不能启动呢?背景图片做得真不错,只可惜背景与文字都是灰色的,看着费力点,呵呵...

作者: Wengier     时间: 2004-2-22 00:00


  Quote:
以下是引用cavvie在2004-2-10 1:14:12的发言:
中文估计比较困难,并且也没有什么意义:)

其实据说蓝点Linux发行版中已给GNU GRUB加入了中文支持,而且汉化了部分命令。网上应该有相关patch程序的。
作者: 不点     时间: 2004-2-22 00:00


  Quote:
以下是引用xiaojun在2004-2-22 2:12:19的发言:
当我还原了1个有xp的启动文件镜像到Vpc里,即使没有NT分区,它同样在Boot.ini里能启动. 问问不点大哥: Splashimage命令只能用在命令行吗? 怎么放在Menu里不能启动呢?背景图片做得真不错,只可惜背景与文字都是灰色的,看着费力点,呵呵... 

没有 NTFS 是可以的,但没有 NT 的 boot record 扇区是肯定不行的。在 FAT32 的分区上,NT 安装程序已经建立了 NT 的 boot record。该 FAT32 分区的第一个扇区含有 NTLDR 字样,并非通常的 DOS/win98 引导扇区。

另外我刚刚在 VMWARE 里测试过了,spalshimage 命令在菜单中也能使用。我把它放在 timeout 命令之前,已经显示出画面了。

robin 图片仅仅是用来测试的,它并非是我制作的,而是从网上免费下载的自由图片。我不会制作图片。这个图片很小,其实我在此之前从来没有测试过它的效果。


作者: xiaojun     时间: 2004-2-22 00:00
我的菜单这样放的,还是要输命令,才能有背景哪儿是错的?)
# This is a sample menu.lst file. You should make some changes to it.
# Added items for installing GRUB [ which is on your DOS drive C: ] to MBR

color blue/cyan yellow/cyan
splashimage (hd0,0)/boot/grub/robin.xpm.gz
timeout 0
default 0

谢谢


[此贴子已经被作者于2004-2-25 21:38:38编辑过]



作者: tmpid     时间: 2004-2-28 00:00
BUG report:  grldr 自从2月1号后的版本就不能在fat16上面运行了,fat32上面没问题,难道没有一个人发现么。。。。看你们好像都用得好好的,唯独我的不行。为了证明不是因为我的rpwt,我做了一个fat32的分区,果然就没问题了。但是DOS不行了。

BTW, grldr 比 grub.exe 好用,因为机器上要是装了ATA,SCSI卡之类要加载自己的BIOS的卡,grub.exe(0.2)就会抱怨有驻留程序改了中断向量,拒绝运行。grldr没这个问题。

谢谢不点的工作。

作者: Wengier     时间: 2004-2-28 00:00
tmpid:

GRUB for NTLDR的2月13日和18的新版本(2月7日版的是不行)绝对是支持FAT16分区的,至少在我的两个硬盘(C盘均为FAT16)下可以正常使用,而且我天天都在使用它(通过它禁用另一个硬盘以启动WinME)!

不过,据我在真实机上的测试结果,当GRLDR文件本身在至少是FAT12/16分区的硬盘上是连续存储(即用blocklist命令查看没有逗号)的时候,GRLDR似乎确实无法成功启动(现象是黑屏死机)。但如果GRLDR本身存储不连续的话则启动正常。

另外,新版本的DOS本身既支持FAT16分区又支持FAT32分区。但你说你的DOS不行了,是不是你使用的DOS版本过旧??如果是的话,请升级你的DOS系统。


[此贴子已经被作者于2004-2-28 14:21:56编辑过]



作者: 不点     时间: 2004-2-28 00:00
谢谢两位。

我说说为什么 GRLDR 不能运行了。GRLDR 的第一扇区,在 2 月 1 日之前是拷贝 NTLDR 的相应内容,所以,运行良好。而 2 月 1 日之后,不再用 NTLDR 了,而是用我自己写的程序,所以,就出现了某些错误。正式发布的版本是不能拷贝别人的东东的。我再检查检查程序,看看有没有什么错误。

测试时,请用最新的 BOOTGRUB 文件(这个文件越新越好)。然后,把没有问题的 GRLDR 的版本贴出来。大家觉得是不是 2 月 1 日就是一个分界线?

FAT32 以及 NTFS 确实没有问题,因为 GRLDR 开头的那段程序只是为 FAT12/16 写的,而 FAT32 和 NTFS 不用这段程序。出错的只能是 FAT12/16。

GRUB.EXE 应当是可以运行的。如果你的不能运行,看看是不是 DOS 版本的问题。我们支持的 DOS 版本是有限的,对 MS DOS 3.3 , 4.0, 5.0, 6.0, 6.22, 7.0, 7.10, 8.0 是支持的。如果有不支持的 MS DOS 版本,请报告版本号。

GRLDR 由 NTLDR 启动,它运行在干净的环境,与 DOS 无关,所以,它不抱怨,总能运行。

作者: 不点     时间: 2004-2-28 00:00
果然发现了毛病!谢谢 wengier 关于这个 BUG 的详细描述!没有您的描述,很难找到毛病在哪里。GRUB for DOS 离不开您,wengier 兄。

在 grldrstart.S 中,有如下一段程序:

        movb    %al, %cl
        xorb     %ch, %ch     /* CX = number of sectors read */
        shlw    $9, %cx         /* CX = number of bytes read */
        addw    %cx, %bx        /* ES:BX points to new location */
        jnc     2f
        movw    %es, %ax        /* BX=0, exceeds 64K boundary, adjust ES */
        addw    $0x1000, %ax
        movw    %ax, %es
        movb    $0x80, %ah      /* adjust max number of sectors to read */
2:

改成如下这样就应当 OK 了:

        movb    %al, %cl

        /* xorb %ch, %ch */     /* CX = number of sectors read */
              注释掉该语句,是因为这个语句多余。保留该语句也不算错。注意下面有 shlw 左移 9 位的语句。

        shlw    $9, %cx         /* CX = number of bytes read */
              这一语句是关键。如果扇区数 CX= 0x80,则左移 9 位之后,CX 变成 0 了!!!!

         jz        3f
               当 CX=0 时,跳到标号 3: 去执行修正 ES 的语句。

        addw    %cx, %bx        /* ES:BX points to new location */
               如果 CX 是 0,则把它加到 BX,不可能有进位。执行下面的 JNC 就直接跳到标号 2:了。

        jnc     2f
3:
        movw    %es, %ax        /* BX=0, exceeds 64K boundary, adjust ES */
        addw    $0x1000, %ax
        movw    %ax, %es
        movb    $0x80, %ah      /* adjust max number of sectors to read */
2:

在 ftp://ftp.cosoft.org.cn/incoming/ 之下已经有太多的 GRUB 文件了,有点垃圾的感觉。所以,我有点害怕上载了。谁能提供一个别的上载空间,临时的?因为最近有很多的修改之处,所以不想为一点点修改而上载到 cosoft 的宝贵空间上。

如果没有其它上载空间,要么等待下次一并更新,要么麻烦两位老兄自己编译更新。


作者: 不点     时间: 2004-2-28 00:00
更进一步,猜想当 NTLDR 在物理位置上如下排列时,NTLDR 也会死机(微软的 NTLDR)。因为似乎 NTLDR 的程序也存在 BUG。

第一部分是连续的 x 个扇区,第二部分是连续的 y 个扇区,第三、四………部分任意。其中 x 介于 1 和 127 之间,y 大于或等于 128。

处于 FAT12、FAT16 文件系统之下才能表现出该 BUG。在 FAT32 和 NTFS 下没有问题。

作者: Wengier     时间: 2004-2-28 00:00


  Quote:
以下是引用不点在2004-2-28 19:49:44的发言:
在 ftp://ftp.cosoft.org.cn/incoming/ 之下已经有太多的 GRUB 文件了,有点垃圾的感觉。所以,我有点害怕上载了。谁能提供一个别的上载空间,临时的?因为最近有很多的修改之处,所以不想为一点点修改而上载到 cosoft 的宝贵空间上。

如果没有其它上载空间,要么等待下次一并更新,要么麻烦两位老兄自己编译更新。

不点:上传到上次我说的ipdown.com的FTP上如何,比如在里面建一个grubdos目录,然后随便上传GRUB的文件即可。
作者: 不点     时间: 2004-2-28 00:00
好的。给我一个上传口令吧。


作者: Wengier     时间: 2004-2-29 00:00
OK,上传口令已用短信发送,请注意查收。
作者: 不点     时间: 2004-2-29 00:00
已经上传。

http://www.ipdown.com/grub4dos/bootgrub
http://www.ipdown.com/grub4dos/grldr

BOOTGRUB 现在是 3 个扇区,也就是 1536 字节。如果它不好用,就改用以前的版本,OK。

BOOTGRUB 现在增加了 FAT32 的启动代码。请将 BOOTGRUB 的第二扇区和第三扇区放置到紧接硬盘 MBR 之后的扇区位置上。BOOTGRUB 的第一扇区,暂时不要放置到 MBR。可从 BOOT.INI 中调用 BOOTGRUB。或者从 grub 中 chainloader (...)/bootgrub 也可以的。

如果 BOOTGRUB 的第二扇区和第三扇区没有放置到紧接 MBR 之后的扇区位置上,那么也可以正常工作,不过依赖于系统存在有 nt boot sector。

BOOTGRUB 并没有彻底完成。目前缺少对 fat12/16 的支持。完成之后大约是 4 个扇区,2048 字节。

BOOTGRUB 的第一扇区,放置到 MBR 也是可以的。当然只能把 BOOTGRUB 的开头 446 字节放到 MBR,也就是说,MBR 尾部的 66 字节是万万不可覆盖掉的(不熟悉的朋友在此止步,不要盲干)。

----------

请测试 GRLDR 文件是否正常了。

又及,微软的 NTLDR 程序没有错误,是我看错了。不要再去试验它了。

作者: tmpid     时间: 2004-3-1 00:00
上次我说改成fat32后DOS不行了,是我忘了更新bootsect.dos。

我做的一些测试:

NTBootSector + bootgrub(2月7日版) + grldr(ipdown版2月29日, blocks连续) + FAT16 = pass
NTBootSector(改NTLDR->GRLDR) + grldr(ipdown版2月29日, blocks连续) + FAT16 = pass

NTBootSector + bootgrub(2月7日版) + grldr(ipdown版2月29日, blocks连续) + FAT32 = pass
NTBootSector(改NTLDR->GRLDR) + grldr(ipdown版2月29日, blocks连续) + FAT32 = pass

NTBootSector + bootgrub(2月7日版) + grldr(ipdown版2月29日, blocks连续) + NTFS = fail
NTBootSector(改NTLDR->GRLDR) + grldr(ipdown版2月29日, blocks连续) + NTFS = 进入grub命令行
  (预料之中)

NTBootSector + bootgrub(ipdown版2月29日)整个在文件系统 + grldr(ipdown版2月29日, blocks连续) + FAT32 = fail
  (显示NTLDR not found)
bootgrub(ipdown版2月29日) 2,3扇区-> MBR 2,3扇区 未测试

另:上次说过有些机器装了ATA raid卡之类的卡不能运行grub for dos 0.2版。0.1版没有这个问题,1.44M软盘只读仿真也正常。建议不点在grub for dos 0.2版遇到BIOS中断向量表有不确定的地方的时候,如果可以的话,保留0.1版最基本的boot功能,或者进一步保留0.1版的标准软盘只读仿真功能,而不是简单地退出grub。这样设计可能更周全一些。因为0.2版至少给人的感觉是0.1版的增强。如果原来0.1版用得还好,换上0.2版后压根儿就拒绝工作,连基本的boot功能都不让用了,这样不利于0.2版的推广。

作者: 不点     时间: 2004-3-1 00:00
非常感谢 tmpid 兄的大力协助!

根据您的测试,我觉得新的 GRLDR 是比较正常的了。而在你发这个帖子之前,BOOTGRUB 是有错误的,今天早晨(3月1日) 9:00 刚刚更新了 BOOTGRUB 文件,也就是纠正了一个错误。但它究竟能否启动 GRLDR,我确实也没有测试过。更新后的 BOOTGRUB 文件的下载地址仍然是 http://www.ipdown.com/grub4dos/bootgrub

另外源程序下载:

http://www.ipdown.com/grub4dos/bootgrub.S
http://www.ipdown.com/grub4dos/grldrstart.S

有兴趣的朋友可以下载研究,帮助改进。


> 上次说过有些机器装了ATA raid卡之类的卡不能运行grub for dos 0.2版。0.1版没有这个问题,
> 1.44M软盘只读仿真也正常。建议不点在grub for dos 0.2版遇到 BIOS中断向量表有不确定的
> 地方的时候,如果可以的话,保留0.1版最基本的boot功能,或者进一步保留0.1版的标准软盘
> 只读仿真功能,而不是简单地退出grub。这样设计可能更周全一些。因为0.2版至少给人的感觉
> 是0.1版的增强。如果原来0.1版用得还好,换上0.2版后压根儿就拒绝工作,连基本的boot功能
> 都不让用了,这样不利于0.2版的推广。

您这里说的 0.2 不能运行的情况,我感到本来是不应当发生的。0.1都运行了,0.2却不能运行,这肯定是个 BUG 了。不过如果没有更进一步的详情,也难以定位这个 bug。您能否提供您的 DOS 内存映象?也就是把 DOS 所管辖的 1M 内存截获,发到一个可以让我下载的地方。

作者: 不点     时间: 2004-3-2 00:00
3月2日凌晨4点(北京时间)更新:

BOOTGRUB 和 BOOTGRUB.S 文件刚刚更新。下载地址不变:

http://www.ipdown.com/grub4dos/bootgrub
http://www.ipdown.com/grub4dos/bootgrub.S

以下两个文件没有变化,仍然是 2 月 29 日的版本。

http://www.ipdown.com/grub4dos/grldr
http://www.ipdown.com/grub4dos/grldrstart.S

更新后的 BOOTGRUB 确信可以运行了。原来是犯了一个隐蔽的错误:

mov ah,8
int 13

这个调用的输出结果存放在 CX 和 DX 中,结果把我们的 BIOS 磁盘号码 DL 给覆盖掉了。像这类错误经常发生,而又经常难以避免。已经修改成这样:

mov ah,8
push dx
int 13
pop dx

这样就好了。
作者: windrv     时间: 2004-3-2 00:00


  Quote:
以下是引用不点在2004-3-2 4:31:55的发言:
3月2日凌晨4点(北京时间)更新:

BOOTGRUB和BOOTGRUB.S文件刚刚更新。下载地址不变:

http://www.ipdown.com/grub4dos/bootgrub
http://www.ipdown.com/grub4dos/bootgrub.S

以下两个文件没有变化,仍然是2月29日的版本。

http://www.ipdown.com/grub4dos/grldr
http://www.ipdown.com/grub4dos/grldrstart.S

更新后的BOOTGRUB确信可以运行了。原来是犯了一个隐蔽的错误:

movah,8
int13

这个调用的输出结果存放在CX和DX中,结果把我们的BIOS磁盘号码DL给覆盖掉了。像这类错误经常发生,而又经常难以避免。已经修改成这样:

movah,8
pushdx
int13
popdx

这样就好了。

Dear TinyBit,

Does the new BootGrub support FAT12/16 partition?

If not, when will it be ready?

[em12][em12][em12]


[此贴子已经被作者于2004-3-2 9:04:13编辑过]



作者: 不点     时间: 2004-3-2 00:00
还不支持 FAT12/16.

FREEDOS 的 BOOT 代码, FAT12/16 比 FAT32 还难以看懂. 由于身体问题, 我无法抽出专门时间来做.

===========

BOOTGRUB 又有更新了. 上午 9 点 27 分.



作者: windrv     时间: 2004-3-2 00:00


  Quote:
以下是引用不点在2004-3-2 9:31:17的发言:
还不支持 FAT12/16.

FREEDOS 的 BOOT 代码, FAT12/16 比 FAT32 还难以看懂. 由于身体问题, 我无法抽出专门时间来做.

===========

BOOTGRUB 又有更新了. 上午 9 点 27 分.



Dear TinyBit,

Health is of No. 1 importance. Take care of your health first!

[em12][em12][em12]
作者: 不点     时间: 2004-3-2 00:00
在没有做出 FAT12、FAT16之前,大家可以先试试 FAT32 是否工作。这终究得测试。

现在,当 C:盘是 FAT32 的时候,不再使用 NT boot sector 了。这当然有个前提,就是 BOOTGRUB 从第二扇区开始拷贝到紧接 MBR 之后的扇区。如果没有拷贝到位,仍然要使用 NT boot sector。


作者: windrv     时间: 2004-3-3 00:00


  Quote:
以下是引用不点在2004-3-2 13:01:29的发言:
在没有做出 FAT12、FAT16之前,大家可以先试试 FAT32 是否工作。这终究得测试。

现在,当 C:盘是 FAT32 的时候,不再使用 NT boot sector 了。这当然有个前提,就是 BOOTGRUB 从第二扇区开始拷贝到紧接 MBR 之后的扇区。如果没有拷贝到位,仍然要使用 NT boot sector。


Dear TinyBit,

At present, is it possible to install GRLDR and other GRUB files onto
a FreeDOS floppy using FreeDOS's floppy boot sector to load GRLDR?

[em12][em12][em12]
作者: 不点     时间: 2004-3-3 00:00
GRLDR 的主要意义,在于它可以从硬盘 MBR 调用。如果在软盘上,最好使用 GRUB.EXE,或者使用 stage2 文件。

当 GRLDR 的 FAT12、16引导扇区制作出来之后,就可以从软盘 boot sector 启动 GRLDR 了。FREEDOS 的 KERNEL 定位于 0000:0600,而 GRLDR 定位于 2000:0000,所以不能通过简单更改 KERNEL.SYS 为 GRLDR 而启动 GRLDR。

我们只需要一个用于引导 GRLDR 的 FAT12、16 引导扇区,和 GRLDR 文件本身(它必须处于根目录),其它一概不需要了。
作者: 不点     时间: 2004-3-5 00:00
BOOTGRUB 的开发已经完成了。现在进入测试阶段。看看有什么毛病。

BOOTGRUB 由四个扇区构成。

第一扇区:用于 MBR,或者用于从 NTLDR 链式引导 GRLDR,或者从 GRUB 命令行用

chainloader (...)/bootgrub
rootnoverify (hd0)

来链式引导 GRLDR。

当第一扇区放置在 MBR 时,当然只能把第一扇区开头的 446 字节拷贝到 MBR 的开头,而 MBR 尾部的 66 字节不要改动(千万不要改动!)。

第二扇区:该扇区以及以后的第三、第四扇区只有放置在紧接 MBR 之后才起作用。第二扇区是 MBR 的辅助程序,第三扇区是 FAT32 的引导扇区,第四扇区是 FAT12/16 的引导扇区。

【顺便说,当编译时,如果注释掉 #define BOOTGRUB 一行,则生成的第三扇区和第四扇区是用来启动 FreeDOS 的。】

第四扇区还有一种用途:把第四扇区拷贝到软盘第一扇区,可以从软盘启动 GRLDR。这里要说明,软盘原有扇区的以下字段不要改动,应当保持软盘上原来的数据:从偏移 0x02 到 0x3d 这 60 个字节不要改动,这个区域的数据应当采用软盘上相应区域的值。只有 FAT 格式的软盘才有效,ext2 等其它格式无效。GRLDR 文件需要处于软盘根目录。

下载:
http://www.ipdown.com/grub4dos/bootgrub           这是 2048 字节的二进制文件
http://www.ipdown.com/grub4dos/bootgrub.S         这是源程序。

作者: windrv     时间: 2004-3-5 00:00


  Quote:
以下是引用不点在2004-3-5 16:16:49的发言:
BOOTGRUB的开发已经完成了。现在进入测试阶段。看看有什么毛病。

BOOTGRUB由四个扇区构成。

第一扇区:用于MBR,或者用于从NTLDR链式引导GRLDR,或者从GRUB命令行用

chainloader(...)/bootgrub
rootnoverify(hd0)

来链式引导GRLDR。

当第一扇区放置在MBR时,当然只能把第一扇区开头的446字节拷贝到MBR的开头,而MBR尾部的66字节不要改动(千万不要改动!)。

第二扇区:该扇区以及以后的第三、第四扇区只有放置在紧接MBR之后才起作用。第二扇区是MBR的辅助程序,第三扇区是FAT32的引导扇区,第四扇区是FAT12/16的引导扇区。

【顺便说,当编译时,如果注释掉#defineBOOTGRUB一行,则生成的第三扇区和第四扇区是用来启动FreeDOS的。】

第四扇区还有一种用途:把第四扇区拷贝到软盘第一扇区,可以从软盘启动GRLDR。这里要说明,软盘原有扇区的以下字段不要改动,应当保持软盘上原来的数据:从偏移0x02到0x3d这60个字节不要改动,这个区域的数据应当采用软盘上相应区域的值。只有FAT格式的软盘才有效,ext2等其它格式无效。GRLDR文件需要处于软盘根目录。

下载:
http://www.ipdown.com/grub4dos/bootgrub这是2048字节的二进制文件
http://www.ipdown.com/grub4dos/bootgrub.S这是源程序。

Dear TinyBit,

Congratulation!

We shall join in testing it. And we now begin a freeware project
-- WINGRUB -- to support your Grub For DOS.

WINGRUB will offer the following features:

1. able to partition & format hard disk into FAT12 / 16 / 32
2. able to copy BOOTGRUB onto floppy disk / floppy disk image / hard disk /
    hard disk image of FAT12 / 16 /  32  [& possibly NTFS under Win2000 / XP]
    so that it loads up GRLDR as provided by Grub for DOS
3. copy relevant files onto FAT12 / 16 / 32 [& NTFS under Win2000 / XP]
    partitions for use
4. use our VDisk driver under Win9x / ME for loading up a VDisk for such
    operations to produce suitable bootable image file or use Filedisk for
    such operation under Win2000 / XP

All these operations are done under a Windows GUI.

We plan to offer this one to two weeks.

If possible, could Wengier put up a link and some description onto the
homepage of Grub For DOS for WINGRUB when it is ready?

[em12][em12][em12]






[此贴子已经被作者于2004-3-5 23:53:48编辑过]



作者: Wengier     时间: 2004-3-6 00:00
"If possible, could Wengier put up a link and some description onto the
homepage of Grub For DOS for WINGRUB when it is ready?"


没问题。

不过我同时也希望如果纯DOS下和WIN的DOS窗口中如果也有一个能方便完成"WinGRUB"功能的程序(能完成一些基本功能就行,最好是GUI方式的小程序,不过命令行参数方式也可以)就好了,比如能够自动将BOOTGRUB等文件复制到硬盘中或者硬盘MBR中,而不是由用户手工完成。毕竟这样更能方便地普及和推广GRUB。如果可能的话,windrv还可以把它包含到"WinGRUB"中一起发行,以实现跨平台的功能,类似于WINRAR中既包含WINRAR.EXE又包含RAR.EXE那样。
作者: windrv     时间: 2004-3-6 00:00


  Quote:
以下是引用Wengier在2004-3-6 5:02:48的发言:
"Ifpossible,couldWengierputupalinkandsomedescriptionontothe
homepageofGrubForDOSforWINGRUBwhenitisready?"


没问题。

不过我同时也希望如果纯DOS下和WIN的DOS窗口中如果也有一个能方便完成"WinGRUB"功能的程序(能完成一些基本功能就行,最好是GUI方式的小程序,不过命令行参数方式也可以)就好了,比如能够自动将BOOTGRUB等文件复制到硬盘中或者硬盘MBR中,而不是由用户手工完成。毕竟这样更能方便地普及和推广GRUB。如果可能的话,windrv还可以把它包含到"WinGRUB"中一起发行,以实现跨平台的功能,类似于WINRAR中既包含WINRAR.EXE又包含RAR.EXE那样。

Dear Wengier,

Thank you very much!

We shall try our best. First we finish WINGRUB, then we try to port it to
run under real-DOS or virtual-DOS with a GUI or on command-line.

I don''t know if TinyBit is interested in doing the latter part.
If he is, he has the right to claim that priority because Grub For DOS
is originated by him.

By the way, could TinyBit clarify the following points about copying
BOOTGRUB to floppy [:?]

1. what is Offset - 0x02  to 0x3d on a floppy all about?
2. are you referring to a formatted / & sys-ed floppy?
3. formatted / & sys-ed by MSDOS or FreeDOS?
4. what are the steps of copying the 4th sector of BOOTGRUB
    onto the floppy? Are they [:?]
a. format a floppy by MSDOS or FreeDOS
b. save Offset 0x20 to 0x3d to a file
c. copy the 4th sector of BOOTGRUB to the first sector of the floppy
d. restore the Offset file to Offset position 0x20 to 0x3d


[em12][em12][em12]


[此贴子已经被作者于2004-3-6 8:07:59编辑过]



作者: 不点     时间: 2004-3-6 00:00
谢谢 windrv 兄一直以来的关心支持!

为方便您的工作,我把一些相关的技术细节在这里说明一下。

1。BOOTGRUB 适用于引导 FAT12/16/32、NTFS 之下的 GRLDR,目前不支持其它分区格式。

2。BOOTGRUB 目前查找 GRLDR 的算法是这样的:先从 MBR 的第一个主分区开始查找,看它是不是 FAT12/16/32 分区,如果是,就假定该分区根目录含有 GRLDR 文件,并试图引导,如果该 FAT12/16/32 分区没有 GRLDR 文件,引导将会失败(显示“No GRLDR”并停机)。如果该分区不是 FAT12/16/32 分区,再看看它是不是 NTFS 分区,也就是看看它有没有微软的 NTLDR 引导扇区,如果有,就假定该 NTFS 分区根目录含有 GRLDR 文件,并试图启动。如果该分区没有微软的 NTLDR 引导扇区,则认为第一个主分区无法启动 GRLDR,失败。于是转向第二个主分区,作类似的事情。如果也失败,再尝试第三、第四个主分区。如果四个主分区都失败,显示 Missing GRLDR 信息并停机。按照目前的算法设计,我们不关心哪个主分区含有 Active 激活标志。一般情况下我们查找到的 GRLDR 分区就是 Windows 的 C: 盘,但可能不总是这样。【注意 Windows 一般是把含有激活标志的主分区作为 C: 盘。】

3。我们的引导程序具有很大的灵活性。用户可以随意调整分区的大小,甚至改动分区的类型(从FAT16改为FAT32或者NTFS,随便改!),这与我们的程序都无关,我们的 BOOTGRUB 总可以找到分区根目录下的 GRLDR 文件。

4。由于算法的通用性和透明性,使得安装 BOOTGRUB 到 MBR 的过程简单了,可以用任何软件、在任何操作系统之下进行安装。作为比较,GNU GRUB 的 stage 文件需要进入 GRUB 才能安装,其他人很难为它编写安装到 MBR 的程序,因为它的 MBR 中含有绝对磁盘定位信息,随 stage 文件物理位置的不同而变化。

5。软盘的文件系统类型如果是 FAT12/16,就用 BOOTGRUB 的第四扇区,正如前面所说,软盘 0x02 到 0x3d 这 60 个字节不要改动。如果软盘的分区类型是 FAT32,那么应当用 BOOTGRUB 的第三扇区,保留不动的软盘扇区字节范围是 0x02 到 0x59,这 88 个字节不要改动,采用软盘上原有的值。不要奇怪软盘会采用 FAT16、FAT32 这样的格式,这是可能的,如果软盘容量为几百兆或几十G,就会采用 FAT16、FAT32 这样的格式。尤其是 GRUB for DOS 可以把硬盘文件仿真为软盘,这个仿真了的软盘的容量就没有任何限制。

------------------

另外,GRUB for DOS 还需要一个能够整理单个文件碎片的工具,不知道 windrv 兄的公司能否制作这样的工具。


作者: windrv     时间: 2004-3-6 00:00
Dear TinyBit,

Thank you for your clarification.

About defragmentation, if the partition itself is scattered with other files
and have no continuous free space sufficient to host the image file, we
need to defrag the partition first. We have no plan to do a partition
defragmentation programme now.

But there are some other ways to work around the problem:

1. a. defragment the partition first
    b. find & reserve sufficient continuous free space for the image file
    c. write the image file onto it
2. under Win2000 / XP, create an empty image file and mount it up
    using filedisk, then copy all the files you need one by one into the
    image file -- you may then use our WINDRV or other utility to turn
    it into a bootable hard disk image file and copy it onto the hard disk
    with WINDRV
3. under Win9x / ME, we have a utility called FATimage to create an
    empty image file of FAT 16 / 32 partition and to help copy files into
    it continuously -- after that use our WINDRV or other utility to turn
    it into a bootable hard disk image file and copy it onto the hard disk
    with WINDRV

Please note the use of FATimage should not be done in where the M$
patents on long-file-name handling are in force if the files you copy with
FATimage have long-file-name.

We shall release details about this later.

[em12][em12][em12]

[此贴子已经被作者于2004-3-6 9:31:41编辑过]



作者: Wengier     时间: 2004-3-6 00:00
"I don''t know if TinyBit is interested in doing the latter part.
If he is, he has the right to claim that priority because Grub For DOS
is originated by him."


不知不点对这个问题的看法如何?
作者: 不点     时间: 2004-3-6 00:00
哦,windrv 兄,您也同时在线。刚才没有看到您的帖子呢。

回复 windrv 兄:

> We shall try our best. First we finish WINGRUB, then we try to port it to run under real-DOS or virtual-DOS
> with a GUI or on command-line.

好!

> I don''t know if TinyBit is interested in doing the latter part. If he is, he has the right to claim that priority
> because Grub For DOS is originated by him.

身体不好,没有能力对付很多事情了。例如,很少上论坛来,也不能答复许多技术问题。谢谢 windrv 兄,我支持您的工作;您做的工作,我就不做了。谢谢您减轻了我的负担。真的是非常感谢了!

现在我想尽早把 grub for dos 0.2.0 加以了结,以后可能就不再染指了。身体原因。

> By the way, could TinyBit clarify the following points about copying BOOTGRUB to floppy [:?]

> 1. what is Offset - 0x02  to 0x3d on a floppy all about?

0x02 ----- win98 用这个字节来表示是否需要强制使用 LBA 磁盘访问模式。当分区处于 1024 柱面以外时,win98 将把 0x0e 这个单字节数值写入 0x02 这个偏移位置。通常在这个位置处的数值是 0x90。我们的程序也用这个字节的指示来决定是否采用 LBA 磁盘模式。通常,为了兼容性,在 1.44M 的软盘上,不要放置 0x0e , 应当保持 0x90 这个值。

0x03 - 0x0A 这 8 个字节是字符串,任意值都可以。

0x0B - 0x3D 这 51 个字节是 BPB 和 extended BPB 表。记录着磁盘的重要物理参数,不可随意更改。

> 2. are you referring to a formatted / & sys-ed floppy?

是的。精确地说,是一个格式化过的,但不一定是含有系统的。我们除了需要 0x02 - 0x3D 这 60 个字节之外,别的似乎都不需要了。当然,FAT表和根目录应当存在,这是 FAT 磁盘都有的。没有根目录的话,我们就不能放置 GRLDR 文件了。无论是那个操作系统【MS-DOS,FREEDOS,LINUX 等等】,它们建立的 BPB 表都是一样的。所以,只要是格式化过的就行了,空的、没有文件的盘,也可以的【只要再拷入一个 GRLDR 文件】。

> 3. formatted / & sys-ed by MSDOS or FreeDOS?

如上,随便。自己写格式化软件也可以。PC-TOOLS 等软件都可以。

> 4. what are the steps of copying the 4th sector of BOOTGRUB onto the floppy? Are they [:?]
>
> a. format a floppy by MSDOS or FreeDOS
> b. save Offset 0x20 to 0x3d to a file
> c. copy the 4th sector of BOOTGRUB to the first sector of the floppy
> d. restore the Offset file to Offset position 0x20 to 0x3d
>

是 0x02 to 0x3d , 不是 0x20 to 0x3d。怎么做都行,只要达到目的便可。例如,

a. 格式化一张软盘,或者用任何一张现有的已经格式化了的软盘。
b. 将软盘第一扇区读入内存区域1,将 BOOTGRUB 第四扇区读入内存区域2。
c. 将 内存区域1 的 0x02 ---- 0x3d 这 60 个字节复制到 内存区域2 的 0x02 ---- 0x3d。
d. 将更改后的 内存区域2 写入软盘第一扇区。
e. 把 GRLDR 文件复制到软盘根目录。【这一步任何时候做都行,不在乎先后】。

如果软盘格式是 FAT32,当然要用 BOOTGRUB 第三扇区而不是第四扇区。相应地, 0x02 ---- 0x3d 这个 60 字节区域,应当相应地改为 0x02 ---- 0x59 这个 88 字节的区域。



作者: Wengier     时间: 2004-3-6 00:00
不点:

我发现了GRUB.EXE的一个“问题”。那就是,当CONFIG.SYS中指定SHELL=C:\GRUB.EXE(没有任何参数),或者当系统提示输入命令处理器的路径时输入GRUB.EXE,均无法正常进入GRUB界面,而是出现GRUB的用法,即出现以下信息:

Usage:
        GRUB --config-file=FILE
The options are case-sensitive, you must use lower-case letters. Example:
        GRUB --config-file=(hd0,0)/boot/grub/menu.lst

不知是何故?由于这个在有些情况下还是比较重要的,希望能解决,谢谢!
作者: 不点     时间: 2004-3-6 00:00
谢谢。当 GRUB 发现命令行有不认识的参数时,就显示用法并退出。可能 shell= 命令在 GRUB 命令行增加了额外的参数,如 /p 等等之类的。好的,希望下次可以解决这个 BUG。


作者: windrv     时间: 2004-3-6 00:00
Dear TinyBit,

Thank you for your further clarification and your grace to let us do something
for your Grub for DOS under DOS.

We shall provide such a DOS utility for copying BOOTGRUB to hard disk  /
floppy disk / image files as suggested by Wengier.

We however are unable to download your bootgrub  & bootgrub.S from
the URL provided by you at 229th floor above.

Could you provide another URL or put up on your GRUB for DOS homepage?

Please also take good care of your health!

[em12][em12][em12]

[此贴子已经被作者于2004-3-6 17:30:04编辑过]



作者: Roy     时间: 2004-3-6 00:00


  Quote:
以下是引用windrv在2004-3-6 17:27:47的发言:
Dear TinyBit,

Thank you for your further clarification and your grace to let us do something
for your Grub for DOS under DOS.

We shall provide such a DOS utility for copying BOOTGRUB to hard disk  /
floppy disk / image files as suggested by Wengier.

We however are unable to download your bootgrub  & bootgrub.S from
the URL provided by you at 229th floor above.

Could you provide another URL or put up on your GRUB for DOS homepage?

Please also take good care of your health!

[em12][em12][em12]

[此贴子已经被作者于2004-3-6 17:30:04编辑过]


OK then I provide two mirrors:
Japan mirror(faster):
http://i.cool.ne.jp/clspaste02/bootgrub
http://i.cool.ne.jp/clspaste02/bootgrub.S

China mirror(slower):
http://roy.e-stone.cn/bootgrub
http://roy.e-stone.cn/bootgrub.S
作者: windrv     时间: 2004-3-6 00:00
Thank you,  Roy!
作者: Roy     时间: 2004-3-6 00:00


  Quote:
以下是引用windrv在2004-3-6 23:04:43的发言:
Thank you,  Roy!

You're welcome! :-)
作者: Roy     时间: 2004-3-6 00:00


  Quote:
以下是引用不点在2004-3-1 17:08:18的发言:

您这里说的 0.2 不能运行的情况,我感到本来是不应当发生的。0.1都运行了,0.2却不能运行,这肯定是个 BUG 了。不过如果没有更进一步的详情,也难以定位这个 bug。您能否提供您的 DOS 内存映象?也就是把 DOS 所管辖的 1M 内存截获,发到一个可以让我下载的地方。

那麼你可以提供一下内存截获工具嗎?
作者: 不点     时间: 2004-3-7 00:00
谢谢兄弟们。身体不好,需要休息,以后很少再来了。烦兄弟们共同维护这个帖子。以前提到的所有 BUG,看来都不很严重,等到我身体好转的话,再来解决。在此之前,兄弟们可以尝试自己解决。GRUB for DOS 也需要新的 maintainer(s),不知谁有兴趣?我今后还会提供补丁(作为开发人员之一),但日常的维护实在做不了了。

tmpid 兄提到的 GRUB.exe 不能运行的 BUG,我感到很以外。我检查了 dosstart.S 文件,特别检查了从 0.1.4 到 0.2.0pre4 改动的部分,没有发现引起 BUG 的地方。如果这个问题不很普遍,暂时可以不解决。另外,既然 0.1.4 的 dosstart.S 文件能够启动 GRUB.exe 那么,可以直接尝试把 0.1.4 中的 dosstart.S 文件拿到 0.2.0.pre4 中,替换掉 0.2.0pre4 中的 dosstart.S 文件,重新编译,就可运行了。【说实在的,我不怎么相信 0.1.4 能运行而 0.2.0pre4 不能运行。当然,身体不好,不能抽出时间详细检查、核对。】

至于说内存截获,我也没有什么软件。建议用 DEBUG。

很遗憾没能正式推出 0.2.0,抱歉!


作者: windrv     时间: 2004-3-8 00:00


  Quote:
以下是引用不点在2004-3-7 9:24:34的发言:
谢谢兄弟们。身体不好,需要休息,以后很少再来了。烦兄弟们共同维护这个帖子。以前提到的所有BUG,看来都不很严重,等到我身体好转的话,再来解决。在此之前,兄弟们可以尝试自己解决。GRUBforDOS也需要新的maintainer(s),不知谁有兴趣?我今后还会提供补丁(作为开发人员之一),但日常的维护实在做不了了。

tmpid兄提到的GRUB.exe不能运行的BUG,我感到很以外。我检查了dosstart.S文件,特别检查了从0.1.4到0.2.0pre4改动的部分,没有发现引起BUG的地方。如果这个问题不很普遍,暂时可以不解决。另外,既然0.1.4的dosstart.S文件能够启动GRUB.exe那么,可以直接尝试把0.1.4中的dosstart.S文件拿到0.2.0.pre4中,替换掉0.2.0pre4中的dosstart.S文件,重新编译,就可运行了。【说实在的,我不怎么相信0.1.4能运行而0.2.0pre4不能运行。当然,身体不好,不能抽出时间详细检查、核对。】

至于说内存截获,我也没有什么软件。建议用DEBUG。

很遗憾没能正式推出0.2.0,抱歉!


Dear TinyBit,

Miss you!

Anything that we can do it for you?

Please come to here to chat if you have time! Just chatting is enough.

May be we could take over the project to look after it. But about the
technical improvements, we may not be so good as you to make
improvements so often. Anyway, your contribution has been very
significant and gives us quite a stable platform.

If you agree, we could also put GRUB for DOS project, besides Wengier''s
site, on:

sourceforge.net

and our site:

windrv.net

so that it can have a permanent site for its hosting as well.

[em12][em12][em12]


[此贴子已经被作者于2004-3-8 9:42:53编辑过]



作者: 不点     时间: 2004-3-9 00:00
谢谢 windrv 兄再次帮助!我的病是由于紧张造成的。编程序是一种很耗体力的活。以前我的身体一直不错,不过最近一年不行了,尤其现在糟糕得很。我一开始编程就进入高度的紧张状态,所以,身体受损严重。我无法放松,性格使然,无法改变。只有彻底放弃编程了。这很痛苦,但没办法。

我赞成您在 sf.net,windrv.net 或者任何别的地方开展这个项目。具体事宜由您来安排了。以后就由您来发布新的版本了。

另外,刚刚更改了 bootgrub 文件,现在它应该没有什么大的问题了。

http://www.ipdown.com/grub4dos/bootgrub
http://www.ipdown.com/grub4dos/bootgrub.S

您好像访问不了这个网站,看看 wengier 兄能否帮您。

这个上载空间很好用。谢谢 wengier 兄。

以后能来的话,我还要来,但是次数要大大降低了。补丁如果有的话,暂时还放在

http://www.ipdown.com/grub4dos/

但是不再来这里通报了。

---------------

补充:在 2 月 29 日还更改了 grldr 文件:

http://www.ipdown.com/grub4dos/grldr
http://www.ipdown.com/grub4dos/grldrstart.S

论坛上报告的其它 BUG 都没有修复,工作都还没有做。

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

再补充:正是因为我太过于急性子,才导致不能继续开发。所以,开发进度的快慢,不是关键的问题。希望您多多保重身体,不要犯我这样的错误。

任何有关 GRUB for DOS 的问题,技术的,非技术的,(如果有的话)都可以在这里放心地提问。我们要花费较少的代价,达到继续开发 Grub for dos 的目的。

-----------------

特别再次谢谢 windrv 兄拯救我身体的举动!我放心去休养了。

[此贴子已经被作者于2004-3-9 13:52:24编辑过]



作者: windrv     时间: 2004-3-9 00:00
Dear TinyBit,

Please remember -- Life the most precious thing to yourself and your family. Everybody cares about you.

I agree that you stop programming for a while and take sufficient rest. This may be a temporary phenomenon.

Very often, after taking a good vacation, people can resume work very well and work much better than before.

This magic must also work for you.

We shall try our best to work for your project.

And hope some day you can re-join us, not necessarily doing coding.

After taking a rest, you must be able to regulate very well the distribution of your time between work and leisure.

Maturity makes one patient and tolerant.

I hope someday we can meet and chat.

If you are free and feel comfortable, please come to the NewDos forum to chat and make friends.

Good luck & Good health!


[em12][em12][em12]

[此贴子已经被作者于2004-3-9 15:34:22编辑过]



作者: windrv     时间: 2004-3-9 00:00
Dear Wengier,

If you don''''t mind, please help us to consolidate a collection of the most updated work
by TinyBit on his Grub For DOS on its homepage hosted at your site and provide
a URL for others to download.

With your permission also, we would open a project page, in addition to the
homepage of Grub For DOS on your site, on sourceforge.net. Updates will be
sent to you and posted on sourceforge.net

We can still use this thread to discuss issues related to Grub For DOS and WINGRUB.


[em12][em12][em12]




[此贴子已经被作者于2004-3-9 15:33:44编辑过]



作者: ohsnoopy     时间: 2004-3-9 00:00
解压后将 BOOTGRUB 和 GRLDR 两个文件拷贝到 C: 盘根目录,修改 Boot.ini 文件即可。在 Boot.ini 文件末尾增加如下一行:

C:\BOOTGRUB="boot grub"
但是进入“grub>”输入以下命令无效,进不了linux?
1. kernel (hd0,9)/boot/vmlinuz root=/dev/hda10
2. configfile (hd0,2)/boot/grub/menu.lst 并回车,
或者是敲入 configfile (hd0,2)/boot/grub/grub.conf
help me!!!!!

作者: xiaojun     时间: 2004-3-10 00:00
Grub的功能这样强大,英汉双通,汉化高手如此之多;花时间去汉化1个Win98的普通DOS程序的朋友, 请出手,为大家汉化它的DOS命令Hlp吧...! 让更多的朋友,特别是希望进入与学习DOS,而又没装DOS+98的朋友来使用了解她吧...!


[此贴子已经被作者于2004-3-10 6:18:37编辑过]



作者: windrv     时间: 2004-3-11 00:00


  Quote:
以下是引用不点在2004-3-9 11:48:34的发言:
谢谢 windrv 兄再次帮助!我的病是由于紧张造成的。编程序是一种很耗体力的活。以前我的身体一直不错,不过最近一年不行了,尤其现在糟糕得很。我一开始编程就进入高度的紧张状态,所以,身体受损严重。我无法放松,性格使然,无法改变。只有彻底放弃编程了。这很痛苦,但没办法。

我赞成您在 sf.net,windrv.net 或者任何别的地方开展这个项目。具体事宜由您来安排了。以后就由您来发布新的版本了。

另外,刚刚更改了 bootgrub 文件,现在它应该没有什么大的问题了。

http://www.ipdown.com/grub4dos/bootgrub
http://www.ipdown.com/grub4dos/bootgrub.S

您好像访问不了这个网站,看看 wengier 兄能否帮您。

这个上载空间很好用。谢谢 wengier 兄。

以后能来的话,我还要来,但是次数要大大降低了。补丁如果有的话,暂时还放在

http://www.ipdown.com/grub4dos/

但是不再来这里通报了。

---------------

补充:在 2 月 29 日还更改了 grldr 文件:

http://www.ipdown.com/grub4dos/grldr
http://www.ipdown.com/grub4dos/grldrstart.S

论坛上报告的其它 BUG 都没有修复,工作都还没有做。

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

再补充:正是因为我太过于急性子,才导致不能继续开发。所以,开发进度的快慢,不是关键的问题。希望您多多保重身体,不要犯我这样的错误。

任何有关 GRUB for DOS 的问题,技术的,非技术的,(如果有的话)都可以在这里放心地提问。我们要花费较少的代价,达到继续开发 Grub for dos 的目的。

-----------------

特别再次谢谢 windrv 兄拯救我身体的举动!我放心去休养了。

[此贴子已经被作者于2004-3-9 13:52:24编辑过]


Dear TinyBit & Wengier,

We have opened a project on sourceforge.net on:

GRUB For DOS & WINGRUB

On this project homepage, I intend to put up some description about this
project and two icon-links:

1. One icon-link is for GRUB For DOS, pointing to the original homepage at
Wengier's site
2. Another icon-link is for WINGRUB, pointing to the homepage of WINGRUB
at our windrv.net

If you agree, you can put up update files for GRUB For DOS at
the files section of the project on sourceforge.net

If we have files for WINGRUB or updated files for GRUB For DOS, we may
also put them up onto that area.

The administrator of the project is:

bean123

I shall give a private mail to Wengier about other details.

[em12][em12][em12]
作者: windrv     时间: 2004-3-11 00:00
Dear Wengier,

Do you mind changing the following wording on the homepage of GRUB for DOS to:

(in Chinese and in English)

******
For development information about GRUB for DOS 0.2.x, please look at this page (also in Chinese).
******

And I suggest that to better promote your NewDOS forum here, we should
encourage people to discuss problems in both Chinese and English so that
it makes the forum international.

People can put up questions in English and do receive English answer as well.

GRUB for DOS is a good project for us to do it this way.

I have requested:

bean123

to do discussion here about the maintenance and updating of GRUB for DOS here.

He can both write Chinese and English very well.

I leave it to him now.

[em12][em12][em12]




[此贴子已经被作者于2004-3-11 13:03:27编辑过]



作者: 不点     时间: 2004-3-14 00:00
哦,对不起诸位,由于身体问题,匆忙之间我也许忘掉了什么,没有详细考虑一些问题。正如大家已经看到的,grub for dos 的推动力,很大程度上是在于本论坛的。在 google 上,很多人已经把 wengier 兄辛苦建立的网页作为 grub for dos 的主页了。我觉得这是我们继续发展的良好基础。这里高手云集,也是培育 GRUB for dos 的良好土壤。grub for dos 之所以生长得健康,正是由于有了这样良好的环境。我以前也多次说过,wengier 兄本人对 grub4dos的重要性。wengier 虽然还没有替grub4dos写代码,但是他的测试水平不是一般的,而是非常全面而深刻的。他的测试表明了他也是一个grub4dos的开发者。另外,有关 DOS 以及 CPU 的许多知识,我了解得并不正确,正是 wengier 兄道出了问题的缘由。例如,EMM386 的环境是保护模式,这是 wengier 兄指出的;我以前一直错误地认为是 real mode。此类例子很多,不再列举。要说明的是,我后来翻越以前我同 wengier 讨论的帖子,发现我有很多错误,但我没有再去纠正帖子中的说法,因为帖子已经很老了,没人看了。grub4dos的另一个获得推进的方面,就是良好而丰富的建议,和帮助。论坛上提意见和建议的人很多,wengier 兄的建议往往比较重要,他的建议也最多。

sf.net 是一个著名的开源推进网站。如果在 sf.net 建立 grub4dos 镜像下载,无疑会提高 grub4dos 的认知度。我很赞成 windrv 兄把主页链接指向wengier兄原始的主页上。如果 windrv 或者wengier 兄能够再建立一个中文的主页,恐怕就更好了。这个中文主页本来是我想建立的,wengier兄也已经同意的,只是由于我的身体,才迟迟没有行动。我个人觉得还是用 wengier 兄已经准备好的空间比较好。

另外,讨论 grub4dos 的专门的论坛,现在还没有。只是借用本线索。如果这样不引起混乱,倒也算可以。如果您们有精力,最好能有个专栏【然而如果帖子太少的话,也不适合开设一个专栏】。其实,我觉得,讨论中文就用中文论坛,讨论英文才用英文论坛。我就曾经在 wengier 兄建立的英文论坛上答复过 grub4dos 的问题。wengier 兄的论坛程序,真的很不错哟,呵呵。【怎么弄都行,我只是随便说说。】

没有最好,只有比较好。我的意见只代表我个人,究竟怎么做合适,由您们来决定。GPL软件本身并不限制任何人把它拿来做进一步开发。但是要把它做好,确实需要投入力量了。我相信,有了社区强有力的后盾,grub4dos 一定会健康发展下去的。

-----------------

补充一点技术设想:

以前我曾经考虑过 grub for linux 的问题。现在又想到了这个问题。如果 grub 引导管理器能够从 LINUX 下引导,无疑使得它更有吸引力。希望我有朝一日能够完成它【现在确实不行啊】。

作者: Wengier     时间: 2004-3-14 00:00
感谢各位的讨论。

关于具体方案,可以暂时就按照我们在短信中的方案实施吧。

另外,GRUB在这儿进行讨论,我觉得是非常好的,应该不会有混乱,而且我觉得这样也许比建立专门的GRUB论坛的讨论气氛更好些,可以有更多人浏览。就像许多其它知名论坛中的软件的情况那样,很少有专门的版块的。
作者: windrv     时间: 2004-3-15 00:00
Could Wengier consolidate & put up TinyBit''s development codes for GRUB for DOS
so that we could have a test of it?

And we wish to begin to do works on WINGRUB as well. With latest codes for testing
could facilitate work for the project. Once the first release of WINGRUB is ready, we
shall put up the latest version of GRUB for DOS and WINGRUB to sourceforge.net

[em12][em12][em12]

[此贴子已经被作者于2004-3-15 11:43:29编辑过]



作者: windrv     时间: 2004-3-16 00:00
Dear TinyBit,

Please take sufficient rest!

When you do feel well, you could contribute by enlightening us on the technical
aspects of GRUB for DOS. You need not do coding for the moment.

We may follow up if we have time. As it is an open-source project, anybody who
has such expertise is welcome to join in.

Detailed documentation is in need and cannot be done without your enlightenment.


[em12][em12][em12]

[此贴子已经被作者于2004-3-16 9:11:36编辑过]



作者: 不点     时间: 2004-4-5 00:00
以前好像提到在 LINUX 伊甸园的某个文档里,有 GRUB for DOS 的技术资料。当然,也可能有些问题没有考虑到。但是,我作为一个写这篇文档的人,毕竟有我的能力和视角的限制,不一定能够体现出所有的方面、解决所有的问题。也许有些问题需要等到它暴露出来之后才能发现它、解决它。我目前脑子里好像很空白了,没能发现什么。您觉得还有什么需要说的,我会尽力的。谢谢您的关心,没有您,我的身体不会恢复这么快。我现在还是要尽量避免写程序,只能偶尔写一次,像蜻蜓点水。
作者: windrv     时间: 2004-4-6 00:00


  Quote:
以下是引用不点在2004-4-5 13:41:44的发言:
以前好像提到在LINUX伊甸园的某个文档里,有GRUBforDOS的技术资料。当然,也可能有些问题没有考虑到。但是,我作为一个写这篇文档的人,毕竟有我的能力和视角的限制,不一定能够体现出所有的方面、解决所有的问题。也许有些问题需要等到它暴露出来之后才能发现它、解决它。我目前脑子里好像很空白了,没能发现什么。您觉得还有什么需要说的,我会尽力的。谢谢您的关心,没有您,我的身体不会恢复这么快。我现在还是要尽量避免写程序,只能偶尔写一次,像蜻蜓点水。

I think you could also consolidate what you put in 伊甸园 to your
homepage so that people can easily get all the files in one place.

[em12][em12][em12]


[此贴子已经被作者于2004-4-6 20:13:14编辑过]



作者: 不点     时间: 2004-4-10 00:00
我制作了 pre5。不知 windrv 兄和 wengier 兄有什么计划?可否把 pre5 在您们各自制作的主页上提供下载?

http://ipdown.com/grub4dos/grub_for_dos-0.2.0pre5.tar.gz

pre5 解决了 ruymbeke 提出的一个问题,就是在 map 命令行中可以省略 root 设备名了。即,可以这样使用:

map /file.img (fd0)

此时假定 root 设备已经指定。

另外还解决了 tmpid 所提到的两个 BUG。一个是 GRLDR 不能在 FAT12、FAT16下运行;另一个是 GRUB.EXE 不能运行。前者应当已经得到了 tmpid 兄的确认,后者需要等待 tmpid 兄的确认。估计问题不大。

还剩下 wengier 兄提到的 shell=c:\grub.exe 的 BUG 没有解决。

http://ipdown.com/grub4dos/


作者: 不点     时间: 2004-4-12 00:00
pre6 也上载了.

http://ipdown.com/grub4dos/
http://ipdown.com/grub4dos/grub_for_dos-0.2.0pre6.tar.gz

解决了 Config.sys 中不能使用 shell=grub.exe 的问题.

至此, 所有已知的 BUG 都得到了修复. 如果没有什么问题, pre6 应当可以直接升级为最终的正式版.

我的任务应当完成了, 而且我自己很满意. 我可以睡大觉了. 剩下的都是您们的事了:-)


作者: Wengier     时间: 2004-4-15 00:00
不点:您能不能大概介绍一下关于pre6版中修正的那个关于SHELL命令的BUG是什么原因造成的呢?

另外,我上次不是和您说过我用GRUB for DOS/NTLDR来禁用第二个硬盘以正常启动到WinME吗?这样做启动WinME后禁用硬盘的目的确实达到了,不过连着那个硬盘的IDE接口上的IDE光驱在WinME下也同时被禁用而看不到了。而如果在BIOS中禁用硬盘的话,那WinME启动后则看不到硬盘但能看到那个光驱。如果在GRUB禁用硬盘的情况下,在WinME的纯DOS下加载光驱驱动程序(VIDE-CDD.SYS+MSCDEX.EXE)后再进入WinME的话,那么在WinME下虽可以正常看到并读出光驱中的内容,但此时在WinME下使用光驱将和普通DOS下一样,既不支持光盘上的长文件名,也不能用Nero等软件刻录CD,因为MSCDEX并不支持这些功能。能不能使得用GRUB禁用硬盘的效果和BIOS中禁用硬盘的效果一样,在WinME下也能直接识别那个连在一个IDE接口上的光驱呢?
作者: windrv     时间: 2004-4-15 00:00


  Quote:
以下是引用不点在2004-4-12 11:57:59的发言:
pre6 也上载了. 

http://ipdown.com/grub4dos/
http://ipdown.com/grub4dos/grub_for_dos-0.2.0pre6.tar.gz

解决了 Config.sys 中不能使用 shell=grub.exe 的问题.

至此, 所有已知的 BUG 都得到了修复. 如果没有什么问题, pre6 应当可以直接升级为最终的正式版.

我的任务应当完成了, 而且我自己很满意. 我可以睡大觉了. 剩下的都是您们的事了:-)


Dear TinyBit,

Don't work too hard! Please leave it until you fully recover.

Bean123 is testing Grub For DOS and is beginning to write up WINGRUB and
we expect it to be out sometime next week.

[em12][em12][em12]
作者: windrv     时间: 2004-4-15 00:00


  Quote:
以下是引用Wengier在2004-4-15 10:27:48的发言:
不点:您能不能大概介绍一下关于pre6版中修正的那个关于SHELL命令的BUG是什么原因造成的呢?

另外,我上次不是和您说过我用GRUB for DOS/NTLDR来禁用第二个硬盘以正常启动到WinME吗?这样做启动WinME后禁用硬盘的目的确实达到了,不过连着那个硬盘的IDE接口上的IDE光驱在WinME下也同时被禁用而看不到了。而如果在BIOS中禁用硬盘的话,那WinME启动后则看不到硬盘但能看到那个光驱。如果在GRUB禁用硬盘的情况下,在WinME的纯DOS下加载光驱驱动程序(VIDE-CDD.SYS+MSCDEX.EXE)后再进入WinME的话,那么在WinME下虽可以正常看到并读出光驱中的内容,但此时在WinME下使用光驱将和普通DOS下一样,既不支持光盘上的长文件名,也不能用Nero等软件刻录CD,因为MSCDEX并不支持这些功能。能不能使得用GRUB禁用硬盘的效果和BIOS中禁用硬盘的效果一样,在WinME下也能直接识别那个连在一个IDE接口上的光驱呢?

Dear Wengier,

Could you explain why you have to disable the secondary hard disk for booting up
WinME?

[em12][em12][em12]
作者: 不点     时间: 2004-4-15 00:00
wengier:

shell=grub.exe 传给 grub 的命令行是 /d /k AUTOEXEC, 这个命令行是 grub.exe 所未能识别的. 修正的方法很简单, 就是设法让 grub.exe 忽略这个命令行, 把 /d /k AUTOEXEC 的第一个空格字符变成回车就OK 了.

至于您说的 IDE CDROM 问题, 我还没有仔细看, 初步感觉, 是一个不容易解决的问题.

windrv:

如果 bean123 兄发布了, 我就把他的发布作为最新版, 以后如果我也发布的话, 就以最后的版本为基础. 今后我也许会发布, 也许不会再发布. 如果我不再发布, 我就把补丁提交给 bean123 兄. 如果 bean123 兄的发布中包含了 wingrub, 那么我将来的发布(如果有的话), 也将包括 wingrub. 我的发布, 不是正式的, 只是在那个草稿页上方便大家的下载. 而 bean123 兄的发布, 将是正式的. 工作逐步转移到 bean123 兄.

请代我谢谢他解放了我.

--------

托您的福, 我现在比一个月前好多了. 现在我仍然没有完全恢复, 尽量少参与写代码. 再次谢谢您.
作者: 不点     时间: 2004-4-15 00:00
wengier:

grub for dos 的磁盘仿真参数 --disable-chs-mode 和 --disable-lba-mode 所做的, 仅仅是让程序通过 int13/ah=02/03/42/43 等等这类接口不能成功执行, 而是返回"介质不存在"的失败消息.

winme 可能通过int13来探测硬盘, 只有当它也通过 int13 来探测 CDROM 时, 才会发生您所说的问题. 然而, CDROM似乎从来都没有过 int13 接口, 怎么可能通过 int13 接口来探测CDROM呢? 所以, 这只能归结于 windows 的秘密, 微软不想公开它操作系统的一些细节. 我觉得对此问题, 无从下手, 无法继续研究它了.

------------

刚才提到 int13 的 CDROM 探测, 或许也是有可能的. 比如 int13/AH=4b 就是针对 CDROM 的. 我最多只能对此再研究一下.


[此贴子已经被作者于2004-4-15 15:11:28编辑过]



作者: Wengier     时间: 2004-4-15 00:00


  Quote:
以下是引用windrv在2004-4-15 11:20:21的发言:
Dear Wengier,

Could you explain why you have to disable the secondary hard disk for booting up
WinME?

[em12][em12][em12]

是这么回事,以前安装WinME的时候,是在只有一个硬盘的情况下装的,装在E:\WINME文件夹下。后来又加挂了一个小硬盘,有一个主分区和一个扩展分区。两个硬盘在DOS下均可以正常使用。然而,由于两个硬盘均存在主分区,造成了盘符交错的问题,结果启动WinME前结果不禁用第二个硬盘的话,WinME根本无法正常启动。而如果启动DOS的话则可以通过LetterAssign来解决此问题。我不想删除第二个硬盘中的主分区来取消盘符交错,因为它也是一个可以独立使用的硬盘。我也试过用LetterAssign等软件的DOS版和WIN版来应付WinME,但都无法成功,WinME不是无法启动就是启动后发现新硬件(即第二个硬盘)后死机。由于我的系统是多启动的(用的是WinXP的启动菜单+GRUB for NTLDR),启动到各种DOS下都可以正常使用两个硬盘,而只在进入WinME时才禁用第二个硬盘,所以我不想在BIOS中直接禁用(否则所有系统都无法看到这个硬盘了),而是通过GRUB for DOS/NTLDR来在启动WinME前临时禁用。

另外说一下,用GRUB禁用硬盘并启动WinME后,在“系统属性”->“设备管理器”中的“硬盘控制器”栏中的"Primary IDE Controller"设备前有一个感叹号。那个IDE HD和IDE CD就是连在它上面的。
作者: 不点     时间: 2004-4-16 00:00
> 用GRUB禁用硬盘并启动WinME后,在“系统属性”->“设备管理器”中的“硬盘控制器”栏中的"Primary IDE Controller"设备前有一个感叹号。那个IDE HD和IDE CD就是连在它上面的。

说明该 IDE 设备不能驱动.

您的设备分配是这样的吧:

Primary IDE: (hd0)----- 硬盘 (cd)------ CDROM

Secondary IDE: (hd1)----- 硬盘 含有 winme

通过禁用 (hd0) 来启动 winme.

奇怪的是, int13 居然影响到 IDE 设备的驱动了, 所以才导致硬盘和 CDROM 未被探测到.

猜想, 假如我们能够解决 IDE 设备的驱动问题, 那么, (hd0) 和 (cd) 都会被 windows 发现, 因而您想禁止 (hd0) 的目的将达不到.

所以, 眼下 IDE 不能被驱动, 反而是个好事.

前一个帖子中我曾说到 int13/ah=4b 这类可引导的 CDROM 接口. 仔细想想, 也没发现这些接口可被用来探测 CDROM 的端口. 况且我们禁用的是 int13/DL=(禁用的磁盘号码), 对其它 DL 值不起作用, 也就是说, 其它 DL 值可以顺利通过, 能够到达原来的 BIOS 程序代码.

因此, IDE 不能驱动, 这一点可能是导致 CDROM 不能发现的根本原因.

但 IDE 为何不能驱动, 这个可就更难知晓了. 我只好放弃进一步的研究.

作者: Wengier     时间: 2004-4-22 00:00


  Quote:
以下是引用不点在2004-4-15 11:55:53的发言:
wengier:

shell=grub.exe传给grub的命令行是/d/kAUTOEXEC,这个命令行是grub.exe所未能识别的.修正的方法很简单,就是设法让grub.exe忽略这个命令行,把/d/kAUTOEXEC的第一个空格字符变成回车就OK了.

刚才我又试了一下,发现GRUB.EXE在一些情况下用SHELL等命令加载时仍然无效。当按F8键进行Step by Step confirmation模式,或按F5键Bypass后系统提示输入命令处理器的路径时输入GRUB.EXE的情况下,由于传给SHELL的参数已不一定是/D /K AUTOEXEC,所以这时仍无法加载GRUB.EXE成为SHELL。以下是此情况下输入GRUB.EXE时屏幕上出现的信息(这只是其中的一个情况,还有其它几种类似情况):

The following file is missing or corrupted: COMMAND.COM
Type the name of the Command Interpreter (e.g., C:\COMMAND.COM)
C>grub.exe (

我的建议是GRUB.EXE运行时自动判断命令行参数的前两个字符是否是"--",如果是的话但后面不是可以接收的参数(如现在的合法参数config-file)的话就显示GRUB的命令行用法;如果命令行参数的前两个字符不是"--"的话就直接运行GRUB,不如这样如何?

另外,正式版的GRUB中上面那些测试用的显示信息(即上面那些16进制的数字等)似乎应该去掉才好。


作者: 不点     时间: 2004-4-23 00:00
太好了! 这些显示的调试信息很有用, 正式版也要保留它. 因为只是在命令行不被识别的情况下才会出现这些调试信息. 正确时不会出现这些信息. 这些信息对于帮助我们判断错误的根源太有用了.

本次错误的根源是:

2F 79 20 0D

/y 参数不是以空格开头, 而是以斜杠开头. 比较罗嗦了. 这很明显是微软的一个 BUG, 空格应当放在斜杠之前, 它却放在斜杠和 y 的后面了.

> 我的建议是GRUB.EXE运行时自动判断命令行参数的前两个字符是否是"--",
> 如果是的话但后面不是可以接收的参数(如现在的合法参数config-file)
> 的话就显示GRUB的命令行用法;如果命令行参数的前两个字符不是"--"的
> 话就直接运行GRUB,不如这样如何?

如果命令行是这样的:

--config-file=(hd0,0)/boot/grub/menu.lst/y /p /d /k AUTOEXEC

就不好了. 注意: (hd0,0)/boot/grub/menu.lst/y 会被认为是路径, 这是一个失败的路径.

所以, 必须把 "/y" 里的斜杠变成回车符. 可是程序怎么知道这个斜杠不是路径分隔符呢?

所以麻烦了.

以前的 " /d /k AUTOEXEC" 中, 第一个字符是空格, 容易判断, 现在 /y 之前没有空格了, 增添了不少混乱.



作者: 不点     时间: 2004-4-23 00:00
我现在有个这样的想法, 你看看怎么样:

当使用 shell=grub.exe 的时候, 要求采用以下的格式:

shell=grub.exe /
shell=grub.exe --config-file=(hd0,0)/boot/grub/menu.lst /

最后的斜杠前面至少有一个空格 (这可以写入 GRUB for DOS 的文档中).

这样虽然不美观, 但是却可以完美的解决微软的这一类的 BUG.

如果这样做大家可以接受的话, 现在就不需要任何更改, pre6 就行了.


作者: Wengier     时间: 2004-4-23 00:00


  Quote:
以下是引用不点在2004-4-23 15:22:32的发言:
这些显示的调试信息很有用, 正式版也要保留它. 因为只是在命令行不被识别的情况下才会出现这些调试信息. 正确时不会出现这些信息. 这些信息对于帮助我们判断错误的根源太有用了.

调试信息本身是很有用的,然而如果仅仅这样的话非常非常不美观,而且会让用户们认为是GRUB的crash信息或一个重大BUG。

我想的话可以在这些调试信息前加一些文字以进行说明,这样应该就好多了,比如说:

GRUB: Unknown parameter! Debug information:
作者: 不点     时间: 2004-4-23 00:00
这个建议很好。

关于 /y 之类的参数,除了上述所说的“在命令行尾部加空格和斜杠”的办法之外,还有别的更好的办法吗?能否说说你的意见?
作者: Wengier     时间: 2004-4-23 00:00


  Quote:
以下是引用不点在2004-4-23 15:22:32的发言:
/y 参数不是以空格开头, 而是以斜杠开头. 比较罗嗦了. 这很明显是微软的一个 BUG, 空格应当放在斜杠之前, 它却放在斜杠和 y 的后面了.

如果命令行是这样的:

--config-file=(hd0,0)/boot/grub/menu.lst/y /p /d /k AUTOEXEC

就不好了. 注意: (hd0,0)/boot/grub/menu.lst/y 会被认为是路径, 这是一个失败的路径.

我看了一下,命令行将不是像上面那样的,即:

--config-file=(hd0,0)/boot/grub/menu.lst/y /p /d /k AUTOEXEC

而是这样的:

/y --config-file=(hd0,0)/boot/grub/menu.lst /d /k AUTOEXEC

也就是说,/y将紧帖着GRUB.EXE,即:GRUB.EXE/y --config-file=xxx /d /k AUTOEXEC

而通常SHELL用COMMAND.COM时则成为这样的形式:
COMMAND.COM/y  /d /k AUTOEXEC

比如当为/p /e:640时,那么,总的命令行即:
COMMAND.COM/y /p /e:640 /d /k AUTOEXEC

而这是正确的,所以也算不上是MS的BUG。只是当将COMMAND.COM换成GRUB.EXE,当使用Step-by-step mode时,总的命令行就成了这样的形式:

GRUB.EXE/y  /d /k AUTOEXEC

所以我想的话,将紧帖着GRUB.EXE后的/y参数忽略,并将--config-file参数后的空格加斜杠也忽略,那应该就可以了吧。
作者: 不点     时间: 2004-4-24 00:00
把 grub.exe 和 dosstart.S 上载了,试试看行不行:

http://ipdown.com/grub4dos/

方法:把 /y 以及它之后(直到 “--” 之前)的字符都变成空格,然后把第一个 “空格斜杠” 对中的空格变成回车。应当可以了。

因为改动不大,所以不想现在就制作一个 pre7 出来。


作者: Wengier     时间: 2004-4-24 00:00
这回GRUB的显示信息确实好多了:

Microsoft(R) MS-DOS 7.1
   (C)Copyright Microsoft Corp 1981-1999.

C:\>grub.exe abc

GRUB: Unrecognized command line parameters. Usage:

        GRUB --config-file=FILE

The options are case-sensitive, you must use lower-case letters. Example:

        GRUB --config-file=(hd0,0)/boot/grub/menu.lst

Hexdump of command-line buffer in PSP:

0080:   04 20 61 62 63 0D 00 00 00 00 00 00 00 00 00 00    abc.         
0090:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                  
00A0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                  
00B0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                  
00C0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                  
00D0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                  
00E0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                  
00F0:   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00                  

C:\>

不过这个--config-file等参数不是已经case-insensitive了吗(比如--CONFIG-FILE已经是可以的了),为什么上面却仍写着"The options are case-sensitive, you must use lower-case letters"呢?
作者: 不点     时间: 2004-4-24 00:00
是这样的,虽然这里表面上 是 大小写无关了,其实还是有关的。所以还是建议用小写。原因有二:

1。grub 作为一个独立程序,它对于 FAT 家族系统中的文件名,都是采用小写的,只有对于长文件名才有可能使用大写。【另外顺便说,GRUB 不能打开含有空格的文件名,而中文文件名也不容易打开】

2。我们编程只是针对 config.sys 将小写全部转为大写,而采取的补救措施。算法是这样的:首先测试 “--config-file=” 这个串是否全部是小写,如果是,那么它后面的文件名是大小写敏感的,也就是说,不会自动把大写转换为小写。如果 --config-file= 之中含有大写字符,则把整个命令行全部转换为小写,然后才交给 stage2 代码。

从用户的角度,使用小写的 “--config-file=” 总是没错的,所以写成强制性的了。也就是说,可以把大写看作未公开的特性。大多数人不需要了解这个细节。


作者: bean123     时间: 2004-5-1 00:00
一个关于grub的小建议:当用bootgrub作为mbr时,grldr文件好像只能放在第一个主分区。能否做得通用一点,使其能顺序搜索各个主分区的根目录,以第一个找到的grldr为准呢?

[此贴子已经被作者于2004-5-1 3:01:12编辑过]



作者: 不点     时间: 2004-5-1 00:00
好像目前已经是这样了。如果不是这样,那就是个 BUG 了。

BOOTGRUB 第一扇区的程序只能找到含有 NT bootsector 的那些扇区。它们可以是 FAT12、FAT16、FAT32、NTFS 的,但不管是哪一种,都必须含有微软格式化的引导扇区。否则,将跳过该分区,查找下一个。

如果把 BOOTGRUB 第二、三、四扇区放到紧接 MBR 之后的三个扇区上,那么此时可以找到任意格式化软件处理过的 FAT12、FAT16、FAT32 分区,以及微软格式化过的 NTFS 分区。

--------------

写完之后发现我没有正确理解 bean123 兄的话。的确是的,目前查找第一个主分区,如果该分区的格式是合法的【即,它是 FAT12、FAT16、FAT32 或者微软格式化的NTFS】,那么程序不管该分区是否含有 GRLDR,都将控制交给相应的引导程序。也就是说,程序假定所找到的第一个合法分区含有 GRLDR 文件。这确实可以改进。谢谢 bean123 兄。

------------------------------------

另外,bean123 兄,有无发布计划?我一直在等着呢。在你发布之后,我将只是提交补丁了。就像 LINUX 的版本,有 A.C. 等人对内核打补丁的方式一样。

作者: bean123     时间: 2004-5-1 00:00
WinGrub基本上已经做好了,我现在正在测试,很快便可以发布了
作者: 不点     时间: 2004-5-1 00:00
好的,发布之后别忘了向中、英文的新闻网站提供消息。目前主要只是懂中文的人才知道 grub4dos。这是个很大的缺陷。

永远不必等待我的修补计划,我自己很随便,没有时间表。

----------------------------------

补充:

以下这两个新闻网站好像就不错:

http://slashdot.org/
http://osnews.com/


[此贴子已经被作者于2004-5-1 13:09:01编辑过]



作者: lnxsun     时间: 2004-6-18 00:00
个人觉得grldr出来之后grub for dos的应用有了一个新t天地,因为她安全方便

现在grub for dos已经有软盘和硬盘的map了,如果再有能map iso,那么grub for dos项目会得到更大的应用,比如光盘安装,光盘版的linux都能得到应用