首先区分MBR EBR OBR
图中可以看出 硬盘开头有一个MBR称为主引导扇区 然后是几个主分区,最多是4个主分区。MBR中有个64字节大小的分区表,一共是4个表项
MBR的组成:
446byte的引导程序 64byte的分区表 0x55aa魔数
对硬盘的操作主要是通过两种寄存器,一个通道上的Master和Slave盘都可以通过同一个寄存器进行操作
Command Block Registers 和Control Block Registers
其中的device寄存器和status寄存器分别为:
所以在对硬盘进行操作时,可以通过对端口上寄存器的读写来进行
第13章对硬盘进行分区表,在文件ide.h的开头就是定义了一批宏 分别为
#define reg_data(channel) (channel->port_base + 0)
#define reg_error(channel) (channel->port_base + 1)
#define reg_sect_cnt(channel) (channel->port_base + 2)
#define reg_lba_l(channel) (channel->port_base + 3)
#define reg_lba_m(channel) (channel->port_base + 4)
#define reg_lba_h(channel) (channel->port_base + 5)
#define reg_dev(channel) (channel->port_base + 6)
#define reg_status(channel) (channel->port_base + 7)
#define reg_cmd(channel) (reg_status(channel))
#define reg_alt_status(channel) (channel->port_base + 0x206)
#define reg_ctl(channel) reg_alt_status(channel)
对应的就是Command Block Registers 这批寄存器 channel->port_base对应的分别是0x1f0和0x170
这样就可以直接通过inb outb 等函数对寄存器进行读写,从而控制硬盘