CN110874297B - 数据访问方法、装置和主机 - Google Patents
数据访问方法、装置和主机 Download PDFInfo
- Publication number
- CN110874297B CN110874297B CN201911122401.3A CN201911122401A CN110874297B CN 110874297 B CN110874297 B CN 110874297B CN 201911122401 A CN201911122401 A CN 201911122401A CN 110874297 B CN110874297 B CN 110874297B
- Authority
- CN
- China
- Prior art keywords
- target
- access
- hba
- port
- command
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2205—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
- G06F11/221—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test buses, lines or interfaces, e.g. stuck-at or open line faults
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2273—Test methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/25—Testing of logic operation, e.g. by logic analysers
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明的实施例涉及硬盘测试技术领域,提供了一种数据访问方法、装置和主机,所述方法包括:接收访问请求;基于访问请求确定与目标硬盘电连接的目标HBA;对目标HBA进行初始化,并获取目标HBA的控制权;对目标端口进行初始化,使目标端口处于可接收并可处理命令的状态;依据访问参数生成与访问请求对应的访问命令并将访问命令发送目标端口;通过目标HBA控制目标端口执行访问命令,以对目标硬盘执行访问命令。与现有技术相比,本发明实施例能够避免因windows或者linux操作系统对大数据块的拆分,实现对待测试硬盘的大数据块的访问。
Description
技术领域
本发明涉及硬盘测试技术领域,具体而言,涉及一种数据访问方法、装置和主机。
背景技术
现有技术对于硬盘测试时,在运行有windows或者linux操作系统的主机上安装读写软件,通过读写软件对待测试的硬盘进行数据访问。在这种情况下,访问待测试硬盘中数据的访问命令首先会经过windows或者linux操作系统处理,然后再发往硬盘上。为了保证主机整体的使用性能,windows或者linux操作系统会将待访问的数据首先拆分为小数据块,按照拆分后的小数据块进行传输,从而完成对待访问的数据的访问。
对硬盘进行测试时,通常需要以大数据块的形式对硬盘进行访问,而现有技术因windows或者linux操作系统对大数据块的拆分而无法支持对待测试硬盘的大数据块的访问。
发明内容
本发明实施例的目的在于提供了一种数据访问方法、装置和主机,基于磁盘操作系统DOS(Disk Operation System,DOS)操作系统实现对待测试硬盘的大数据块的访问。
为了实现上述目的,本发明实施例采用的技术方案如下:
第一方面,本发明实施例提供一种数据访问方法,应用于主机,主机包括至少一个外设部件互联PCI总线,每一PCI总线与至少一个主机总线适配器HBA电连接,每一HBA包括至少一个端口,HBA通过至少一个端口与至少一个硬盘电连接,主机运行有DOS操作系统,所述方法包括:接收访问请求,其中,访问请求包括端口中的目标端口、以及访问与目标端口对应电连接的目标硬盘中的数据的访问参数;基于访问请求确定与目标硬盘电连接的目标HBA;对目标HBA进行初始化,以获取目标HBA的控制权;对目标端口进行初始化,使目标端口处于可接收并处理命令的状态;依据访问参数生成与访问请求对应的访问命令并将访问命令发送至目标端口;通过目标HBA控制目标端口执行访问命令,以对目标硬盘执行数据命令。
第二方面,本发明实施例提供一种数据访问装置,应用于主机,主机包括至少一个外设部件互联PCI总线,每一PCI总线与至少一个主机总线适配器HBA电连接,每一HBA包括至少一个端口,HBA通过至少一个端口与至少一个硬盘电连接,主机运行有DOS操作系统,所述装置包括接收模块、处理模块和执行模块。其中,接收模块,用于接收访问请求,其中,访问请求包括端口中的目标端口、以及访问与目标端口对应电连接的目标硬盘中的数据的访问参数;处理模块,用于基于访问请求确定与目标硬盘电连接的目标HBA;对目标HBA进行初始化,以获取目标HBA的控制权;对目标端口进行初始化,使目标端口处于可接收并可处理命令的状态;依据访问参数生成与访问请求对应的访问命令并将访问命令发送目标端口;执行模块,用于通过目标HBA控制目标端口执行访问命令,以对目标硬盘执行数据命令。
第三方面,本发明实施例提供一种主机,所述主机包括:一个或多个处理器;存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述的数据访问的方法。
相对现有技术,本发明实施例提供的一种数据访问方法、装置和主机,在DOS操作系统的环境下,接收到访问请求后,其中,访问请求包括端口中的目标端口,以及访问与目标端口对应电连接的目标硬盘中的数据的访问参数,首先基于该访问请求确定与目标硬盘电连接的目标HBA;然后对目标HBA进行初始化,以获取目标HBA的控制权;接下来,对目标端口进行初始化,使目标端口处于可接收并可处理访问命令的状态,再依据访问参数生成与访问请求对应的访问命令并将访问命令发送目标端口;最后,通过目标HBA控制目标端口执行访问命令,以对目标硬盘执行访问命令。与现有技术相比,本发明实施例在DOS操作系统对硬盘发送数据访问命令,实现了对硬盘中数据的访问,由于DOS操作系统不会对大数据块进行拆分,从而避免了因windows或者linux操作系统对大数据块的拆分导致无法对待测试硬盘的大数据块的访问的问题。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例提供的主机的方框示意图。
图2示出了本发明实施例提供的数据访问方法流程图。
图3示出了本发明实施提供的HBA寄存器、端口寄存器、命令列表、访问命令之间的关系示例图。
图4示出了本发明实施例提供的数据访问装置的方框示意图。
图标:10-主机;101-处理器;102-内存;103-PCI总线;104-HBA;105-硬盘;200-数据访问装置;201-接收模块;202-处理模块;203-执行模块。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本发明的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
请参考图1,图1示出了本发明实施例提供的主机10的方框示意图,图1中,主机10包括处理器101、内存102、至少一个PCI总线103、至少一个HBA104,每一HBA104包括至少一个端口,每一HBA104通过每一端口与对应的硬盘105电连接。所述处理器101、内存102、至少一个PCI总线103及至少一个HBA104各元件之间直接或者间接地电性连接,以实现数据的传输或交互。主机10运行有DOS操作系统。
内存102用于存储程序,处理器101用于执行内存102中存储的可执行模块,处理器101在接收到执行指令后,执行所述程序以实现本发明实施例揭示的数据访问方法。内存102还可以为本实施例中的命令列表(cmmand list)、访问命令、数据提供内存。内存102可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read OnlyMemory,ROM),可编程只读存储器(Programmable Read-Only Memory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。
处理器101可以是一种集成电路芯片,具有信号处理能力。上述的处理器101可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)、语音处理器以及视频处理器等;还可以是数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器101也可以是任何常规的处理器等。
请参照图2,图2示出了本发明实施例提供的数据访问方法流程图,该方法包括以下步骤:
步骤S101,接收访问请求,其中,访问请求包括端口中的目标端口、以及访问与目标端口对应电连接的目标硬盘中的数据的访问参数。
在本实施例中,目标硬盘为数据需要访问的硬盘105,数据可以是待写入目标硬盘的数据,也可以是待从目标硬盘中读出的数据。
在本实施例中,目标端口为与目标硬盘对应的端口,即目标硬盘通过目标端口与对应的HBA104电连接。每一HBA104的每一端口可以有一个唯一的端口号,访问请求中可以包括目标端口的端口号。
在本实施例中,访问参数包括访问数据的访问类型、数据的数据长度及数据在在所述目标硬盘中的目标存储位置,依据该访问参数可以从目标硬盘的目标存储位置读取数据,或者将数据写入至目标硬盘的目标存储位置。
步骤S102,基于访问请求确定与目标硬盘电连接的目标HBA。
在本实施例中,目标HBA为通过目标端口与目标硬盘电连接的HBA104,访问请求中可以包括HBA标识,也可以不包括HBA标识,当包括HBA标识时,将与该访问请求中的HBA标识对应的HBA104为目标HBA,当不包括HBA标识时,需要扫描主机10中所有PCI总线103上的HBA104,从中确定目标HBA,因此,作为一种实施方式,确定目标HBA的方法可以是:
首先,若访问请求中包括HBA标识,则将与HBA标识对应的HBA作为与目标硬盘电连接的目标HBA。
在本实施例中,HBA标识用于唯一表示HBA104,HBA标识可以是总线号(bus)、设备号(device)及功能号(function)的组合,用于唯一确定一个HBA104,其中,总线数最大为64,设备数最大为32,功能数最大为8,访问请求中可以包括HBA的总线号、设备号及功能号,主机10根据总线号、设备号及功能号即可确定目标HBA。
其次,若访问请求中不包括HBA标识,则扫描PCI总线上所有设备,将找到的第一个与目标硬盘的接口类型相匹配的高级主机控制器接口AHCI HBA作为目标HBA。
在本实施例中,PCI总线103可以有多条,每条PCI总线103上可以有多个适配不同硬盘105接口类型的HBA104,例如,串行高级技术附件SATA(Serial Advanced TechnologyAttachment,SATA)类型的HBA与SATA接口类型的硬盘电连接,高速外设部件互联PCIE(Peripheral Component Interconnect Express,PCIE)类型的HBA与PCIE接口类型的硬盘电连接。
在本实施例中,如果目标硬盘为SATA接口类型,在扫描所有PCI总线103的所有HBA104时,如果当前扫描的HBA104的PCI配置空间的0x0地址处16bit数据不为0xFFFF且不为0的时候,再读取该PCI配置空间的0xA地址处的class code的值,若class code的值为0x0106,则认为该HBA104为高级主机控制器接口(Advanced Host Controller Interface,AHCI)AHCI HBA,则将找到的第一个类型为AHCI HBA作为目标HBA。
步骤S103,对目标HBA进行初始化以获取目标HBA的控制权。
在本实施例中,确定目标HBA后,需要对目标HBA进行初始化以获取目标HBA的控制权,然后才能通过HBA控制目标端口访问目标硬盘上的数据。
作为一种具体实施方式,对目标HBA进行初始化的方式可以是:
首先,获取目标HBA的HBA寄存器及目标HBA的端口寄存器。
在本实施例中,每一HBA寄存器及端口寄存器存放在预设的内存地址,该预设的内存地址预先保存在对应的HBA104的PCI配置空间中,因此,通过读取目标HBA的PCI配置空间的预设的内存地址,即可获取到目标HBA的HBA寄存器及目标HBA的端口寄存器。例如,若目标HBA为AHCI HBA,则存放其HBA寄存器及端口寄存器的预设的内存地址在该目标HBA的PCI配置空间的0x24 BAR5中,其中的值即为该预设的内存地址,长度为0x1100,由此,可以获取到目标HBA的HBA寄存器及目标HBA的端口寄存器。
其次,对HBA寄存器中的第一寄存器进行设置,以获取目标HBA的控制权。
在本实施例中,HBA寄存器中包括多个寄存器,第一寄存器为HBA寄存器中可以通过设置以获取目标HBA的控制权的寄存器。
例如,在AHCI HBA的HBA寄存器包括:CAP寄存器、GHC寄存器、IS寄存器、PI寄存器、VS寄存器、CCC CTL寄存器、CCC PORTS寄存器、EM_LOC寄存器、EM_CTL寄存器、CAP2寄存器和BOHC寄存器,第一寄存器为CAP2寄存器和BOHC寄存器,若CAP2寄存器的0x0 BOH的值为1,则向BOHC寄存器的0x1 OOS写1,延迟25毫秒后读取BOHC寄存器的bit4BB,如果其值为1则延迟2秒,直至最后检查到BOHC寄存器的bit0为0、bit1为1、bit3为0和bit4为0,即代表获取到了目标HBA的控制权。
最后,确认目标HBA处于AHCI模式。
在本实施例中,可以将GHC寄存器的bit31设置为1,使HBA处于AHCI模式。
步骤S104,对目标端口进行初始化,使目标端口处于可接收并可处理命令的状态。
在本实施例中,对目标端口进行初始化可以是:首先,停止目标端口当前正在执行的命令;然后,分配与目标端口对应的命令列表的内存;最后,将目标端口设置为可接收并可处理命令的状态。
作为一种具体实施方式,使目标端口处于可接收并可处理命令的状态的方法可以是:
首先,若目标端口当前正在执行命令,则对端口寄存器中与目标端口对应的第二寄存器进行设置,以停止目标端口当前正在执行的命令。
在本实施例中,目标HBA的端口寄存器包括目标HBA中所有端口的端口寄存器,每一端口对应多个寄存器,第二寄存器为端口寄存器中与目标端口对应的、用于停止目标端口当前正在执行的命令的寄存器。
在本实施例中,对于AHCI HBA而言,端口寄存器包括32个端口的寄存器,每个端口的寄存器包括:PxCLB寄存器、PxCLUB寄存器、PxFB寄存器、PxFBU寄存器、PxIS寄存器、PxIE寄存器、PxCMD寄存器、PxTFD寄存器、PxSIG寄存器、PxSSTS寄存器、PxSCTL寄存器、PxSERR寄存器、PxSACT寄存器、PxCI寄存器、PxSNTF寄存器、PxFBS寄存器、PxDEVSLP寄存器、PxVS寄存器,其中x代表端口的端口号,例如,P0CLB寄存器,代表第0号端口的CLB寄存器,其他以此类推。对于AHCI HAB而言,第二寄存器为PxCMD寄存器,获取PxCMD寄存器的bit0、bit4、bit14和bit15是否为1,如果有任何一个为1,则将PxCMD的bit0和bit4写为0,以此停止目标端口当前正在执行的命令。
需要说明的是,为了可以成功地停止目标端口当前正在执行的命令,通常在设置第二寄存器前,根据HBA寄存器中的寄存器再次确认目标端口是否连接对应的目标硬盘,例如,对于AHCI HBA来说,可以根据HBA寄存器中的PI寄存器判断该HBA的目标端口是否可以插入硬盘,然后通过判断PxSSTS的bit0-3为0x3、bit4-7不为0、bit8-11为0x1判断该目标端口是否连接目标硬盘。
其次,分配与目标端口对应的命令列表的内存,并将命令列表的内存的起始地址写入至端口寄存器中与目标端口对应的第三寄存器中。
在本实施例中,命令列表中存储了与访问请求对应的访问类型及访问参数的地址,这样,在命令列表中的命令执行时,才可以根据访问参数的地址获取到访问参数,根据访问参数和访问类型实现与访问请求对应的访问所述目标硬盘中数据的操作。因此,需要为命令列表分配相应的内存以保存访问类型及访问参数的地址,存储命令列表的内存大小是AHCI协议预先规定的。
在本实施例中,第三寄存器为端口寄存器中与目标端口对应的用于保存命令列表的内存的起始地址的寄存器。在命令开始执行后,HBA可以根据第三寄存器中存储的内存地址获取到命令列表,然后从命令列表中取出对应的访问命令进行执行。每种类型的HBA,都有其对应的第三寄存器,例如,在AHCI HBA中,第三寄存器为端口寄存器中的PxCLB寄存器和PxCLBU寄存器。
需要说明的是,为了及时得到硬盘105传输完数据的反馈,必须在端口初始化时,分配recvfis(也称为RFIS)内存,该recvfis内存通常为256个字节,硬盘在数据传输完成后,会向recvfis内存写入预设值。例如,在AHCI HBA中,在端口初始化时,分配recvfis内存,并将recvfis内存的起始地址写入PxFB寄存器和PxFBU寄存器中,硬盘105在数据传输完成后,会向recvfis内存中写入D2H等FIS。
最后,对端口寄存器中与目标端口对应的第四寄存器进行设置,以使目标端口处于可接收并可处理命令的状态。
在本实施例中,第四寄存器为端口寄存器中与目标端口对应的可以通过设置使目标端口处于可接收并可处理命令的状态的寄存器。目标端口处于可接收并可处理命令的状态代表目标端口已经处理准备执行命令的状态。每种类型的HBA104,都有其对应的第四寄存器,例如,在AHCI HBA中,第四寄存器为端口寄存器中的PxTFD寄存器,使目标端口处于可接收并可处理命令的状态的设置过程可以是:先将PxCMD的bit3置1,或者将PxSCTL的bit0-3置1,使PxTFD的bit3和bit7变为0。同时,为了可以获取到硬盘反馈的访问结果,将PxCMD的bit4写1,并清空PxSERR寄存器、PxIS寄存器和PxIE寄存器。
步骤S105,依据访问参数生成与访问请求对应的访问命令并将访问命令发送至目标端口。
在本实施例中,命令列表(commad list)包括至少一个命令头(cmmand head),命令头中存放了命令表(commad table)的地址,命令表中有详细的命令参数信息,包括需要读写的数据的地址。
作为一种具体实施方式,依据访问参数生成与访问请求对应的访问命令的方法可以是:
首先,从命令列表中找出任一空闲的目标命令头。
在本实施例中,命令列表中包括多个命令头,命令头的个数与目标端口的槽位(slot)数相同,每一命令头与每一槽位一一对应,当该槽位没有命令在执行时,该槽位为空闲,此时该槽位对应的命令头也是空闲的。根据目标HBA的类型不同,判断空闲的目标命令头的方式也不一样,例如,对于AHCI HBA,每个端口对应32个槽位,即每个端口的命令列表中包括32个命令头。PxCI寄存器中的一个bit位对应一个槽位,PxSACT寄存器中的一个bit位对应一个槽位,如果PxCI寄存器和PxSACT寄存器相同的bit位都为0,则这一位对应的槽位为空闲,该槽位对应的命令头也为空闲,例如,PxCI寄存器的第5个bit位和PxSACT寄存器的第5个bit位均为0,则代表第5个槽位为空闲,该槽位对应的命令头也为空闲。
其次,分配与访问请求对应的内存。
在本实施例中,与访问请求对应的内存包括命令表(command table)的内存和存储访问命令需要从目标硬盘读取或者写入目标硬盘的数据。
第三,依据访问类型、数据长度及目标存储位置对内存进行初始化,得到访问命令。
在本实施例中,访问类型包括写数据和读数据,发送的SATA命令,需填入commandtable的CFIS域的H2D FIS参数包括COMMAND字段、COUNT字段、LBA字段、C域、PRDT等字段,根据访问类型初始化COMMAND字段,根据数据长度初始化COUNT字段,根据目标存储位置初始化LBA字段。例如,在AHCI HBA中,对于READ DMA EXT命令来说,COMMAND字段初始化为25h代表读访问,初始化为61h代表write fpdma queued写命令,COUNT字段代表访问的数据的逻辑扇区的数量,将其设置为0000h时,代表访问的数据的逻辑扇区的数量为65536,对于其他命令请参考SATA协议中的详细描述。发送高技术配置ATA(Advanced TechnologyAttachment,ATA)SATA命令需要将C字段设置为1。当读写数据的数据长度很大时,访问数据可以分为多个PRDT entry进行存储,PRDT字段用于存储每个PRDTentry对应的地址及长度。
需要说明的是,与访问请求对应的内存还包括用于存储访问数据的数据内存。若访问类型为读访问,则数据内存用于存储从目标硬盘上读出的数据,若访问类型为写访问,则数据内存用于存储待写入至目标硬盘的数据。
第四,对所述目标命令头进行填充。
在本实施例中,例如,在目标命令头(command head)的CFL域填入H2D FIS的长度为5,在PRDTL域中填入8,将CTBA域中填入目标命令头的地址。
最后,将访问命令的起始地址写入至目标命令头。
在本实施例中,访问命令的起始地址也即是与访问请求对应的内存的起始地址。在AHCI HBA中,命令头包括PRDTL字段、CTBA、CTBA U字段,根据数据长度设置PRDTL字段,例如,数据长度为32MB,使用的PRDTentry的个数为8,此处,将PRDTL字段设置为8,将访问命令的起始地址写入CTBA、CTBA U字段中。
为了便于说明HBA寄存器、端口寄存器、命令列表、访问命令之间的关系,本实施以AHCI HBA为例进行说明。请参照图3,图3示出了本发明实施提供的HBA寄存器、端口寄存器、命令列表、访问命令之间的关系示例图。图3中,地址00h~2Ch中存放了HBA寄存器,包括了上述的CAP寄存器、GHC寄存器、IS寄存器、PI寄存器、VS寄存器、CCC CTL寄存器、CCC PORTS寄存器、EM_LOC寄存器、EM_CTL寄存器、CAP2寄存器和BOHC寄存器,其中,地址00h~03h对应CAP寄存器,04h~07h对应GHC寄存器,以此类推,图3中只示出了HBA寄存器,没有示出HBA寄存器中每一个寄存器。地址2Ch~9Fh为保留区,地址A0h~FFh为商家指定(VendorSpecific)区,地址100h~1100h对应端口寄存器,端口寄存器中包括32个端口的端口寄存器,100h~17Fh对应端口0的端口寄存器,以此类推。图3中示出了端口0对应的命令列表,该命令列表的内存可以来自于系统内存,系统内存可以来自于图1中的内存102,端口0的第三寄存器(即PxCLB寄存器和PxCLBU寄存器,图3中未示出PxCLB寄存器和PxCLBU寄存器)中存储了端口0的命令列表的内存的起始地址,端口0的命令列表中包括32个命令头,对应32个槽位,每个命令头可以保存访问命令的地址,图3中以端口0的0#命令头为例,以端口0的0#命令头箭头指向访问命令代表端口0的0#命令头保存了访问命令的地址,访问命令的内存可以来自于系统内存,系统内存可以来自于图1中的内存102。以端口0的命令列表为例,端口0的命令列表启动后,HBA可以从端口0的PxCLB寄存器和PxCLBU寄存器中获取到端口0的0#命令列表的地址,找到端口0的命令列表,再从端口0的命令列表的0#命令头中获取访问命令的地址,根据该访问命令的地址找到并执行对应的访问命令。
图3还示出了端口0的RFIS,该RFIS的内存的起始地址写入PxFB寄存器和PxFBU寄存器,图3中没有标识出PxFB寄存器和PxFBU寄存器,可以参考AHCI协议中详细描述。端口1~端口31与端口0类似,端口1的命令列表~端口31的命令列表与端口0的命令列表类似,此处不再赘述。
步骤S106,通过目标HBA控制目标端口执行访问命令,以对目标硬盘执行访问命令。
在本实施例中,首先启动执行命令列表中的命令,然后,目标HBA根据取出命令列表中的访问命令并执行。
作为一种具体实施方式,通过目标HBA控制目标端口执行访问命令的方法可以是:
首先,对端口寄存器中与目标端口对应的第五寄存器进行设置,以启动命令列表的执行。
在本实施例中,第五寄存器为端口寄存器中与目标端口对应的可以启动目标端口的命令列表的寄存器。每种类型的HBA104,都有其对应的第五寄存器,例如,在AHCI HBA中,第五寄存器为PxCI寄存器,当发送非NCQ命令时,将PxCI寄存器中与目标命令头对应的bit设置为1,即可启动命令列表的执行,当发送NCQ命令时,需要将PxCI寄存器和PxSACT寄存器均置1。
其次,通过目标HBA,从命令列表中取出访问命令并执行。
在本实施例中,目标HBA读取命令列表中命令头中的地址,根据该地址找到对应的访问命令并执行该访问命令。
需要说明的是,主机10可以通过目标命令头中的字段检测访问命令是否完成及访问结果是否成功。每种类型的HBA104,需要检测的字段也不同,例如在AHCI HBA中,当检测到PRDBC字段的值等于传输的大小、且PxCI寄存器中与目标命令头对应的bit变为0时,则判定访问命令需要传输的数据传输完成,可以通过PxIS寄存器与PxSERR寄存器中与目标命令头对应的bit是否为1判断访问命令执行的过程中是否出现错误。
还需要说明的是,当访问类型为读访问时,由于从目标硬盘中读取的数据会存储至步骤S105中分配的数据内存中,因此,可以直接从该数据内存中读取数据。
在上述揭示所有的实施中,硬盘105可以是接口类型为SATA的硬盘。
需要说明的是,本实施例虽然只公开了针对硬盘105的读访问和写访问两种访问操作实现方式,事实上,针对硬盘105的其他操作如编程输入输出PIO模式操作(Programming Input/Output Model,PIO)、原生命令队列NCQ(Native Command Queuing,NCQ)的操作模式、以及其他SATA协议支持的命令,例如休眠(sleep)命令、softreset命令、hardreset命令,本领域技术人员可以参考本实施例公开的方法在不付出创造性的劳动也可以实现,因此,也属于本发明实施例保护的范围。
与现有技术相比,本发明实施例具有以下有益效果:
首先,避免了windows或者linux操作系统对待访问的大数据块进行拆分,实现对硬盘105上大数据块的访问,满足了硬盘测试需要访问大数据块的场景的需求。
其次,由于避开了windows或者linux操作系统的内核驱动,直接向硬盘105发送SATA命令,在命令执行错误时,更容易定位。
第三,可以直接向硬盘105发送命令,进行故障注入,满足对硬盘故障测试的场景的需求。
第四,由于避开了windows或者linux操作系统的内核驱动,向硬盘105发送休眠命令时不会受到windows或者linux操作系统唤醒的干扰,可以方便地针对硬盘的休眠测试。
基于同一发明思路,本发明实施例还提供一种数据访问装置,请参照图4,图4示出了本发明实施例提供的数据访问装置200的方框示意图,数据访问装置200包括接收模块201、处理模块202及执行模块203。
接收模块201,用于接收访问请求,其中,访问请求包括端口中的目标端口、以及访问与目标端口对应电连接的目标硬盘中的数据的访问参数。
处理模块202,用于基于访问请求确定与目标硬盘电连接的目标HBA;对目标HBA进行初始化,以获取目标HBA的控制权;对目标端口进行初始化,使目标端口处于可接收并可处理命令的状态;依据访问参数生成与访问请求对应的访问命令并将访问命令发送至目标端口。
具体地,处理模块202在执行基于所述访问请求确定与所述目标硬盘电连接的目标HBA时,具体用于:若访问请求中包括HBA标识,则将与HBA标识对应的HBA作为与目标硬盘电连接的目标HBA;若访问请求中不包括HBA标识,则扫描PCI总线上连接的所有设备,将找到的第一个与目标硬盘的接口类型相匹配的高级主机控制器接口AHCI HBA作为目标HBA。
具体地,处理模块202在执行对目标HBA进行初始化,以获取所述目标HBA的控制权的步骤时,具体用于:获取目标HBA的HBA寄存器及目标HBA的端口寄存器;对HBA寄存器中的第一寄存器进行设置,以获取目标HBA的控制权;确认目标HBA处理AHCI模式。
具体地,处理模块202在执行对目标端口进行初始化,使目标端口处于可接收并可处理命令的状态的步骤时,具体用于:若目标端口当前正在执行命令,则对端口寄存器中与目标端口对应的第二寄存器进行设置,以停止目标端口当前正在执行的命令;分配与目标端口对应的命令列表的内存,并将命令列表的内存的起始地址写入至端口寄存器中与目标端口对应的第三寄存器中;对端口寄存器中与目标端口对应的第四寄存器进行设置,以使目标端口处于可接收并可处理命令的状态。
具体地,处理模块202在执行依据访问参数生成与访问请求对应的访问命令发送至目标端口的步骤时,具体用于:从命令列表中找出任一空闲的目标命令头;分配与访问请求对应的内存;依据访问类型、数据长度及目标存储位置对内存进行初始化,得到访问命令;对所述目标命令头进行填充;将访问命令的起始地址写入至目标命令头。
执行模块203,用于通过目标HBA控制目标端口执行访问命令,以对目标硬盘执行数据命令。
具体地,执行模块203具体用于:对端口寄存器中与目标端口对应的第五寄存器进行设置,以启动命令列表的执行;通过目标HBA,从命令列表中取出访问命令并执行。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的数据访问装置200的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器101执行时实现上述实施例揭示的数据访问方法。
综上所述,本发明实施例提供了一种数据访问方法、装置和主机,应用于主机,主机包括至少一个外设部件互联PCI总线,每一PCI总线与至少一个主机总线适配器HBA电连接,每一HBA包括至少一个端口,HBA通过至少一个端口与至少一个硬盘电连接,主机运行有DOS操作系统,所述方法包括:接收访问请求,其中,访问请求包括端口中的目标端口、以及访问与目标端口对应电连接的目标硬盘中的数据的访问参数;基于访问请求确定与目标硬盘电连接的目标HBA;对目标HBA进行初始化,以获取目标HBA的控制权;对目标端口进行初始化,使目标端口处于可接收并可处理命令的状态;依据访问参数生成与访问请求对应的访问命令并将访问命令发送至目标端口;通过目标HBA控制目标端口执行访问命令,以对目标硬盘执行数据命令。与现有技术相比,本发明实施例能够避免因windows或者linux操作系统对大数据块的拆分,实现对待测试硬盘的大数据块的访问。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种数据访问方法,其特征在于,应用于主机,所述主机包括至少一个外设部件互联PCI总线,每一所述PCI总线与至少一个主机总线适配器HBA电连接,每一所述HBA包括至少一个端口,所述HBA通过所述至少一个端口与至少一个硬盘电连接,所述主机运行有DOS操作系统,所述方法包括:
接收访问请求,其中,所述访问请求包括所述端口中的目标端口、以及访问与所述目标端口对应电连接的目标硬盘中的数据的访问参数;
基于所述访问请求确定与所述目标硬盘电连接的目标HBA;
对所述目标HBA进行初始化,以获取所述目标HBA的控制权;
对所述目标端口进行初始化,使所述目标端口处于可接收并可处理命令的状态;
依据所述访问参数生成与所述访问请求对应的访问命令并将所述访问命令发送至所述目标端口;
通过所述目标HBA控制所述目标端口执行所述访问命令,以对所述目标硬盘执行所述访问命令。
2.如权利要求1所述的数据访问方法,其特征在于,所述基于所述访问请求确定与所述目标硬盘电连接的目标HBA的步骤,包括:
若所述访问请求中包括HBA标识,则将与所述HBA标识对应的HBA作为与所述目标硬盘电连接的目标HBA;
若所述访问请求中不包括HBA标识,则扫描所述PCI总线上连接的所有设备,将找到的第一个与所述目标硬盘的接口类型相匹配的高级主机控制器接口AHCI HBA作为所述目标HBA。
3.如权利要求1所述的数据访问方法,其特征在于,所述对所述目标HBA进行初始化以获取所述目标HBA的控制权的步骤,包括:
获取所述目标HBA的HBA寄存器及所述目标HBA的端口寄存器;
对所述HBA寄存器中的第一寄存器进行设置,以获取所述目标HBA的控制权;
确认所述目标HBA处于AHCI模式。
4.如权利要求3所述的数据访问方法,其特征在于,所述对所述目标端口进行初始化,使所述目标端口处于可接收并可处理命令的状态的步骤包括:
若所述目标端口当前正在执行命令,则对所述端口寄存器中与所述目标端口对应的第二寄存器进行设置,以停止所述目标端口当前正在执行的命令;
分配与所述目标端口对应的命令列表的内存,并将所述命令列表的内存的起始地址写入至所述端口寄存器中与所述目标端口对应的第三寄存器中;
对所述端口寄存器中与所述目标端口对应的第四寄存器进行设置,以使所述目标端口处于可接收并可处理命令的状态。
5.如权利要求4所述的数据访问方法,其特征在于,所述访问参数包括访问类型、数据的数据长度及数据在所述目标硬盘中的目标存储位置,所述命令列表包括至少一个命令头,所述依据所述访问参数生成与所述访问请求对应的访问命令并将所述访问命令发送至所述目标端口的步骤,包括:
从所述命令列表中找出任一空闲的目标命令头;
分配与所述访问请求对应的内存;
依据所述访问类型、数据长度及目标存储位置对所述内存进行初始化,得到所述访问命令;
对所述目标命令头进行填充;将所述访问命令的起始地址写入至所述目标命令头。
6.如权利要求5所述的数据访问方法,其特征在于,所述访问类型包括读访问和写访问,与所述访问请求对应的内存包括用于存储数据的数据内存,若所述访问类型为读访问,则所述数据内存用于存储从所述目标硬盘上读出的数据,若所述访问类型为写访问,则所述数据内存用于存储待写入至所述目标硬盘的数据。
7.如权利要求5所述的数据访问方法,其特征在于,所述通过所述目标HBA控制所述目标端口执行所述访问命令,以访问所述目标硬盘中数据的步骤,包括:
对所述端口寄存器中与所述目标端口对应的第五寄存器进行设置,以启动所述命令列表的执行;
通过所述目标HBA,从所述命令列表中取出所述访问命令并执行。
8.如权利要求1~7中任一项所述的数据访问方法,其特征在于,所述至少一个硬盘为SATA盘。
9.一种数据访问装置,其特征在于,应用于主机,所述主机包括至少一个外设部件互联PCI总线,每一所述PCI总线与至少一个主机总线适配器HBA电连接,每一所述HBA包括至少一个端口,所述HBA通过所述至少一个端口与至少一个硬盘电连接,所述主机运行有DOS操作系统,所述装置包括:
接收模块,用于接收访问请求,其中,所述访问请求包括所述端口中的目标端口、以及访问与所述目标端口对应电连接的目标硬盘中的数据的访问参数;
处理模块,用于基于所述访问请求确定与所述目标硬盘电连接的目标HBA;对所述目标HBA进行初始化,以获取所述目标HBA的控制权;对所述目标端口进行初始化,使所述目标端口处于可接收并可处理命令的状态;依据所述访问参数生成与所述访问请求对应的访问命令并将所述访问命令发送至所述目标端口;
执行模块,用于通过所述目标HBA控制所述目标端口执行所述访问命令,以对所述目标硬盘执行所述访问命令。
10.一种主机,其特征在于,所述主机包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911122401.3A CN110874297B (zh) | 2019-11-15 | 2019-11-15 | 数据访问方法、装置和主机 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911122401.3A CN110874297B (zh) | 2019-11-15 | 2019-11-15 | 数据访问方法、装置和主机 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110874297A CN110874297A (zh) | 2020-03-10 |
CN110874297B true CN110874297B (zh) | 2022-10-14 |
Family
ID=69718028
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911122401.3A Active CN110874297B (zh) | 2019-11-15 | 2019-11-15 | 数据访问方法、装置和主机 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110874297B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463670A (zh) * | 2020-11-25 | 2021-03-09 | 苏州浪潮智能科技有限公司 | 一种存储控制器访问方法及相关装置 |
CN113923031A (zh) * | 2021-10-12 | 2022-01-11 | 百果园技术(新加坡)有限公司 | 一种数据传输的方法、装置、设备和存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1170160A (zh) * | 1996-07-09 | 1998-01-14 | 李志淮 | Dos文件系统安全存取控制方法及设备 |
CN1235144C (zh) * | 2001-09-14 | 2006-01-04 | 北京瑞星科技股份有限公司 | 计算机系统及访问文件系统的方法 |
-
2019
- 2019-11-15 CN CN201911122401.3A patent/CN110874297B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110874297A (zh) | 2020-03-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8386723B2 (en) | System and method of host request mapping | |
US10496388B2 (en) | Technologies for securing a firmware update | |
EP2763045B1 (en) | Method and apparatus for allocating memory space with write-combine attribute | |
US9262363B2 (en) | PCI and PCI express virtual hot plug systems and methods | |
US8037228B2 (en) | Bridge device with page-access based processor interface | |
WO2018076792A1 (zh) | 一种arm设备中磁盘管理的方法、装置和arm设备 | |
CN110874297B (zh) | 数据访问方法、装置和主机 | |
US20190155517A1 (en) | Methods and apparatus for memory controller discovery of vendor-specific non-volatile memory devices | |
US11175977B2 (en) | Method and system to detect failure in PCIe endpoint devices | |
US20100169546A1 (en) | Flash memory access circuit | |
US10585822B2 (en) | Operation method of host system including storage device and operation method of storage device controller | |
EP1372069A2 (en) | Method system and software for configuring a graphics processing communication mode | |
US20170242820A1 (en) | Using a proprietary framework on a standards-based embedded device | |
JP2021508878A (ja) | フラッシュメモリコントローラ、sdカードデバイス、フラッシュメモリコントローラで使用される方法、およびsdカードデバイスに結合されたホストデバイス | |
US7886095B2 (en) | I/O space request suppressing method for PCI device | |
US20170228302A1 (en) | Method and apparatus for updating a system on chip (soc) image from a host computer system without using dma | |
US20070233750A1 (en) | Data control apparatus and method | |
US6230216B1 (en) | Method for eliminating dual address cycles in a peripheral component interconnect environment | |
US7664128B2 (en) | Portable information terminal, IP address setting program, and IP address setting method | |
CN113778934B (zh) | 基于PCIe的高速实时传输系统 | |
CN113031863B (zh) | Ssd命令相关性管理方法、装置、计算机设备及存储介质 | |
US9665517B1 (en) | Multipath I/O in a computer system | |
US9880831B2 (en) | Field firmware upgrading method and computer-readable medium | |
US20200159605A1 (en) | Information processing system and storage device control method | |
EP4365732A1 (en) | Efficient firmware download operation in storage devices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |