中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS启动盘 & LOGO技术 (启动盘室) » chainloader (hd1)+1 =chainloader (hd1,0)+1
作者:
标题: chainloader (hd1)+1 =chainloader (hd1,0)+1 上一主题 | 下一主题
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『楼 主』:  chainloader (hd1)+1 =chainloader (hd1,0)+1

在DOS WINDOWS系列中,引导时读入内存000:7C00出的应该就是DBR(DOS BOOT RECORD,系统分区的引导扇区,就是用他来引导即将装入的操作系统的,位于逻辑0扇区),不可能是MBR,他们性质完全不同的
上面的 chainloader (hd1)+1 ,grub程序会按照chainloader (hd1,0)+1 来执行的
至于MBR,既然用了MAP,程序会把第二硬盘的MBR当作第一硬盘的MBR来读的,读完MBR后,再读通过chainloader (hd1,0)+1 装入的DOS引导扇区的,然后在找IO.SYS(DOS)或NTLDR(NT)



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

不甘寂寞的人


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

怎么,新开了一个帖子啊?

(hd1)+1只代表某个硬盘的MBR,不代表别的。GRUB装入(hd1)+1之后,就把控制权交给这段 MBR 程序,引导 (hd1,0) +1的是 MBR 中的程序代码的功能,不是 GRUB 的功能。也就是说,微软的 MBR 自动链式引导 DBR,其它种类的 MBR的功能也类似,都是引导分区中的某个代码片段。你查看 MBR 的汇编代码就知道了,网上可以找到微软 MBR 的带注释的汇编代码。

MBR占据 0000:7c00,但是它接管控制开始执行的时候,把自己移动到 0000:0600,然后把 DBR 装入到0000:7c00,就像 BIOS 所做的那样。所以,你跳过 MBR 直接装入 DBR 也可以。虽然结果都是引导了DOS,但是,这个概念是不同的。装入 MBR 就可以自动引导 DBR,这是 MBR 的功能,GRUB不是装入了两个引导代码。它只需要装入一个,不管哪个装入了,都能引导 DOS。




因为我们亲手创建,这个世界更加美丽。
2004-12-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 3 楼』:  

因为网速原因,新开贴了哦,是这样的?那是我理解不深,臆断了,不好意思。。那么这样的话,在用MAP把两硬盘对调影射之后:再加上开机后已经读过了MBR,就应该用GRUB的功能直接装入DBR不就行了?象这样:chainloader (hd0,0)+1照你说的,装入MBR也行chainloader (hd0)+1, 但这样不就多了一道工序了吗?在GRUB的说明中,也是直接装入DBR的

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

不甘寂寞的人


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

微软的 MBR 会查找激活的分区,自动装入该分区的引导代码。但是,当我们用 GRUB 或者 lilo 覆盖微软的 MBR之后,就不一定按照微软的方式来启动操作系统了。比如说,lilo 和 GRUB 都把微软的激活标志忽略掉,它不管分区是否激活,它只管 lilo以及 grub 的配置文件 lilo.conf 或者 menu.lst ,按照配置文件的设置来启动相应的操作系统。

当 MBR 中的引导代码不再是微软的 MBR 代码(比如是 lilo 或 grub)时,我们就不能再用 chainloader (hd0)+1来引导 DOS 了,实际上,这样做就会又重新引导 lilo 或者 GRUB 本身,因为 LILO 或 GRUB 就驻留在 MBR。这时候要引导DOS 就只有用 chainloader (hd0,0)+1 这样的方式了。

如果 MBR 仍然是微软的,GRUB 装在某个分区,比如某个 linux 分区,或者通过 BOOT.INI 引导了 GRUB,也或者 通过DOS 引导了 grub.exe,这时候还可以用 chainloader (hd0)+1 来引导 MBR 了,微软的 MBR会按部就班地查找激活的分区并试图引导其中的操作系统(通常是 DOS或windows)。

如果你知道 (hd0,0) 分区装的正好是你要引导的系统,那么,你当然可以直接用 chainloader (hd0,0)+1来引导它了。但是,注意该分区所安装的操作系统不一定是你想要引导的,或者甚至根本就没有安装操作系统,这时候用 chainloader(hd0)+1就比较傻瓜化,比较安全。这不是多一道工序或者少一道工序的问题,这是一个“何时该用何种方法”的问题。对于每秒上亿次的计算机运算速度而言,这多一道工序和少一道工序,人是感觉不到差别的。有了这两道工序,对于人来说,可选择性增强了,方便了,可以按需定制了。

GRUB 说可以直接装入 DBR,但也没说不可以装入 MBR。其实 chainloader 还可以装入一个事先备份的 512 字节的文件,也就是说,它可以把任何东西放到 0000:7c00 去执行,非常灵活,只要使用者愿意,他想怎么用就怎么用。




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

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


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



论坛跳转: