中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: usb-hdd模式的u盘被识别为软盘初探 上一主题 | 下一主题
yaya
银牌会员





积分 1009
发帖 353
注册 2003-9-4
状态 离线
『楼 主』:  usb-hdd模式的u盘被识别为软盘初探

u盘格式化为usb-hdd,启动时主板一般识别为硬盘,分配盘符c。但是有的主板会识别为软盘,分配盘符a。这两种情况都能正常启动。

我们知道,硬盘的0-0-1(或逻辑扇区0)是主引导记录MBR,内含分区表。间隔3f扇区(隐含扇区数)即0-1-1(或逻辑扇区3f)是启动扇区DBR,内含BPB参数。启动硬盘时,首先加载主引导记录,然后由主引导记录再加载启动扇区。启动程序查找引导文件(io.sys、ntldr或grldr等)时,要计算文件分配表、目录区、数据区扇区的起始位置(CHS或LBA),此时要用到隐含扇区数(3F)这个参数。执行读操作int13/02(或42)时,把磁盘的物理驱动器号80赋给dl。

而软盘的0-0-1(或逻辑扇区0)是启动扇区DBR,内含BPB参数。启动软盘时,直接加载启动扇区。启动程序查找引导文件(io.sys、ntldr或grldr等)时,也要计算文件分配表、目录区、数据区扇区的起始位置(CHS或LBA),此时要用到隐含扇区数(00)这个参数。执行读操作int13/02(或42)时,把磁盘的物理驱动器号00赋给dl。

这就产生了疑问。u盘格式化为usb-hdd,其BPB参数的磁盘物理驱动器号是80(偏移7C24处),隐含扇区数是00 00 00 3F(偏移7C1C处),此时按硬盘正常启动可以理解。而按软盘启动,本应该赋给dl的00成了80,隐含扇区数00成了3F,怎么会正确地找到引导文件?

为了探明这个奥秘,编了一段测试代码,经探测后发现:
    1.启动后首先加载启动扇区到7C00,为0-0-1(或逻辑扇区0),看不到主引导记录。
    2.修改7C24处为00(磁盘物理驱动器号),修改7C1C处为00 00 00 00(隐含扇区数)。(修改内存,不是u盘!)
    3.然后从7C00处开始执行启动代码。
原来是主板修改了BPB参数,所以能正确地找到引导文件,成功启动。

另外探测到:BIOS加载0-0-1(对于硬盘是主引导记录,对于软盘是启动扇区)时,dl代入的参数是磁盘物理驱动器号,u盘被识别为硬盘时DX=0080,被识别为软盘时DX=0000。
                  BIOS加载0-1-1(u盘被识别为硬盘时)时,DX=0180。

u盘格式化为usb-hdd被主板识别为软盘,好处是不占用盘符c,对安装操作系统有好处。提醒:如果u盘分为2个分区,另一个分区会分配盘符c!

u盘格式化为usb-hdd被主板识别为软盘,此时用bootlace.com安装grub4dos,不能在识别为硬盘时正常启动,需修改启动扇区:
    1.用WinHex打开磁盘;
    2.将7E1C处00改为3F,将7E24处00改为80,将7E54处89改为8B。
    3.修改grldr,把文件末尾菜单中的‘--ignore-floppies ’全删除。
或者在被主板识别为硬盘的电脑上用bootlace.com安装grub4dos.

[ Last edited by yaya on 2008-9-12 at 04:10 PM ]

   此帖被 +3 点积分     点击查看详情   
评分人:【 fujianabc 分数: +3  时间:2008-9-12 10:23


2008-9-11 10:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fujianabc
金牌会员





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

分析的不错,有深度。

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

不甘寂寞的人


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

yaya,你做得很棒。如果你能够加入 grub4dos 的开发,估计很多人都高兴。



因为我们亲手创建,这个世界更加美丽。
2008-9-12 10:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yaya
银牌会员





积分 1009
发帖 353
注册 2003-9-4
状态 离线
『第 4 楼』:  

不点过奖了。对于dos的了解我还很肤浅,对于grub4dos只是初步涉及,自认为不够做1名grub4dos开发者。不过如果能为grub4dos的开发做1点力所能及的事,本人乐于奉献。

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

不甘寂寞的人


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

yaya,你对汇编语言很熟悉,对引导扇区和引导过程也都比较了解。因此我觉得你参加 grub4dos 的开发是最合适的。即使你不参加grub4dos,你也该加入其它某个启动软件的开发。不如你就加入 grub4dos 吧,或者你再观察了解一个时期以后再做决定。grub4dos 需要你这样的人。你可以先以非正式的身份加入,做些准备工作,提交一些补丁之类的。在你以后确信自己有时间或者有意愿的情况下,再正式加入。开发 grub4dos,没有任何压力,我就是这种感觉。所以,我们的主要精力就完全集中于:如何把 grub4dos 设计得更好?

忘了说了,yaya,你的名字很好,很大气的,我很欣赏这个名字。当初我这个名字起得有些随意了,现在不满意。

[ Last edited by 不点 on 2008-9-13 at 11:47 AM ]



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

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


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



论坛跳转: