



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
硬盘驱动程序功能简介1.1 对硬盘操作的I/O端口对硬盘控制器的操作是通过I/O端口来进行的,这些端口分为两组,它们对应命令块寄存器(Command Block Registers)和控制块寄存器(Control Block Registers),如下表表1.硬盘I/O端口及寄存器组别I/O端口读时写时PrimarySecondaryCommad Block Register1F0h170hDataData1F1h171hErrorFeature1F2h172hSector CountSector Count1F3h173hLAB LowLAB Low1F4h174hLAB MidLAB Mid1F5h175hLAB HighLAB High1F6h176hDeviceDevice1F7h177hStatusCommandControl Block Register3F6h376hAlternate StatusDeviceControl我们只需先往命令块寄存器(Commad Block Register)写入正确的值,在通过控制块寄存器(Control Block Register)发送命令就可以了。1.2 硬盘的启动、打开驱动程序收到DEV_OPEN消息之后调用hd_identify(),在这里我们改成了调用函数hd_oped()们这是新加的一个函数,它接受的参数即为设备的次设备号。在hd_oped()中,我们首先由设备次设备号得到驱动器号,由于我们的Bochs只定义了一个硬盘,所以这里的驱动器号一定是0。在程序中我们通过调用一系列函数结合DEV_OPEN消息完成硬盘的启动工作。1.3 获取硬盘参数驱动程序的作用在于隐藏硬件细节,向上层京城提供统一的接口。由于我们的进程通过收发消息相互通信,那么驱动程序的接口自然也是消息了。所以只要我们定义了驱动程序可以接收消息,也就定义了驱动程序的接口。为简单起见,我们先之定义一种消息:DEV_OPEN。可是硬盘驱动程序受到这个消息后干点什么呢?我们先来干点简单的工作:向硬盘驱动器发送IDENTIFY命令,到硬盘参数。向硬盘发送IDENTIFY命令很简单,只需要通过Device寄存器的第四位指定驱动器0表示Master,1表示Slave然后往Command寄存器写入十六进制ECh就可以。硬盘准备好参数之后,会产生一个中断,这时我们就可以通过Data寄存器读取数据了。参数有很多,总共是256个字,我们仅仅取出其中的几个值显示。参数打印出来效果如图3.1下 图3.11.4 硬盘的分区1.4.1 为什么要分区其实可以直接利用整个硬盘的。但是,那样未免太浪费了。我们有个想法:就是将来将我们的这个操作系统装到自己的计算机上,虽然简陋了点,不过到时候稍微设置一下Grub,实现多引导,让我们的操作系统跟Linux,Windows等并存,岂不美哉?!硬盘分区表其实是一个结构体数组,数组的每个成员是一个16字节的结构体,其构成如下表1.分区表结构偏移长度描述01状态(80h=可引导,00h=不可引导,其他=不合法)11起始磁头号21起始扇区号(仅用低6位,高2位位起始柱面号的第8,9位)31起始柱面号的低8位41分区类型(System ID)51结束磁头号61结束扇区号(仅用低6位,高2位位结束柱面号的第8,9位)71结束柱面号的低8位81起始扇区的LBA121扇区数目我们的文件系统最终是安装在扩展分区的第一个分区里1.4.2 分区效果这里我们把硬盘分为了五个分区即:PART_0、PART_1、PART_2、PART_3、PART_4 图3.21.4.3 引导扇区这里有必要介绍一下引导扇区的概念。硬盘的引导扇区是计算机启动时首先读取的扇区,它的主要功能是首先装入引导操作系统的扇区,然后将控制权转交给装入的引导操作系统的扇区,引导操作系统安装它不属于任何操作系统,因此一般的命令等不能直接读取它,但在Windows DOS状态下运行DEBUGEXE程序,并输入如下程序段,即可读取主引导扇区。硬盘的第一个扇区被保留为主引导扇区,它位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。至于分区表,很多人都知道,以80H或00H为开始标志,以55AAH为结束标志,共64字节,位于本扇区的最末端。 大致的结构如图3.2所示图3.3硬盘主引导扇区 = 硬盘主引导记录(MBR) + 硬盘分区表(DPT)用FDISK 进行硬盘分区时产生的, 它属于整个硬盘而不属于某个独立的DOS 分区, 是硬盘正确引导和使用的必要条件。物理位置:0柱面0磁头1扇区(Cylinder 0, Head 0, Sector 1) 系统扇区(System Secotrs): 0C-0H-2S,0C-0H-63S, 共 62 Sectors 大小:512字节其中:MBR 446字节(0000-01BD),DPT 64字节(01BE-01FD),结束标志2字节(55 AA)功能:MBR通过检查DPT分区信息引导系统跳转至DBR详解: (DEBUG -A: MOV AX,0201 MOV BX,0200 MOV CX,0001 MOV DX,0080 INT 13) 000H-08AH MBR启动程序(寻找开机分区) 08BH-0D9H MBR启动字符串 0DAH-1BCH 保留( 0 ) 1BEH-1FDH 硬盘分区表 1FEH-1FFH 结束标志(55AA)硬盘DBR(操作系统引导记录区),它通常位于硬盘的0磁道1柱面1扇区,是操作系统可以直接访问的第一个扇区,它包括一个引导程序和一个被称为BPB(Bios Parameter Block)的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区根目录前两个文件是不是操作系统的引导文件(以DOS为例,即是IO.sys 和Msdos.sys)。如果确定存在,就把其读入内存,并把控制权交给该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元的大小等重要参数。1.5 硬盘的关闭(处理DEV_CLOSE消息)硬盘的关闭与打开类似,使用的是硬盘支持的五种消息出来,DEV_CLOSE消息是其中的一种,驱动程序收到DEV_CLOSE消息之后调用hd_identify(),在这里我们改成了调用函数hd_close()们这是新加的一个函数。1.6 硬盘驱动程序主循环这里我把我们硬盘驱动程序的主循环的程序给大家分享。需要说明的是我们的程序是基于消息机制的,通过发送消息与处理消息实现需要的功能。至于消息机制是如何实现的不是本文讨论的内容。PUBLIC void task_hd()MESSAGE msg;init_hd();while (1) send_recv(RECEIVE, ANY, &msg);int src = msg.source;switch (msg.type) case DEV_OPEN:hd_open(msg.DEVICE);break;case DEV_CLOSE:hd_close(msg.DEVICE);break;case DEV_READ:case DEV_WRITE:hd_rdwt(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全教育知识培训方案课件
- 农业无人机租赁平台运营模式创新与竞争力提升研究
- 农业废弃物资源化利用项目技术改造路径研究报告
- 理财行业面试题库及答案
- 农业产业强镇资金申请报告:2025年政策导向与产业协同发展
- 农业产业园项目2025年市场机会分析与效益评估报告
- 婴幼儿配方食品营养配方优化与婴幼儿听力保护研究报告
- 太阳能光伏发电技术前瞻研究报告
- 安全教育培训记录与监理课件
- 新能源行业2025年危机公关法律法规解读
- 物流消防应急预案
- 2024-2030年中国汽车焊装设备行业竞争格局及未来前景预测报告
- 城镇污泥标准检验方法CJT221-2023 知识培训
- 我们爱劳动(课件)一年级上册劳动苏科版
- 2024年新青岛版(六三制)五年级上册科学全册知识点(新修改)
- 《中国近现代史纲要》课件-第一章
- 就业心理准备与心理调适-课件
- 小学三年级数学口算天天练A4纸直接打印
- 事业单位个人简历表格(模板)
- 微商心态分享课程
- 农商行年度工作总结
评论
0/150
提交评论