硬盘驱动程功能简介.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
硬盘驱动程功能简介

硬盘驱动程序功能简介 对硬盘操作的I/O端口 对硬盘控制器的操作是通过I/O端口来进行的,这些端口分为两组,它们对应命令块寄存器(Command Block Registers)和控制块寄存器(Control Block Registers),如下表 表1.硬盘I/O端口及寄存器 组别 I/O端口 读时 写时 Primary Secondary Commad Block Register 1F0h 170h Data Data 1F1h 171h Error Feature 1F2h 172h Sector Count Sector Count 1F3h 173h LAB Low LAB Low 1F4h 174h LAB Mid LAB Mid 1F5h 175h LAB High LAB High 1F6h 176h Device Device 1F7h 177h Status Command Control Block Register 3F6h 376h Alternate Status Device Control 我们只需先往命令块寄存器(Commad Block Register)写入正确的值,在通过控制块寄存器(Control Block Register)发送命令就可以了。 硬盘的启动、打开 驱动程序收到DEV_OPEN消息之后调用hd_identify(),在这里我们改成了调用函数hd_oped()们这是新加的一个函数,它接受的参数即为设备的次设备号。在hd_oped()中,我们首先由设备次设备号得到驱动器号,由于我们的Bochs只定义了一个硬盘,所以这里的驱动器号一定是0。在程序中我们通过调用一系列函数结合DEV_OPEN消息完成硬盘的启动工作。 获取硬盘参数 驱动程序的作用在于隐藏硬件细节,向上层京城提供统一的接口。由于我们的进程通过收发消息相互通信,那么驱动程序的接口自然也是消息了。所以只要我们定义了驱动程序可以接收消息,也就定义了驱动程序的接口。为简单起见,我们先之定义一种消息:DEV_OPEN。可是硬盘驱动程序受到这个消息后干点什么呢?我们先来干点简单的工作:向硬盘驱动器发送IDENTIFY命令,到硬盘参数。向硬盘发送IDENTIFY命令很简单,只需要通过Device寄存器的第四位指定驱动器——0表示Master,1表示Slave——然后往Command寄存器写入十六进制ECh就可以。硬盘准备好参数之后,会产生一个中断,这时我们就可以通过Data寄存器读取数据了。参数有很多,总共是256个字,我们仅仅取出其中的几个值显示。 参数打印出来效果如图3.1下 图3.1 硬盘的分区 为什么要分区 其实可以直接利用整个硬盘的。但是,那样未免太浪费了。我们有个想法:就是将来将我们的这个操作系统装到自己的计算机上,虽然简陋了点,不过到时候稍微设置一下Grub,实现多引导,让我们的操作系统跟Linux,Windows等并存,岂不美哉?! 硬盘分区表其实是一个结构体数组,数组的每个成员是一个16字节的结构体,其构成如下表1.分区表结构 偏移 长度 描述 0 1 状态(80h=可引导,00h=不可引导,其他=不合法) 1 1 起始磁头号 2 1 起始扇区号(仅用低6位,高2位位起始柱面号的第8,9位) 3 1 起始柱面号的低8位 4 1 分区类型(System ID) 5 1 结束磁头号 6 1 结束扇区号(仅用低6位,高2位位结束柱面号的第8,9位) 7 1 结束柱面号的低8位 8 1 起始扇区的LBA 12 1 扇区数目 我们的文件系统最终是安装在扩展分区的第一个分区里 分区效果 这里我们把硬盘分为了五个分区即:PART_0、PART_1、PART_2、PART_3、PART_4 图3.2 引导扇区 这里有必要介绍一下引导扇区的概念。 硬盘的引导扇区是计算机启动时首先读取的扇区,它的主要功能是首先装入引导操作系统的扇区,然后将控制权转交给装入的引导操作系统的扇区,引导操作系统安装.它不属于任何操作系统,因此一般的命令等不能直接读取它,但在Windows DOS状态下运行DEBUG.EXE程序,并输入如下程序段,即可读取主引导扇区。硬盘的第一个扇区被保留为主引导扇区,它位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。至于分区表,很多人都知道,以80H或00

文档评论(0)

md85173 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档