中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区 » 在grub of dos中虚拟二个软驱的问题。
作者:
标题: 在grub of dos中虚拟二个软驱的问题。 上一主题 | 下一主题
Qlin
初级用户




积分 131
发帖 11
注册 2005-3-21
状态 离线
『楼 主』:  在grub of dos中虚拟二个软驱的问题。

因为一些原因要在grub of dos中虚拟二个软驱 ,过程如下。



map (hd0,0)/boot.flp (fd0)

map (hd0,0)/kern.flp (fd1)

chainloader (hd0,0)/boot.flp

chainloader (hd0,0)/kern.flp

rootnoverify (fd0)

boot



之后好像不行。还是不能读取 kern.flp ,请问要如何解决。。?



PS 。请问windows下有什么软件可以修改软驱镜像文件(*.flp)  ?? 谢谢







2005-3-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 2 楼』:  

chainloader 命令是决定用哪个引导扇区来引导操作系统,因此,chainloader 命令只能用一次才有效。如果该命令使用多次,则只有最后一次的才起作用,在此之前的那些 chainloader 命令都等于是废的。

对于磁盘仿真而言,这两条命令是正确的:

map (hd0,0)/boot.flp (fd0)
map (hd0,0)/kern.flp (fd1)

如果用 0.4.0 的版本,则可以加上 --mem 参数,来使用内存盘的仿真功能。

注意上述命令仅仅指定仿真的磁盘是 fd0 和 fd1,并未指定由哪个扇区来引导你的操作系统。根据你的文件名来猜测,你可能是要从 boot.flp 来引导,因此,你应该这样:

chainloader (hd0,0)/boot.flp
rootnoverify (fd0)
boot

这就应该好了。






因为我们亲手创建,这个世界更加美丽。
2005-3-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 3 楼』:  

不过还是要补充一点,在 版本 0.4.0 中,我们已经增加了两个非常重要的 map 命令参数:

map --floppies=M
map --harddrives=N

这两条命令指定 BIOS 所识别的软盘驱动器数目和硬盘驱动器的数目。对于你的情况,应当这样:

map (hd0,0)/boot.flp (fd0)
map (hd0,0)/kern.flp (fd1)
map --floppies=2
chainloader (hd0,0)/boot.flp
rootnoverify (fd0)
boot

其中 map --floppies=2 只要在 boot 之前即可,除此之外,没有其它要求,它可以放在最前面,也可以放在最后,这都没有错的。






因为我们亲手创建,这个世界更加美丽。
2005-3-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Qlin
初级用户




积分 131
发帖 11
注册 2005-3-21
状态 离线
『第 4 楼』:  

哈哈。。谢谢不点兄

2005-3-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Qlin
初级用户




积分 131
发帖 11
注册 2005-3-21
状态 离线
『第 5 楼』:  

请问关于
map --floppies=M
map --harddrives=N

这两条命令指定 BIOS 所识别的软盘驱动器数目和硬盘驱动器的数目。
有没有数目的限制。。? 比如说不能多于二个之类的。。? 谢谢。


2005-3-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Qlin
初级用户




积分 131
发帖 11
注册 2005-3-21
状态 离线
『第 6 楼』:  

不点兄。。跟据你的提示。我进行了如下操作。
map (hd0,0)/boot.flp (fd0)

map (hd0,0)/kern.flp (fd1)

chainloader (hd0,0)/boot.flp

rootnoverify (fd0)

boot
但好像还是不行。。不知是什么原因。。?? 谢谢。


2005-3-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 7 楼』:  

指定的软盘数目不可以超过2, 指定的硬盘数目不可以超过(我有点忘记了,大概是) 100 吧。

> 但好像还是不行。。不知是什么原因。。?? 谢谢。

“不行” 在哪个方面呢?是不能启动?还是什么别的毛病,你没有描述详细。

只要 boot 之后能够把控制权顺利交给 boot.flp 的引导代码,这就算是 GRUB for DOS的成功。至于说以后你引导的操作系统是 linux 或者 BSD 等,由于这些操作系统从 CPU实模式切换到保护模式,在此之后,这些操作系统就不再使用仿真了,因为它们不再使用 int13。

也就是说,一旦这类操作系统被引导成功,你就不再能访问我们的虚拟软盘了。只是在操作系统的引导过程中,也就是在操作系统获得控制之前的这段时间,我们的仿真还是起作用的。








因为我们亲手创建,这个世界更加美丽。
2005-3-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Qlin
初级用户




积分 131
发帖 11
注册 2005-3-21
状态 离线
『第 8 楼』:  

谢谢 不点 兄。
原来是这个样子啊。
我的理想情况是。 先从A 盘引导,然后再读取B盘的kern .
看来是不行了呢。。




2005-3-21 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 9 楼』:  

老兄用的可能是 BSD 吧。不管 LINUX 还是 BSD,目前都不支持实模式的 BIOS中断调用。但是,另一方面,保护模式确实是完全有可能支持实模式的中断调用的,这可以叫做“实模式兼容层”,win98 就有这种兼容层,因此win98 就可以顺利地访问到我们通过 int13 映射而得到的内存盘。注意 win98也是保护模式的操作系统。winNT/2K/XP/2003 同样都是保护模式的操作系统,所不同的是,它们去掉了实模式兼容层,也就是某个 DLL实模式兼容性驱动程序文件。假定有某个公司为 winNT/2K/XP/2003 写一个这样的驱动程序,那么 winNT/2K/XP/2003也能支持实模式的所有概念,包括从 winNT/2K/XP/2003 内部不用重启动 Windows 即可像 win98 那样进入 realmode DOS。只是由于微软故意不做,其它公司也不愿意费这个牛劲替它做罢了。

LINUX 和 BSD 的道理完全一样,在这些操作系统中本来不存在实模式兼容驱动,但是,完全可以为它们增加一个,当然了,这都是系统底层操作,会麻烦一些,然而这不存在实质的困难。

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

在目前的情况下,也许你稍作变通就可以躲过以上限制。比如说,你的全部文件都放在 A:盘上,A:盘本身做得很大,比如 2.88M,或者,如果不够用的话,干脆做 50M 或 1000M。经过 GRUB4DOS 仿真之后,A:盘的引导程序获得控制,这段引导程序把A:盘上的内核和initrd 都装入内存,这样,当内核获得控制时,根本不需要再读软盘了,因为软盘的全部数据(除了内核之外)都在 initrd中,这已经都在内存中了。BSD我没用过,但是我很清楚这个办法对 LINUX 是成功的。






因为我们亲手创建,这个世界更加美丽。
2005-3-22 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Qlin
初级用户




积分 131
发帖 11
注册 2005-3-21
状态 离线
『第 10 楼』:  

根据如上,我进行了下面的尝试。。
系统情况是。硬盘分有二个主分区,在grub中显示 第一个为 hd0, 0    第二个为 hd0,2
我把freebsd 的iso 文件解压到 第二个主分区(hd0,2)
我的相法是把第二个主分区虚拟成A盘,然后再从At盘启动,

然后进行了如下操作:
map (hd0,2)+1 (fd0)
chainloader (fd0)+1
rootnoverify (fd0)
boot

但是运行 chainloader (fd0)+1 后电脑会长鸣, 然后死机 。
请问我这样的做法是否有错。? 为什么不能成功。。? 谢谢。。


2005-3-22 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 11 楼』:  

你的分区的文件系统,如果不是 FAT/NTFS 这类微软格式的,是不能用你所用的分区仿真功能的。

你可以改为文件仿真功能:

map (hd0,2)+xxxxxxxx (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
boot

当 xxxxxxxx 为 1 时,是调用分区仿真功能,而当 xxxxxxxx 等于分区中的扇区总数时,则调用的是文件仿真功能。

另外你少掉了一条很重要的 map ---hook 命令。







因为我们亲手创建,这个世界更加美丽。
2005-3-22 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Qlin
初级用户




积分 131
发帖 11
注册 2005-3-21
状态 离线
『第 12 楼』:  

谢谢 不点 兄....问题解决了。。哈哈。。


2005-3-23 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: