中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: grub4dos 的问题,能解决吗 上一主题 | 下一主题
xingjia
新手上路





积分 10
发帖 3
注册 2006-4-6
状态 离线
『楼 主』:  grub4dos 的问题,能解决吗

我想通过pxe启动一个dos的软盘镜像,进入dos环境。在这个dos环境通过dos的ram disk虚拟出虚拟盘里。在这个虚拟盘中,放上linux的kernel和initrd。能通过grub4dos引导linux内核吗

2006-4-6 17:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fujianabc
金牌会员





积分 3467
发帖 1616
注册 2004-6-21
状态 离线
『第 2 楼』:  

grub最基本的功能就是引导linux内核,其他所有功能都是后来附加的。

2006-4-7 11:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xingjia
新手上路





积分 10
发帖 3
注册 2006-4-6
状态 离线
『第 3 楼』:  

问题是这样的,grub4dos读取linux内核都是从真实的硬盘和软盘上,root(hd*,*)。好像没有办法直接从dos的ram虚拟盘上读取内核文件

2006-4-7 14:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tinybit
初级用户





积分 137
发帖 57
注册 2005-9-29
状态 离线
『第 4 楼』:  

那得看你走运不走运了。由于软盘映像是在内存中,如果你在进入 GRUB  之后还能在内存中找到该映像、并且最好该映像在内存中也是连续的,那就能够成功;否则,恐怕得另想办法。

现在可以肯定的是,你的软盘中的所有扇区都在内存中了,你用 (md)XXXXXX+XXXXXX的格式可以访问内存中的扇区序列(XXXXXX 需要你填入合适的值):

map (md)XXXXXX1+YYYYYY1,XXXXXX2+YYYYYY2,XXXXXX3+YYYYYY3 (fd0)
map --hook

这样就可以访问软盘中的文件了。

不过困难在于确定 XXXXXX 的值,需要你手动操作决定,挺麻烦的。

所以建议你的从 PXE 中执行的软盘映像直接采用 GRUB 引导软盘,也就是说,软盘的引导扇区直接就采用 GRLDR 的引导扇区(用bootlace 命令可以建立这样的软盘引导扇区),说的更清楚一点,这个软盘不含DOS,你始终不要有进入 DOS 的步骤。这样,当 GRUB 获得控制时,GRUB 可以访问你从 PXE 传递过来的软盘,其实它就是 (fd0) 了。如此一来,你软盘上的任何内容,都可以方便地在 GRUB 下操作了(你甚至无需再使用map命令了)。

如果后一种办法不适合你的口味,那么你仍然可以考虑改造前一种办法。你在 DOS 下生办法把整个软盘映像放置到内存中某个固定的、连续的区域,比如放置在物理地址 0x400000 也就是 4M 的位置,然后进入GRUB,并用

map (md)0x2000+2880 (fd0)
map --hook

来仿真,这就 OK 了。解释一下:0x2000 乘以扇区大小 0x200 就是 0x400000
2880 表示软盘的总扇区数。

2006-4-7 15:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xingjia
新手上路





积分 10
发帖 3
注册 2006-4-6
状态 离线
『第 5 楼』:  

非常感谢tinybit的回复
你说的第二种方案确实无法满足我的需要,我必须先从PXE启动dos,在dos中进行一些其它操作,然后转入linux。
原来是使用loadlin来做的,但loadlin对kernel/initrd的大小都有限制,所以想尝试grub4dos
我会按照你说的第一种方案试验
再次感谢

2006-4-7 16:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tinybit
初级用户





积分 137
发帖 57
注册 2005-9-29
状态 离线
『第 6 楼』:  

既然你有此特殊要求,如果可能的话,我也可以考虑让 GRUB.EXE 在启动一开始的时候,就把 DOS 的软盘复制到一块连续的区域。用 int13 读取 DOS 内存盘的内容,然后写入扩展内存,并保证解决好互相覆盖的问题。不过目前没有时间顾及这个,等以后再说吧(这可能拖到很晚,几个月,一年,都说不定)。目前你自己先想办法凑合着用。

2006-4-7 18:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: