注册 登录
编程论坛 操作系统内核开发

求助,关于获取硬盘容量大小。

malpower 发布于 2010-07-12 00:07, 4775 次点击
今天开始设计并实现一个文件系统,但设计完了以后遇到一个问题,在google找了好一会儿都没有找到相关的资料。
我的内核现在需要获取硬盘的扇区数,用来建立扇区分配表。
但是不知道如何获取硬盘的扇区数。
我希望进入了保护模式后再获取扇区数。
所以不用介绍bios的中断调用了。
特向大虾们求教。
以解答为盼,谢谢。
4 回复
#2
chengstone2010-07-12 08:10
我想知道你为什么不在实模式下获取?
#3
chengstone2010-07-12 10:01
中断向量表中,INT 0x41的中断向量位置(4*0x41=0x0000:0x0104)存放的并不是中断程序的地址,二是第一个硬盘的基本参数表。对于100%兼容的BIOS来说,这里存放着硬盘参数表阵列的首地址F000h:E401h。第二个硬盘的基本参数表入口地址存于INT 0x46中断向量中。

硬盘基本参数信息表
┏━━┳━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓
┃位移┃大小  ┃说明                                          ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x00┃字    ┃柱面数                                        ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x02┃字节  ┃磁头数                                        ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x03┃字    ┃开始减小写电流的柱面(仅PC XT使用,其他为0)  ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x05┃字    ┃开始写前预补偿柱面号(乘4)                   ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x07┃字节  ┃最大ECC猝发长度(仅XT使用,其他为0)          ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x08┃字节  ┃控制字节(驱动器步进选择)                    ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x09┃字节  ┃标准超时值(仅XT使用,其他为0)               ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x0A┃字节  ┃格式化超时值(仅XT使用,其他为0)             ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x0B┃字节  ┃检测驱动器超时值(仅XT使用,其他为0)         ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x0C┃字    ┃磁头着陆(停止)柱面号                        ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x0E┃字节  ┃每磁道扇区数                                  ┃
┣━━╋━━━╋━━━━━━━━━━━━━━━━━━━━━━━┫
┃0x0F┃字节  ┃保留                                          ┃
┗━━┻━━━┻━━━━━━━━━━━━━━━━━━━━━━━┛
#4
chengstone2010-07-12 10:02
个人感觉既然BIOS已经提供了这个参数表 为什么不拿来用呢?
#5
malpower2010-07-12 14:51
谢大哥,我将把此部分内容写如boot程序。
1