1.一种ahci模式下访问硬盘的方法,其特征在于包括以下步骤:
s100:判断硬盘的工作模式是否为ahci模式,如果是,执行步骤s200,否则,结束流程:
s200:获取pci配置空间,并获取各个基地址寄存器的值;
s300:获取ahci空间的入口地址;
s400:获取各个硬盘端口的内存空间的起始地址;
s500:寻址当前硬盘端口的内存空间,读取当前硬盘端口的内存空间的前八个字节的内容作为命令列表基地址,读取第0x39至0x3c字节的内容作为命令槽忙闲指示;
s600:获取并解析各个命令槽;
s700:获取并解析命令表基地址的内容,确定命令封装区、数据项的操作地址及所操作数据的字节长度;
s800:确定空闲命令槽:读取命令槽忙闲指示的各比特位,根据各比特位的值确定空闲的命令槽;
s900:选用空闲命令槽并重新设置命令槽忙闲指示,访问当前硬盘并验证访问成功。
2.根据权利要求1所述的一种ahci模式下访问硬盘的方法,其特征在于,所述寄存器的值及内存空间的值均以小端格式存储。
3.根据权利要求1所述的一种ahci模式下访问硬盘的方法,其特征在于,所述步骤s400中,每一硬盘端口的内存空间的字节长度为n,第一个硬盘端口的起始地址为所述入口地址+偏移量,之后的每一硬盘端口的起始地址为前一个硬盘端口的结束地址+1,各个硬盘端口的内存空间顺序排列,其中,硬盘端口数量不大于32,n为不小于0x40的正整数。
4.根据权利要求3所述的一种ahci模式下访问硬盘的方法,其特征在于,所述偏移量为0x100,所述硬盘端口数量为32,n为0x80。
5.根据权利要求1所述的一种ahci模式下访问硬盘的方法,其特征在于,所述步骤s600包括以下步骤:
s601:寻址当前命令列表基地址,以当前所寻址地址为起始地址,以0x20个字节为一组,依次表示第1至第32个命令槽;
s602:设置各个命令槽的第1至第2字节的内容作为硬盘的访问类型,设置命令槽的第3至第4字节的内容作为数据项个数,设置命令槽的第5至第8字节的内容作为读取/写入的字节数,设置命令槽的第9至第16字节的内容作为命令表基地址。
6.根据权利要求1所述的一种ahci模式下访问硬盘的方法,其特征在于,所述步骤s900包括以下步骤:
根据所选用的空闲命令槽,将当前硬盘端口的内存空间的第0x39至0x3c字节的内容中的命令槽忙闲指示的对应比特位置1,访问当前硬盘并验证根据所选用的空闲命令槽对当前硬盘的访问成功。