无忧启动论坛

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

如果在 grub4dos 中集成 DOS 运行环境,哪个开源的 DOS 比较好,请推荐

  [复制链接]
 楼主| 发表于 2014-12-21 21:12:59 | 显示全部楼层

目前的实现方式,支持任意的 DOS,而 grub4dos 本身也没有集成 DOS 的 API。

本次比以前做了微小的改进。

1、修补了 boot 命令,让它启动 DOS 之后,先把 grub4dos 的 640K 常规内存保存在 2M 处,以便 grub.exe 能够利用它返回到 grub4dos 之中。
2、修补了 grub.exe,在无参数时,让它试图首先从 2M 处寻找 grub4dos 的备份。找到后就切换到先前的 GRUB 环境。
3、修补了 quit 命令,让它在从 grub 环境退回到 DOS 环境时,也先把 grub4dos 的 640K 常规内存保存在 2M 处,以便 grub.exe 能够利用它返回到 grub4dos 之中。

这种微调的实现方式,可以兼容现有的一切。所以,这个改动(测试稳定以后)可以纳入到目前的 svn 数据库中。


测试的方法:

用新版本的 grub4dos 启动 DOS,然后,在 DOS 下执行新版的 grub.exe,看看能否返回到先前的 grub 环境。当成功返回到 grub 之后,再执行 quit 命令,看看可否退回到刚才的 DOS 环境。

然后又运行 grub.exe,看看能否返回到 grub 环境。

然后再执行 quit 命令,看看能否退回到 DOS 环境。

就这样,反复折腾,看看是否都顺利。

回复

使用道具 举报

发表于 2014-12-22 09:02:05 | 显示全部楼层
试了 Windows 98 DOS, FreeDOS 和 DOS 7.1 情况一样如下:
1. 系统起动首先进入Grub4dos.
2. boot 入 dos 系统
3. Grub.exe 回到 Grub4dos.
4. Grub4dos 中 quit 回 DOS
5. Grub.exe ... 系统停摆,没有任何显示.

点评

谢谢,测试结果与我的测试结果相同。 看来有个什么隐蔽的地方没弄好。排解错误好困难啊。  详情 回复 发表于 2014-12-22 09:04
回复

使用道具 举报

 楼主| 发表于 2014-12-22 09:04:58 | 显示全部楼层
pcs2006 发表于 2014-12-22 09:02
试了 Windows 98 DOS, FreeDOS 和 DOS 7.1 情况一样如下:
1. 系统起动首先进入Grub4dos.
2. boot 入 dos  ...

谢谢,测试结果与我的测试结果相同。

看来有个什么隐蔽的地方没弄好。排解错误好困难啊。

回复

使用道具 举报

 楼主| 发表于 2014-12-22 15:43:37 | 显示全部楼层
中午找到毛病,问题解决了,更新后的版本在一楼下载。

现在大家可以大量测试了,看看会不会暴露出其他问题。

回复

使用道具 举报

发表于 2014-12-22 17:17:20 | 显示全部楼层
如何测试? 有没有操作步骤及说明?

点评

其实,日常的使用,便是测试。这叫做常规功能测试。代码改动以后,有可能影响到日常使用,因此,需要常规功能测试。 新增的功能,大概只有开发人员才关心。 新功能有什么使用的场景?我来说说一些可能的情况吧  详情 回复 发表于 2014-12-22 18:17
回复

使用道具 举报

 楼主| 发表于 2014-12-22 18:17:49 | 显示全部楼层
topway 发表于 2014-12-22 17:17
如何测试? 有没有操作步骤及说明?

其实,日常的使用,便是测试。这叫做常规功能测试。代码改动以后,有可能影响到日常使用,因此,需要常规功能测试。

新增的功能,大概只有开发人员才关心。

新功能有什么使用的场景?我来说说一些可能的情况吧。

你有一个 grub4dos 的菜单或程序(包括批处理)。你希望调用某个 DOS 程序,然后返回到 grub4dos 中。

你可以用 boot 命令启动 DOS,在 DOS 中,你有 autoexec.bat,它可以运行你的程序,在这个 autoexec.bat 里面,你可以放一条 grub.exe 命令,这样会返回到 grub4dos 中。

grub.exe 究竟能返回到 grub4dos 的什么地方呢?它返回到紧接刚才的 boot 命令的下一条命令处。所以,你在 boot 命令之后,还要放置一些相关的命令或控制转移指令。

然后,假如你又想回到 DOS 了,此时,你无需再执行 boot 命令,而是使用 quit 命令,这是因为 DOS 环境已经存在了。

quit 命令从 grub4dos 退回到 DOS,究竟退到什么地点呢?

你可能已经猜到了:它退到你刚才执行的 grub.exe 命令的下一条命令处。

从哪里退出的,将来切换回来的时候,就仍然回到哪里。从哪出去的,就从哪回来。

grub.exe 和 quit 命令都是起着 “退出” 的作用。

grub.exe 是 “退出 DOS,进入 grub4dos”。
quit 命令是 “退出 grub4dos,进入 DOS”。

它们的共同点是,从哪条命令退出的,将来回来的时候,也会回到紧接这条命令的下一条命令处。

boot 命令与 quit 命令相似,所不同的地方在于,boot 命令是建立初始的 DOS 环境。而 quit 命令是进入已经建立好了的 DOS 环境中。

慢慢理解吧。

回复

使用道具 举报

发表于 2014-12-22 18:50:26 | 显示全部楼层
试了 Windows 98 DOS, FreeDOS,4 DOS  和 DOS 7.1 情况如下

1.大致可以进入任意DOS系统,并可以Grub.exe 返回, quit退回dos,并反复多次
2. dos 和 Grub4dos变量可以保存,不管进出多少次.


问题:

若dos系统的程式有做变更显示(text mode ->graphic mode),比如dos工具箱(4-dos)
grub回grub4dos后,再quit 回dos时,画面无法显示
若这时候盲打grub.exe 可返回grub4dos,再quit回dos仍然是画面无法显示,除非改换另一套dos
这相当于重新一个新环境,不能解决问题
或者使用者可以自行由grub4dos返回时重新设定一次graphic mode来解决

点评

这个确实是问题. 就像我之前碰到的ipxe问题一样,当grub4dos是图形模式时进入ipxe shell会没有显示.只能切换到文本模式  详情 回复 发表于 2014-12-23 11:11
回复

使用道具 举报

发表于 2014-12-23 11:11:07 | 显示全部楼层
pcs2006 发表于 2014-12-22 18:50
试了 Windows 98 DOS, FreeDOS,4 DOS  和 DOS 7.1 情况如下

1.大致可以进入任意DOS系统,并可以Grub.e ...

这个确实是问题.

就像我之前碰到的ipxe问题一样,当grub4dos是图形模式时进入ipxe shell会没有显示.只能切换到文本模式
回复

使用道具 举报

发表于 2014-12-23 17:35:31 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2014-12-23 17:48 编辑

grub4dos-0.4.5c-2014-12-22.7z 版本,MSDOS 7.1,Virtual Machines 环境。
1. 启动进入 DOS,键入 grub.exe,出现错误提示。死机。

2. 启动进入 GRUB4DOS,从菜单进 DOS,没有使用 --mem 参数,直接打印错误信息。
似乎是从 DOS 返回了。find 发现多了 fd0,可以访问,如 ls 。实机测试结果一样。

1

1

2

2
回复

使用道具 举报

 楼主| 发表于 2014-12-24 11:00:29 | 显示全部楼层
看看今天这个版本有没有改进?pcs2006 报告的 DOS 图形模式问题是否解决了?

点评

其实 grub4dos-0.4.5c-2014-12-22.7z,只要在切换grub前退回text mode是没有问题的。 grub4dos-0.4.5c-2014-12-24.7z,情况是进入dos后,文字模式或图形模式下按grub.exe 后,系统停止,没有任何显示。 另外,y  详情 回复 发表于 2014-12-24 14:57
回复

使用道具 举报

发表于 2014-12-24 14:57:13 | 显示全部楼层
不点 发表于 2014-12-24 11:00
看看今天这个版本有没有改进?pcs2006 报告的 DOS 图形模式问题是否解决了?

其实 grub4dos-0.4.5c-2014-12-22.7z,只要在切换grub前退回text mode是没有问题的。

grub4dos-0.4.5c-2014-12-24.7z,情况是进入dos后,文字模式或图形模式下按grub.exe 后,系统停止,没有任何显示。

另外,yaya的情况我也碰过,可能是usb和harddisk有超过一份menu.lst所致。

点评

刚才又编译了一个,试试还死机吗? 另外也请试试 23 日的版本是否死机。  详情 回复 发表于 2014-12-24 15:24
回复

使用道具 举报

 楼主| 发表于 2014-12-24 15:24:43 | 显示全部楼层
pcs2006 发表于 2014-12-24 14:57
其实 grub4dos-0.4.5c-2014-12-22.7z,只要在切换grub前退回text mode是没有问题的。

grub4dos-0.4.5c ...

刚才又编译了一个,试试还死机吗?

另外也请试试 23 日的版本是否死机。

回复

使用道具 举报

发表于 2014-12-24 16:17:54 | 显示全部楼层
情况依旧--
若配合 grub4dos-0.4.5c-2014-12-22.7z  版的 grub.exe,反而不再死机,
但某些图形模式(dos的中文系统)还得手动更改回文字模式才能正常显示。

23日的正常,不死机。

点评

又上载了一个,试试还死机吗? 如果不死机,请报告它能真的 “退出” DOS 而 “返回” grub4dos 吗?成功返回到 grub4dos 时,会有 Returned from DOS 的提示。 如果是进入全新的 grub4dos 环境,那就是有问题  详情 回复 发表于 2014-12-24 17:03
回复

使用道具 举报

 楼主| 发表于 2014-12-24 17:03:44 | 显示全部楼层
pcs2006 发表于 2014-12-24 16:17
情况依旧--
若配合 grub4dos-0.4.5c-2014-12-22.7z  版的 grub.exe,反而不再死机,
但某些图形模式(d ...

又上载了一个,试试还死机吗?

如果不死机,请报告它能真的 “退出” DOS 而 “返回” grub4dos 吗?成功返回到 grub4dos 时,会有 Returned from DOS 的提示。

如果是进入全新的 grub4dos 环境,那就是有问题的,请报告 CPU 的详细信息:它是 Intel 的,还是 AMD 的,是什么年代的产品。如果你的测试是在虚拟机下完成的,请报告虚拟机的名称和版本。

回复

使用道具 举报

发表于 2014-12-24 17:49:22 | 显示全部楼层
试了几台机

Intel Core i3-2350 cpu
Intel Atom cpu n280  Lapbook
这两台无法进入DOS出现如下句子,然后回到Grub4dos,load其他pe没问题

Boot
Error 87:.............
         Returned from DOS


这一台
AMD Athlon 64 x 2 Dual Core
可以进入DOS,Grub.exe仍旧死,基本上24日的都死,23日以前的没问题



回复

使用道具 举报

 楼主| 发表于 2014-12-24 17:57:16 | 显示全部楼层
请确认:

23 日的 grub.exe 能够从 DOS 返回到 grub4dos 吗?能够出现 Returned from DOS 的提示吗?

回复

使用道具 举报

发表于 2014-12-24 18:30:55 | 显示全部楼层
比较奇怪,只有AMD Athlon 64 x 2 Dual Core 可以在23日的版本正常运作
可以自由切换dos和grub ,回到grub时出现句子:

Graphics mode number set to  0 x122
Error 87:.............
         Returned from DOS


其他电脑进入dos失败,包括23日的,这似乎和load dos的img有关,若用
freedos ,chainloader /kernel.sys 的方式便可以进入dos,并且显示

Graphics mode number set to  0 x1?? (这是另一台samsung i3)
Error 87:.............
         Returned from DOS
回复

使用道具 举报

发表于 2014-12-24 22:10:29 | 显示全部楼层
我的笔记本是联想Y470,使用您提供的grldr,用run程序启动img软盘镜像失败!显示也是如下:
Error 87:.............
         Returned from DOS
用run启动iso镜像没问题,可顺利进入winpe。
麻烦不点老大再改进改进!!
谢谢
回复

使用道具 举报

 楼主| 发表于 2014-12-25 06:35:23 | 显示全部楼层
本帖最后由 不点 于 2014-12-25 11:20 编辑

上载了 24 日的最后一版,终于找到了一个毛病。

从 DOS 下启动 grub.exe 应该不会死机了。

还需要大家继续测试并报告:从 grub4dos 启动 DOS 是否仍旧失败?我的测试是成功的。

请注意,大家在测试时,应该保证 DOS 下不会自动执行 grub.exe,因为如果进入 DOS 后又自动执行 grub.exe,那就是退出 DOS 而立即返回到 grub4dos 了。

回复

使用道具 举报

 楼主| 发表于 2014-12-25 17:11:58 | 显示全部楼层
下载了 DOS时代菜鸟 的 我的DOS工具箱 2014-10-30 188-17.6 4dos 版,将新的 grub.exe 放在它的根目录下,用 grub.exe 进入 grub4dos,再 quit 回 DOS,图形模式得以成功恢复,DOS 下的中文字符可以正常显示。

似乎没有什么问题了。

回复

使用道具 举报

发表于 2014-12-25 18:12:10 | 显示全部楼层
处理器名称        DualCore Intel Core 2 Duo E7400, 2800 MHz (10.5 x 267)
主板芯片组        Intel Eaglelake P45
系统内存        1995 MB  (DDR3-1333 DDR3 SDRAM)
BIOS 类型        Award Modular (06/07/10)
显示适配器        NVIDIA GeForce GTS 250  (512 MB)

不能启动img。所有均显示:
显示:
Error 87:.............
         Returned from DOS

点评

谢谢支持。 诸如此类的 dos 启动失败,我怀疑是以某种方式在进入 dos 时,自动执行了 grub.exe 程序。 请上载这样的 img,或者告知下载地点,以便我能够亲自测试。 不成功的 img 都可以上载,或告知下载地  详情 回复 发表于 2014-12-25 20:07
回复

使用道具 举报

发表于 2014-12-25 18:45:24 | 显示全部楼层
本帖最后由 pcs2006 于 2014-12-25 18:46 编辑

25日版的大致没问题(暂时只试了一台机器和一支usb)。

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=138340

这是dos时代菜鸟的dos工具箱,Grub4dos 载入img进入正常界面
按ESC 回到dos ,  按ML换成中文模式,按grub.exe 返回Grub4dos
再quit回dos时画面乱了或不能显示,这时候可以
1.盲打grub.exe 返回 Grub4dos,Grub4dos中quit回dos又变没有显示
    或
2.盲打 cn q 换回文字模式,一切回复正常
回复

使用道具 举报

 楼主| 发表于 2014-12-25 20:07:43 | 显示全部楼层
scxiegangxy 发表于 2014-12-25 18:12
处理器名称        DualCore Intel Core 2 Duo E7400, 2800 MHz (10.5 x 267)
主板芯片组        Intel Eaglelake P45
...

谢谢支持。

诸如此类的 dos 启动失败,我怀疑是以某种方式在进入 dos 时,自动执行了 grub.exe 程序。

请上载这样的 img,或者告知下载地点,以便我能够亲自测试。

不成功的 img 都可以上载,或告知下载地址。
回复

使用道具 举报

发表于 2014-12-26 10:14:53 | 显示全部楼层
使用 24 日版本测试。
1. 在 G4D 环境,加载 MSDOS,成功进入 DOS。执行 quit,成功返回 G4D。
2. 在 DOS 环境,执行 grub.exe,成功进入 G4D。
执行 root,find,ls (hd0,3)/ 正常;但是执行 ls (fd0)/ 则重启。

点评

是不是 dos 下运行了某些软件,它们破坏了位于扩展内存的 grub4dos 环境? dos 不可以执行 himem 或 emm386之类的内存管理软件,它们都要使用扩展内存空间。目前只是解决了常规内存冲突问题,没有解决扩展内存冲突问  详情 回复 发表于 2014-12-28 08:25
回复

使用道具 举报

 楼主| 发表于 2014-12-27 08:02:22 | 显示全部楼层
26 日折腾了一整天,中文 DOS 环境仍有问题。作为阶段性的成果,上载到一楼了。

目前,当 grub4dos 处于 VBE 模式时,如果用 quit 退回到中文环境的 DOS,则屏幕显示不出字符,需要手动执行一条 cls 命令清屏,才能显示出 DOS 命令行。此时仍有中文支持,可以显示中文字符。

大家能够容忍这种情况吗?如果能容忍,请多多测试 26 日的版本,将来说不定也有办法解决 “必须手动执行 CLS 命令” 的问题。

今天准备再编译一个版本,彻底退出 DOS 环境,只使用干净的英文 text 环境,这样避免调用复杂的 BIOS,也相应地会增加稳定性。

回复

使用道具 举报

 楼主| 发表于 2014-12-27 09:24:48 | 显示全部楼层
2014年12月27日:本来想着用 BIOS 标准调用 int10/ax=0003 返回到英文文本模式即可解决问题,但遗憾的是,DOS 时代菜鸟所采用的中文 DOS 环境是有毛病的,使得上述 BIOS 调用不能彻底卸载中文环境,而只是进入了一个有毛病的英文文本模式。彻底卸载中文环境,需要用这个 DOS 自己带的 fcquit.com 程序才行。这是一个不大不小的 bug,使得我们不可能用标准的 BIOS 调用来解决问题。

如果在中文环境下执行 grub.exe,然后又用 quit 返回到 DOS,此时屏幕不正常,需要执行 cn q 或 fcquit 卸载 DOS 环境才能正常显示。

所以,无论如何都不能解决问题。不完美的中文 DOS,是造成问题的根源。

26 日 和 27 日 这两个版本,就留着让大家长期测试吧。如果有什么问题,请详细报告。

回复

使用道具 举报

 楼主| 发表于 2014-12-27 11:25:35 | 显示全部楼层
本帖最后由 不点 于 2014-12-27 11:46 编辑

27日再次更新,这次以 26 日的版本为基础,调用 BIOS 清屏成功,可以完美支持 “DOS 时代菜鸟 DOS 工具箱” 里面的中文 DOS 了。

以后我们好像应该以这个为主来进行测试。

大家的测试,如果连续 30 天没有人报告 bug,大致就可以进入 svn 数据库了。

噢,忘了:目前只是测试稳定性,还不能进入 svn 数据库。新版 grub.exe 在不带参数时,会执行退出 DOS 返回 grub 的动作,这一点与旧版不兼容,所以,这可能还需要进行功能性的调整。等到测试稳定以后再说吧。



回复

使用道具 举报

 楼主| 发表于 2014-12-27 14:47:38 | 显示全部楼层
在基本成功地贯通了 grub4dos 与 dos 之后,我有一个想法:我们使用 dos 的方式,应该发生一些变化。

原先我们一般是使用 grub4dos 启动 dos,执行完任务后再用 grub.exe 进入 grub4dos。这有两个缺点:

一、dos 破坏了中断向量表,因此,第二次进入 grub4dos 环境以后,中断向量表是受到污染的,不干净。这有可能会导致某些实模式或保护模式程序运行失常。

二、dos 下的 TSR 或设备驱动程序可能接管某些中断,导致 grub.exe 在探测恢复中断向量表时失败,无法进入 grub 环境。


而采用新版 grub.exe 的退出功能,我们不会再面临以上两个风险。我们总是可以退回到可靠的 grub 环境。但是我们需要分别在 grub4dos 和 dos 两个环境下设计好进入和退出的流程,保证在执行完 dos 任务后,又能在 grub4dos 环境下继续执行我们所需要的其他任务。

点评

这个功能稳定之后是不是可以考虑写一个DOS下的小程序让它可以实现返回GRUB4DOS而不是使用GRUB.EXE 必竟GRUB.EXE文件相对来说太大了,特别是一些磁盘空间比较小的镜像不好安放GRUB.EXE.  详情 回复 发表于 2014-12-27 15:20
有没有可能把GRUB4DOS做成类似IPXE那样的,可以一直存在于内存中,并且允许其它程序直接直接调用GRUB4DOS的功能. 就像最新的0.4.6a版本grub4dos,使用ipxe启动grldr之后还可以在grub4dos下直接使用ipxe的完整功能..  详情 回复 发表于 2014-12-27 15:18
回复

使用道具 举报

发表于 2014-12-27 15:18:21 | 显示全部楼层
不点 发表于 2014-12-27 14:47
在基本成功地贯通了 grub4dos 与 dos 之后,我有一个想法:我们使用 dos 的方式,应该发生一些变化。

原 ...

有没有可能把GRUB4DOS做成类似IPXE那样的,可以一直存在于内存中,并且允许其它程序直接直接调用GRUB4DOS的功能.

就像最新的0.4.6a版本grub4dos,使用ipxe启动grldr之后还可以在grub4dos下直接使用ipxe的完整功能..我觉得这个设计不错,ipxe扩展了PXE服务,虽然有一些不是很稳定,但是目前来说还是挺有用的.

点评

这当然有可能了。我之所以要想实现将 grub4dos 隐藏在扩展内存顶部,也正是因为想让 grub4dos 变成后台服务,与操作系统共存,需要时,呼出 grub4dos,不需要时,隐藏在幕后。 隐藏之后,int13 可以做得很大,里  详情 回复 发表于 2014-12-27 15:57
回复

使用道具 举报

发表于 2014-12-27 15:20:40 | 显示全部楼层
不点 发表于 2014-12-27 14:47
在基本成功地贯通了 grub4dos 与 dos 之后,我有一个想法:我们使用 dos 的方式,应该发生一些变化。

原 ...

这个功能稳定之后是不是可以考虑写一个DOS下的小程序让它可以实现返回GRUB4DOS而不是使用GRUB.EXE

必竟GRUB.EXE文件相对来说太大了,特别是一些磁盘空间比较小的镜像不好安放GRUB.EXE.

点评

是的,能够做到。但是我偷懒不想做了,所以就放在 grub.exe 里面了。 如果你或其他某个人愿意做的话,我支持。  详情 回复 发表于 2014-12-27 16:04
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-18 21:59

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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