CN110765033A - 一种ahci模式下访问硬盘的方法 - Google Patents

一种ahci模式下访问硬盘的方法 Download PDF

Info

Publication number
CN110765033A
CN110765033A CN201911050313.7A CN201911050313A CN110765033A CN 110765033 A CN110765033 A CN 110765033A CN 201911050313 A CN201911050313 A CN 201911050313A CN 110765033 A CN110765033 A CN 110765033A
Authority
CN
China
Prior art keywords
hard disk
command
address
bytes
command slot
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.)
Granted
Application number
CN201911050313.7A
Other languages
English (en)
Other versions
CN110765033B (zh
Inventor
许超明
梁效宁
董超
彭炼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SICHUAN XLY INFORMATION SAFETY TECHNOLOGY Co Ltd
Original Assignee
SICHUAN XLY INFORMATION SAFETY TECHNOLOGY Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SICHUAN XLY INFORMATION SAFETY TECHNOLOGY Co Ltd filed Critical SICHUAN XLY INFORMATION SAFETY TECHNOLOGY Co Ltd
Priority to CN201911050313.7A priority Critical patent/CN110765033B/zh
Publication of CN110765033A publication Critical patent/CN110765033A/zh
Application granted granted Critical
Publication of CN110765033B publication Critical patent/CN110765033B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0615Address space extension
    • G06F12/063Address space extension for I/O modules, e.g. memory mapped I/O

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)

Abstract

本发明公开了一种AHCI模式下访问硬盘的方法,其特征在于包括以下步骤:S100:判断硬盘的工作模式是否为AHCI模式,如果是,执行步骤S200,否则,结束流程:S200:获取PCI配置空间,并获取各个基地址寄存器的值;S300:获取AHCI空间的入口地址;S400:获取各个硬盘端口的内存空间的起始地址;S500:寻址当前硬盘端口的内存空间,读取当前硬盘端口的内存空间的前八个字节的内容作为命令列表基地址,读取第0x39至0x3C字节的内容作为命令槽忙闲指示;S600:获取并解析各个命令槽;S700:获取并解析命令表基地址的内容,确定命令封装区、数据项的操作地址及所操作数据的字节长度;S800:确定空闲命令槽;S900:选用空闲命令槽并重新设置命令槽忙闲指示,访问当前硬盘并验证访问成功。

Description

一种AHCI模式下访问硬盘的方法
技术领域
本发明属于数据恢复与取证领域,涉及一种访问硬盘的方法,尤其涉及一种AHCI模式下访问硬盘的方法。
背景技术
在数据恢复与取证领域中,随着硬盘容量的不断增加,加上硬盘性能也在不断提高,使得硬盘的用户群不断增加,硬盘的使用次数也急剧增加,硬盘的故障也随之提高。
一般的硬盘访问技术都是通过文件系统的方式,主要针对文件的读取、写入和删除。但是,硬盘中也存在其他的重要数据,包括MBR、DBR等。当这些重要数据被恶意的修改或者丢失后,电脑的磁盘管理器中将丢失所有的固件及管理数据,而用户的数据仍然真实存在,只是以文件系统的方式不能进行访问。这种情况下,难以实现对硬盘的读写、数据恢复与取证。现有技术正研究AHCI模式下基于IO寄存器数据交互而实现访问硬盘的方法,目前为止,尚无一种在AHCI模式下基于IO寄存器数据交互的硬盘访问方法。
发明内容
针对现有技术的不足,本发明提供了一种在AHCI模式下基于IO寄存器的硬盘访问技术,通过这样的访问方式,就可以针对硬盘的重要数据进行保护,而且可以绕开文件系统直接对硬盘的数据进行访问。本发明申请包括以下步骤:
S100:判断硬盘的工作模式是否为AHCI模式,如果是,执行步骤S200,否则,结束流程:
S200:获取PCI配置空间,并获取各个基地址寄存器的值;
S300:获取AHCI空间的入口地址;
S400:获取各个硬盘端口的内存空间的起始地址;
S500:寻址当前硬盘端口的内存空间,读取当前硬盘端口的内存空间的前八个字节的内容作为命令列表基地址,读取第0x39至0x3C字节的内容作为命令槽忙闲指示;
S600:获取并解析各个命令槽;
S700:获取并解析命令表基地址的内容,确定命令封装区、数据项的操作地址及所操作数据的字节长度;
S800:确定空闲命令槽:读取命令槽忙闲指示的各比特位,根据各比特位的值确定空闲的命令槽;
S900:选用空闲命令槽并重新设置命令槽忙闲指示,访问当前硬盘并验证访问成功。
优选地,所述寄存器的值及内存空间的值均以小端格式存储。
优选地,所述步骤S400中,每一硬盘端口的内存空间的字节长度为N,第一个硬盘端口的起始地址为所述入口地址+偏移量,之后的每一硬盘端口的起始地址为前一个硬盘端口的结束地址+1,各个硬盘端口的内存空间顺序排列,其中,硬盘端口数量不大于32,N为不小于0x40的正整数。
优选地,所述偏移量为0x100,所述硬盘端口数量为32,N为0x80。
优选地,所述步骤S600包括以下步骤:
S601:寻址当前命令列表基地址,以当前所寻址地址为起始地址,以0x20个字节为一组,依次表示第1至第32个命令槽;
S602:设置各个命令槽的第1至第2字节的内容作为硬盘的访问类型,设置命令槽的第3至第4字节的内容作为数据项个数,设置命令槽的第5至第8字节的内容作为读取/写入的字节数,设置命令槽的第9至第16字节的内容作为命令表基地址。
优选地,所述步骤S900包括以下步骤:
根据所选用的空闲命令槽,将当前硬盘端口的内存空间的第0x39至0x3C字节的内容中的命令槽忙闲指示的对应比特位置1,访问当前硬盘并验证根据所选用的空闲命令槽对当前硬盘的访问成功。
本发明具有以下有益效果是:解决了现有技术中尚无一种AHCI模式下访问硬盘的方法的技术问题。
附图说明
图1为本发明所提供的方法的总流程图;
图2为本发明的一个实施例中PCI配置空间的示例图;
图3为本发明的一个实施例中硬盘端口的内存空间的数据结构示意图;
图4为本发明的一个实施例中命令列表的数据结构示意图;
图5为本发明的一个实施例中命令表的数据结构示意图。
具体实施方式
S100:判断硬盘的工作模式是否为AHCI模式,如果是,执行步骤S200,否则,结束流程。
在本发明的一个实施例中,通过检查系统的bios设置,可以看到,系统的硬盘工作模式有IDE以及AHCI两种方式,如果是AHCI模式,执行步骤S200,否则,结束流程。
S200:获取PCI配置空间,并获取各个基地址寄存器的值;具体地,PCI及PCIE配置空间的读取有两种方式:
1.通过操作IO端口0xCF8/CFC
_outpd(0xCF8,(1<<31)|(Bus<<16)|(Dev<<11)|(Fun<<8)|Reg),然后就可以通过读取0xCFC-0xCFF来获取BIT0~BIT32的值
_inp(0xCFC)
_inp(0xCFD)
_inp(0xCFE)
_inp(0xCFF)
_inpw(0xCFC)
_inpw(0xCFE)
_inpd(0xCFC)
2.通过内存地址直接读取
Intel Chipset的PciexBaseAddress一般从Bus0Dev0Fun0Reg60~64读取
address=PciexBaseAddress|(Bus<<20)|(Dev<<15)|(Fun<<12)|Reg;
图2示出了本发明的一个实施例中PCI配置空间的示例图。如图2所示,BAR1至BAR6为6个基地址寄存器及其值。值得注意的是,本发明中的寄存器的值及内存空间的值均以小端格式存储。
S300:获取AHCI空间的入口地址;本发明的一个实施例中,如图2所示的BAR6的值0xF712B000,即为AHCI空间的入口地址。
S400:获取各个硬盘端口的内存空间的起始地址;每一硬盘端口的内存空间的字节长度为N,第一个硬盘端口的起始地址为入口地址+偏移量,之后的每一硬盘端口的起始地址为前一个硬盘端口的结束地址+1,各个硬盘端口的内存空间顺序排列,其中,硬盘端口数量不大于32,N为不小于0x40的正整数。本发明的一个实施例中,偏移量为0x100,硬盘端口数量为32,N为0x80。
具体地,取出BAR6的值0xF712B000,以0xF712B000+0x100为第一个硬盘端口的内存空间地址,即,以0xF712B100为首地址,每0x80字节的大小为一个硬盘端口空间,即第二个端口的内存空间为0xF712B180-0xF712B1FF,依次类推,这样,依次有端口1至端口32共计32个端口。
S500:寻址当前硬盘端口的内存空间,读取当前硬盘端口的内存空间的前八个字节的内容作为命令列表基地址,读取第0x39至0x3C字节的内容作为命令槽忙闲指示;
图3示出了本发明的一个实施例中硬盘端口的内存空间的数据结构示意图;
每个硬盘端口的内存空间控制其对应端口的硬盘。如图3所示,以第一个端口的内存空间0xF712B100至0xF712B17F为例,字节长度为0x80的这段内存中,前八个字节(即0xF712B100至0xF712B107)的内容0xC9C62000表示命令列表基地址,第0x39至0x3C的内容0x00000000表示命令槽忙闲指示,其中的32位的比特位中,0表示闲,1表示忙,即,该命令槽被占用。
S600:获取并解析各个命令槽;
步骤S600包括以下步骤:
S601:寻址当前命令列表基地址,以当前所寻址地址为起始地址,以0x20个字节为一组,依次表示第1至第32个命令槽;
S602:设置各个命令槽的第1至第2字节的内容作为硬盘的访问类型,设置命令槽的第3至第4字节的内容作为数据项个数,设置命令槽的第5至第8字节的内容作为读取/写入的字节数,设置命令槽的第9至第16字节的内容作为命令表基地址。
具体地,图4示出了本发明的一个实施例中命令列表的数据结构示意图。如图4所示,寻址至当前命令列表基地址0xC9C62000,以0x20个字节为一组,(即,每个命令槽的字节长度为0x20),依次表示第1至第32个命令槽,每个命令槽均可以用于硬盘的数据访问。现以第一个命令槽为例,第1、2字节的内容0x0045表示硬盘的访问类型,本实施例中的0x0045表示硬盘的访问类型为写入数据,如果是0x0005则表示读取数据;第3、第4字节的内容0x0001为数据项的个数;第5至第8字节的内容0x000001000表示读取或者写入的字节长度(即,字节长度为0x1000);第9至第16字节的内容表示命令表基地址0xC9C62700。
S700:获取并解析命令表基地址的内容,确定命令封装区、数据项的操作地址及所操作数据的字节长度;
寻址命令表基地址0xC9C62700,获取命令表。图5示出了本发明的一个实施例中命令表的数据结构示意图。如图5所示,该命令表的第0x1至第0x40字节的内容为命令封装区;第0x81字节至0x400字节的内容为所有数据项的内存空间,其包含以0x10字节为一组的各个数据项的操作地址及所操作数据的字节长度。以第一个数据项为例,第1至第8个字节的内容0x1151F6000为数据项的操作地址,第13至第16字节的内容0x0FFF表示所操作数据的字节长度,图5中即为0xFFF,但是大小需要在此基础上加1,即为0x1000的字节长度。
S800:确定空闲命令槽:读取命令槽忙闲指示的各比特位,根据各比特位的值确定空闲的命令槽;
本发明的实施例中,通过硬盘端口访问的硬盘数据时,需读取命令槽忙闲指示的值,如前所述,命令槽忙闲指示的值一共4个字节的大小,即32个比特位,每个比特位对应一个命令槽,最低位控制着第1个命令槽,最高位控制第32个命令槽,以此类推。当比特位为1时,表示该命令槽被占用,为0时表示处于空闲状态。只要命令槽忙闲指示不是全F,即不是0xFFFFFFFF,就可以找到对应的空闲的命令槽,且各个空闲的命令槽均可使用,实现对该硬盘的访问。
S900:选用空闲命令槽并重新设置命令槽忙闲指示,访问当前硬盘并验证访问成功。具体地,根据所选用的空闲命令槽,将当前硬盘端口的内存空间的第0x39至0x3C字节的内容中的命令槽忙闲指示的对应比特位置1,访问当前硬盘并验证根据所选用的空闲命令槽对当前硬盘的访问成功。
通过本发明提供的方法,解决了现有技术中尚无一种AHCI模式下访问硬盘的方法的技术问题。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (6)

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,访问当前硬盘并验证根据所选用的空闲命令槽对当前硬盘的访问成功。
CN201911050313.7A 2019-10-31 2019-10-31 一种ahci模式下访问硬盘的方法 Active CN110765033B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911050313.7A CN110765033B (zh) 2019-10-31 2019-10-31 一种ahci模式下访问硬盘的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911050313.7A CN110765033B (zh) 2019-10-31 2019-10-31 一种ahci模式下访问硬盘的方法

Publications (2)

Publication Number Publication Date
CN110765033A true CN110765033A (zh) 2020-02-07
CN110765033B CN110765033B (zh) 2023-03-10

Family

ID=69334867

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911050313.7A Active CN110765033B (zh) 2019-10-31 2019-10-31 一种ahci模式下访问硬盘的方法

Country Status (1)

Country Link
CN (1) CN110765033B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120110259A1 (en) * 2010-10-27 2012-05-03 Enmotus Inc. Tiered data storage system with data management and method of operation thereof
CN103942114A (zh) * 2013-01-22 2014-07-23 Lsi公司 Nvm地址、跨度及长度映射/转换的存储地址空间
CN104516843A (zh) * 2013-09-30 2015-04-15 韩商联测股份有限公司 基于fpga的非安装型存储器测试装置
US20150324308A1 (en) * 2014-05-06 2015-11-12 Realtek Semiconductor Corp. Solid state drive controlling circuit and related solid state drive device and solid state drive access system
US20150370700A1 (en) * 2014-06-23 2015-12-24 Google Inc. Managing storage devices
CN106843773A (zh) * 2017-02-16 2017-06-13 天津书生云科技有限公司 存储方法和分布式存储系统
CN107957970A (zh) * 2017-10-23 2018-04-24 记忆科技(深圳)有限公司 一种异构多核的通讯方法及固态硬盘控制器
CN109471831A (zh) * 2018-11-16 2019-03-15 郑州云海信息技术有限公司 一种数据处理方法及装置
CN110297729A (zh) * 2019-07-02 2019-10-01 四川效率源信息安全技术股份有限公司 一种基于区间块来恢复apfs中被损坏数据及被删除数据的方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120110259A1 (en) * 2010-10-27 2012-05-03 Enmotus Inc. Tiered data storage system with data management and method of operation thereof
CN103942114A (zh) * 2013-01-22 2014-07-23 Lsi公司 Nvm地址、跨度及长度映射/转换的存储地址空间
CN104516843A (zh) * 2013-09-30 2015-04-15 韩商联测股份有限公司 基于fpga的非安装型存储器测试装置
US20150324308A1 (en) * 2014-05-06 2015-11-12 Realtek Semiconductor Corp. Solid state drive controlling circuit and related solid state drive device and solid state drive access system
US20150370700A1 (en) * 2014-06-23 2015-12-24 Google Inc. Managing storage devices
CN106843773A (zh) * 2017-02-16 2017-06-13 天津书生云科技有限公司 存储方法和分布式存储系统
CN107957970A (zh) * 2017-10-23 2018-04-24 记忆科技(深圳)有限公司 一种异构多核的通讯方法及固态硬盘控制器
CN109471831A (zh) * 2018-11-16 2019-03-15 郑州云海信息技术有限公司 一种数据处理方法及装置
CN110297729A (zh) * 2019-07-02 2019-10-01 四川效率源信息安全技术股份有限公司 一种基于区间块来恢复apfs中被损坏数据及被删除数据的方法

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
HYUKJOONG KIM等: "StreamFTL: Stream-level Address Translation Scheme for Memory Constrained Flash Storage", 《网页在线公开:HTTPS://IEEEXPLORE.IEEE.ORG/STAMP/STAMP.JSP?TP=&ARNUMBER=8342083》 *
吕大鹏等: "一种面向命令槽的SATA控制器资源分配算法", 《信息通信》 *
杜晨杰等: "缓冲区管理层对固态盘的有效性研究", 《浙江万里学院学报》 *
梁效宁等: "SQLite数据库文件恢复提取技术研究", 《计算机科学》 *
陈博等: "一种面向RAID阵列的SSD设计优化方法", 《计算机工程与科学》 *

Also Published As

Publication number Publication date
CN110765033B (zh) 2023-03-10

Similar Documents

Publication Publication Date Title
CN108073363B (zh) 数据存储方法、存储设备及计算机可读存储介质
US20220057940A1 (en) Method and Apparatus for SSD Storage Access
KR100533682B1 (ko) 플래시 메모리의 데이터 관리 장치 및 방법
CN101320348A (zh) 一种嵌入式系统的日志功能实现方法
US20060271590A1 (en) Volume information analysis module and method thereof
JP2008547068A (ja) 複数個のdmaチャンネルを有するusb−sd保存装置及びその保存方法と記録媒体
US20080250189A1 (en) Circuit and Method for Improving Operation Life of Memory
WO2017132797A1 (zh) 数据整理方法、存储设备、存储控制器以及存储阵列
CN107391038A (zh) 资料存储型闪存的数据写入方法、闪存及存储介质
CN112181275A (zh) 一种数据处理器及数据处理方法
CN110765033B (zh) 一种ahci模式下访问硬盘的方法
CN112417802B (zh) 一种模拟存储芯片的方法、系统、设备及存储介质
US8595426B2 (en) Handling commands within a write-once read-many storage device configuration
CN101187936B (zh) 一种日志数据的存储方法和装置
CN109979498A (zh) 磁盘视频数据写入、读取的方法及装置
CN110795364B (zh) 一种ide模式下访问硬盘的方法
CN112527195B (zh) 一种提取固态硬盘物理数据的方法
US7453760B2 (en) Method for accessing dual-port memory
CN101553800B (zh) 将主机系统sam/vsam文件转换为开放系统sam/vsam文件的转换装置和方法
CN110443053B (zh) 一种基于密钥循环表及映射表的密钥生成方法
CN110262758B (zh) 一种数据存储管理方法、系统及相关设备
CN107526548B (zh) 多namespace的固态硬盘及数据删除方法与装置
WO2010088864A1 (zh) 存储数据读取装置和方法以及计算机装置
CN114327260B (zh) 一种数据读取方法、系统、服务器及存储介质
US20060026337A1 (en) Method increasing seeking speed when accessing file stored in storage device, machine-readable medium thereof, and related apparatus

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