多谢WINDRV及不点!!
WINDRV的方法还没有测试。等测试之后再回答。
不点:
其实我要用GRUB的主要目的,就是GRUB能恢复被DOS污染了的BIOS环境。还原到一个真实的BIOS环境。因为我要启动的程序,可能就是基于BIOS上运行的(而不是基于DOS上运行的)。然而,我的电脑是无盘,必须先从网卡ROM启动,而网卡ROM的代码也会污染BIOS环境的。
我的设想是这样:用网卡ROM启动无盘电脑,启动无盘DOS,在DOS下加载网卡驱动后,把我需要启动的sys.img下载到DOS中的虚拟内存盘中(XMSDSK虚拟出来的内存盘)。然后,我用一个DOS程序来退出网卡ROM的代码,这个程序是现成的,已经过测试的。
此时,无盘机的状态是:已启动了DOS,DOS文件放成内存盘(XMSDSK虚拟出来的)中,而且这个DOS是个相对干净的DOS,(因为网卡启动代码已被我的退出程序退出了).这时DOS中也已经没有网卡启动代码所虚拟出来的A盘了。
在这种情况下,我需要用GRUB,来调用DOS内存虚拟盘中的sys.img,模拟启动。
不点:要是你有时间,可以有环境测试的,这样:你用有盘启动一个DOS,并具加载XMSDSK,让它模拟一个DOS内存虚拟盘,然后你拷一个FLOPPY.IMG到这个内存盘中。这样环境就好了,现在要做的是:
1:编个DOS程序,把XMSDSK内存盘里的FLOPPY.IMG推到你指定的物理内存之中。
2:把你刚才指定的物理内存虚拟成一个硬盘并告诉BIOS
3:用GRUB调用这个刚生成硬盘,并从它启动。或者调用这个里面的FLOPPY.IMG并启动。
4:完成。
也就是说,我的要求与是不是曾经用无盘启动芯片启动过无关,因为我可以在DOS中,把启动芯片程序退出来,就相当于没有用过无盘启动一样。
例如,我用启动光盘启动了一个DOS,此时会生成一个虚拟的A盘,同时,我又加载XMSDSK,生成一个虚拟的DOS内存盘,之后,假设我运行一个DOS程序,把启动光盘的控制代码退出,启动光盘所生成的虚拟A盘自然就消失了。这时,我的电脑就相当于是正常有盘启动一样,相当于不曾用光盘启动过。在这种情况下,我还需要用GRUB,来调用DOS内存盘(xmsdsk生成的)里的FLOPPY.IMG。但是,GRUB无法指向DOS的内存虚拟盘,GRUB不支持MAP J:\FLOPPY.IMG (FD0) 这个格式,所以,我们需要用另外的程序,把这个内存盘里的FLOPPY.img推到我们指定的物理内存段中,然后再把这个物理内存段虚拟成硬盘并从它启动。或者调用这个里面的FLOPPY.IMG再启动。---------当然这只是一个例子,事实上我们没有一个把启动光盘的控制代码退出的程序,但是我们有把启动芯片的控制代码退出的程序。
WINDRV的方法还没有测试。等测试之后再回答。
不点:
其实我要用GRUB的主要目的,就是GRUB能恢复被DOS污染了的BIOS环境。还原到一个真实的BIOS环境。因为我要启动的程序,可能就是基于BIOS上运行的(而不是基于DOS上运行的)。然而,我的电脑是无盘,必须先从网卡ROM启动,而网卡ROM的代码也会污染BIOS环境的。
我的设想是这样:用网卡ROM启动无盘电脑,启动无盘DOS,在DOS下加载网卡驱动后,把我需要启动的sys.img下载到DOS中的虚拟内存盘中(XMSDSK虚拟出来的内存盘)。然后,我用一个DOS程序来退出网卡ROM的代码,这个程序是现成的,已经过测试的。
此时,无盘机的状态是:已启动了DOS,DOS文件放成内存盘(XMSDSK虚拟出来的)中,而且这个DOS是个相对干净的DOS,(因为网卡启动代码已被我的退出程序退出了).这时DOS中也已经没有网卡启动代码所虚拟出来的A盘了。
在这种情况下,我需要用GRUB,来调用DOS内存虚拟盘中的sys.img,模拟启动。
不点:要是你有时间,可以有环境测试的,这样:你用有盘启动一个DOS,并具加载XMSDSK,让它模拟一个DOS内存虚拟盘,然后你拷一个FLOPPY.IMG到这个内存盘中。这样环境就好了,现在要做的是:
1:编个DOS程序,把XMSDSK内存盘里的FLOPPY.IMG推到你指定的物理内存之中。
2:把你刚才指定的物理内存虚拟成一个硬盘并告诉BIOS
3:用GRUB调用这个刚生成硬盘,并从它启动。或者调用这个里面的FLOPPY.IMG并启动。
4:完成。
也就是说,我的要求与是不是曾经用无盘启动芯片启动过无关,因为我可以在DOS中,把启动芯片程序退出来,就相当于没有用过无盘启动一样。
例如,我用启动光盘启动了一个DOS,此时会生成一个虚拟的A盘,同时,我又加载XMSDSK,生成一个虚拟的DOS内存盘,之后,假设我运行一个DOS程序,把启动光盘的控制代码退出,启动光盘所生成的虚拟A盘自然就消失了。这时,我的电脑就相当于是正常有盘启动一样,相当于不曾用光盘启动过。在这种情况下,我还需要用GRUB,来调用DOS内存盘(xmsdsk生成的)里的FLOPPY.IMG。但是,GRUB无法指向DOS的内存虚拟盘,GRUB不支持MAP J:\FLOPPY.IMG (FD0) 这个格式,所以,我们需要用另外的程序,把这个内存盘里的FLOPPY.img推到我们指定的物理内存段中,然后再把这个物理内存段虚拟成硬盘并从它启动。或者调用这个里面的FLOPPY.IMG再启动。---------当然这只是一个例子,事实上我们没有一个把启动光盘的控制代码退出的程序,但是我们有把启动芯片的控制代码退出的程序。


