CN110928815A - 一种获取ahci基地址寄存器值的方法 - Google Patents
一种获取ahci基地址寄存器值的方法 Download PDFInfo
- Publication number
- CN110928815A CN110928815A CN201911196214.XA CN201911196214A CN110928815A CN 110928815 A CN110928815 A CN 110928815A CN 201911196214 A CN201911196214 A CN 201911196214A CN 110928815 A CN110928815 A CN 110928815A
- Authority
- CN
- China
- Prior art keywords
- value
- key value
- current
- input
- ahci
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Input From Keyboards Or The Like (AREA)
- Small-Scale Networks (AREA)
Abstract
本发明公开了一种获取AHCI基地址寄存器值的方法,其特征在于包括以下步骤:S100:枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值;S200:根据AHCI分类码的偏移地址、当前PCI设备的总线键值、设备键值及功能键值,计算输入值并向CPU输入端口输入当前输入值;S300:根据当前输入值获取CPU输出端口的当前输出值并判断当前输出值是否等于AHCI分类码,如果是,表示当前PCI设备为AHCI控制器,执行步骤S500,否则,执行步骤S400;S400:获取下一PCI设备的总线键值、设备键值及功能键值,执行步骤S200;S500:根据基地址寄存器的偏移地址、所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值,计算并获取AHCI基地址寄存器值。
Description
技术领域
本发明属于数据恢复与硬盘固件安全技术领域,涉及一种获取AHCI基地址寄存器值的方法。
背景技术
在硬盘存储领域上,如何从底层实现对硬盘进行控制及数据恢复,现有技术中还没有涉及到类似的技术方案。随着硬盘技术的不断发展及硬盘使用量的扩大,如何更好的控制、监控硬盘及恢复硬盘数据都变得越发的重要。经研究发现:在硬盘AHCI的工作模式下,只有获取了PCI配置空间中AHCI基地址寄存器(AHCI Base Address Register)的值后,才可以进行控制硬盘、恢复硬盘数据等操作。
发明内容
针对现有技术的不足,本发明提供了一种获取AHCI基地址寄存器值的方法,根据AHCI分类码的偏移地址及各键值,计算输入值并获取CPU输出端口的输出值,从而计算并获取AHCI基地址寄存器值。本发明申请包括以下步骤:
S100:枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值;
S200:根据AHCI分类码的偏移地址、当前PCI设备的总线键值、设备键值及功能键值,计算输入值并向CPU输入端口输入当前输入值;
S300:根据当前输入值获取CPU输出端口的当前输出值并判断当前输出值是否等于AHCI分类码,如果是,表示当前PCI设备为AHCI控制器,执行步骤S500,否则,执行步骤S400;
S400:获取下一PCI设备的总线键值、设备键值及功能键值,执行步骤S200;
S500:根据基地址寄存器的偏移地址、所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值,计算并获取AHCI基地址寄存器值。
优选地,所述步骤S200包括以下步骤:
S201:将输入值赋初值为0x80000000;
S202:输入值=输入值+当前总线键值,其中的+代表加法运算符;
S203:输入值=输入值|0x8000,其中的|代表按位或运算符;
S204:输入值=输入值左移0x10位;
S205:当前设备键值=当前设备键值左移0x03位;
S206:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;
S207:输入值=输入值+(所述AHCI分类码的偏移地址&0xFC),其中的+代表加法运算符,&代表按位与运算符;
S208:向CPU输入端口输入当前输入值。
优选地,所述步骤S500包括以下步骤:
S501:读取所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值;
S502:将输入值赋初值为0x80000000;
S503:输入值=输入值+当前总线键值,其中的+代表加法运算符;
S504:输入值=输入值|0x8000,其中的|代表按位或运算符;
S505:输入值=输入值左移0x10位;
S506:当前设备键值=当前设备键值左移0x03位;
S507:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;
S508:输入值=输入值+(基地址寄存器的偏移地址&0xFC),其中的+代表按加法运算符,&代表按位与运算符;
S509:向CPU输入端口输入当前输入值,获取CPU输出端口的当前输出值作为所述AHCI基地址寄存器值。
优选地,所述AHCI分类码为0x106。
优选地,所述AHCI分类码的偏移地址为0x08。
优选地,所述CPU输入端口的端口号为0xCF8,所述CPU输出端口的端口号为0xCFC。
优选地,所述基地址寄存器的偏移地址为0x24。
本发明具有以下有益效果是:解决了现有技术中尚无一种获取AHCI基地址寄存器值的方法的技术问题。
附图说明
图1为本发明所提供的方法的总流程图;
图2为本发明的一个实施例中计算AHCI分类码的具体流程图;
图3为本发明的一个实施例中计算并获取AHCI基地址寄存器值的具体流程图。
具体实施方式
图1示出了本发明所提供的方法的总流程图。如图1所示,包括以下步骤:
S100:枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值。现有技术中,枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值的方法较多,不再赘述。下述为本发明实施例中枚举PCI总线的各个PCI设备:
Bus 02,Device 00,Function 00-VMware Inc.UHCI USB Controller
Bus 02,Device 01,Function 00-Intel Corporation Ethernet Controller
Bus 02,Device 02,Function 00-VMware InC.HD Audio Device
Bus 02,Device 03,Function 00-VMware Inc.EHCl USB Controller
Bus 02,Device 05,Function 00-VMware Inc.AHCl Controller
Bus 03,Device 00,Function 00-LSI Logic 53C810 Devlce Mass StorageController
从上述枚举PCI的总线的各个PCI设备中可以获取AHCI对应的总线(bus)键值为0x2、设备(device)键值为0x5,功能(function)键值为0x00。
S200:根据AHCI分类码的偏移地址、当前PCI设备的总线键值、设备键值及功能键值,计算输入值并向CPU输入端口输入当前输入值。
图2示出了本发明的一个实施例中计算AHCI分类码的具体流程图。如图2所示,包括以下步骤:
S201:将输入值赋初值为0x80000000;
S202:输入值=输入值+当前总线键值,其中的+代表加法运算符;即,输入值=0x80000000+0x2=0x80000002;
S203:输入值=输入值|0x8000,其中的|代表按位或运算符;即,输入值=0x80000002|0x8000=0x80008002;
S204:输入值=输入值左移0x10位;即,输入值=0x80008002<<0x10=0x80020000;
S205:当前设备键值=当前设备键值左移0x03位;即,当前设备键值=(0x5<<0x3);
S206:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;即,输入值=0x80020000+((0x5<<0x3)|0x00)*0x100==0x80022800;
S207:输入值=输入值+(AHCI分类码的偏移地址&0xFC),其中的+代表加法运算符,&代表按位与运算符;即,输入值=0x80022800+(0x8&0xFC)=0x80022808;
S208:向CPU输入端口输入当前输入值0x80022808。
S300:根据当前输入值获取CPU输出端口的当前输出值并判断当前输出值是否等于AHCI分类码,如果是,表示当前PCI设备为AHCI控制器,执行步骤S500,否则,执行步骤S400;
本发明实施例中,根据当前输入值0x80022808,获取CPU输出端口的当前输出值为AHCI分类码0x106,即,表示当前PCI设备为AHCI控制器,执行步骤S500;
S400:获取下一PCI设备的总线键值、设备键值及功能键值,执行步骤S200;
S500:根据基地址寄存器的偏移地址、步骤S200中当前PCI设备的总线键值、设备键值及功能键值,计算并获取AHCI基地址寄存器值。
图3示出了本发明的一个实施例中计算并获取AHCI基地址寄存器值的具体流程图。如图3所示,包括以下步骤:
S501:读取步骤S200中当前PCI设备的总线键值、设备键值及功能键值;
S502:将输入值赋初值为0x80000000;
S503:输入值=输入值+当前总线键值,其中的+代表加法运算符;
S504:输入值=输入值|0x8000,其中的|代表按位或运算符;
S505:输入值=输入值左移0x10位;
S506:当前设备键值=当前设备键值左移0x03位;
S507:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;
S508:输入值=输入值+(基地址寄存器的偏移地址&0xFC),其中的+代表按加法运算符,&代表按位与运算符;
步骤S502至S508的运算方法与步骤S201至S207同,不再赘述。
S509:向CPU输入端口输入当前输入值,获取CPU输出端口的当前输出值作为AHCI基地址寄存器值。
通过本发明提供的方法,解决了现有技术中尚无一种获取AHCI基地址寄存器值的方法的技术问题。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (7)
1.一种获取AHCI基地址寄存器值的方法,其特征在于包括以下步骤:
S100:枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值;
S200:根据AHCI分类码的偏移地址、当前PCI设备的总线键值、设备键值及功能键值,计算输入值并向CPU输入端口输入当前输入值;
S300:根据当前输入值获取CPU输出端口的当前输出值并判断当前输出值是否等于AHCI分类码,如果是,表示当前PCI设备为AHCI控制器,执行步骤S500,否则,执行步骤S400;
S400:获取下一PCI设备的总线键值、设备键值及功能键值,执行步骤S200;
S500:根据基地址寄存器的偏移地址、所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值,计算并获取AHCI基地址寄存器值。
2.根据权利要求1所述的一种获取AHCI基地址寄存器值的方法,其特征在于,所述步骤S200包括以下步骤:
S201:将输入值赋初值为0x80000000;
S202:输入值=输入值+当前总线键值,其中的+代表加法运算符;
S203:输入值=输入值|0x8000,其中的|代表按位或运算符;
S204:输入值=输入值左移0x10位;
S205:当前设备键值=当前设备键值左移0x03位;
S206:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;
S207:输入值=输入值+(所述AHCI分类码的偏移地址&0xFC),其中的+代表加法运算符,&代表按位与运算符;
S208:向CPU输入端口输入当前输入值。
3.根据权利要求1所述的一种获取AHCI基地址寄存器值的方法,其特征在于,所述步骤S500包括以下步骤:
S501:读取所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值;
S502:将输入值赋初值为0x80000000;
S503:输入值=输入值+当前总线键值,其中的+代表加法运算符;
S504:输入值=输入值|0x8000,其中的|代表按位或运算符;
S505:输入值=输入值左移0x10位;
S506:当前设备键值=当前设备键值左移0x03位;
S507:输入值=输入值+(当前设备键值|当前功能键值)*0x100,其中的+代表加法运算符,|代表按位或运算符,*代表乘法运算符;
S508:输入值=输入值+(基地址寄存器的偏移地址&0xFC),其中的+代表按加法运算符,&代表按位与运算符;
S509:向CPU输入端口输入当前输入值,获取CPU输出端口的当前输出值作为所述AHCI基地址寄存器值。
4.根据权利要求1的一种获取AHCI基地址寄存器值的方法,其特征在于,所述AHCI分类码为0x106。
5.根据权利要求1所述的一种获取AHCI基地址寄存器值的方法,其特征在于,所述AHCI分类码的偏移地址为0x08。
6.根据权利要求1所述的一种获取AHCI基地址寄存器值的方法,其特征在于,所述CPU输入端口的端口号为0xCF8,所述CPU输出端口的端口号为0xCFC。
7.根据权利要求1所述的一种获取AHCI基地址寄存器值的方法,其特征在于,所述基地址寄存器的偏移地址为0x24。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911196214.XA CN110928815B (zh) | 2019-11-29 | 2019-11-29 | 一种获取ahci基地址寄存器值的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911196214.XA CN110928815B (zh) | 2019-11-29 | 2019-11-29 | 一种获取ahci基地址寄存器值的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110928815A true CN110928815A (zh) | 2020-03-27 |
CN110928815B CN110928815B (zh) | 2023-05-05 |
Family
ID=69847674
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911196214.XA Active CN110928815B (zh) | 2019-11-29 | 2019-11-29 | 一种获取ahci基地址寄存器值的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110928815B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070005869A1 (en) * | 2005-06-29 | 2007-01-04 | Jasper Balraj | Index/data register pair for indirect register access |
CN101840306A (zh) * | 2009-03-18 | 2010-09-22 | 研祥智能科技股份有限公司 | VxWorks操作系统中实现驱动SATA设备的方法和系统 |
US20130007332A1 (en) * | 2011-06-30 | 2013-01-03 | Chee Hak Teh | Controllable transaction synchronization for peripheral devices |
US9026687B1 (en) * | 2013-12-26 | 2015-05-05 | Lsi Corporation | Host based enumeration and configuration for computer expansion bus controllers |
CN105468482A (zh) * | 2014-08-29 | 2016-04-06 | 研祥智能科技股份有限公司 | 一种硬盘盘位识别和故障诊断方法及其服务器设备 |
CN106372004A (zh) * | 2015-07-24 | 2017-02-01 | 爱思开海力士有限公司 | 用于ssd控制器的可编程协议独立bar存储器 |
-
2019
- 2019-11-29 CN CN201911196214.XA patent/CN110928815B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070005869A1 (en) * | 2005-06-29 | 2007-01-04 | Jasper Balraj | Index/data register pair for indirect register access |
CN101840306A (zh) * | 2009-03-18 | 2010-09-22 | 研祥智能科技股份有限公司 | VxWorks操作系统中实现驱动SATA设备的方法和系统 |
US20130007332A1 (en) * | 2011-06-30 | 2013-01-03 | Chee Hak Teh | Controllable transaction synchronization for peripheral devices |
US9026687B1 (en) * | 2013-12-26 | 2015-05-05 | Lsi Corporation | Host based enumeration and configuration for computer expansion bus controllers |
CN105468482A (zh) * | 2014-08-29 | 2016-04-06 | 研祥智能科技股份有限公司 | 一种硬盘盘位识别和故障诊断方法及其服务器设备 |
CN106372004A (zh) * | 2015-07-24 | 2017-02-01 | 爱思开海力士有限公司 | 用于ssd控制器的可编程协议独立bar存储器 |
Non-Patent Citations (2)
Title |
---|
崔丹丹等: "NVMe高速存储的FPGA实现" * |
徐佳安: "基于UVM的SATA AHCI验证" * |
Also Published As
Publication number | Publication date |
---|---|
CN110928815B (zh) | 2023-05-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2972774A1 (en) | Techniques for enabling bit-parallel wide string matching with a simd register | |
EP3038017A1 (en) | Method of generating descriptor for interest point in image and apparatus implementing the same | |
KR102391385B1 (ko) | 내장형 로직 분석기 및 이를 포함하는 집적 회로 | |
JP2009135854A (ja) | メモリアクセス制御装置、制御方法及びプログラム | |
JP5791121B2 (ja) | コスト算出装置、コスト算出方法、及びプログラム | |
CN112347154A (zh) | 一种渣皮脱落指数计算方法、终端设备及存储介质 | |
US11740791B2 (en) | Data compression system using base values and methods thereof | |
JP5735150B2 (ja) | 正規化カウントを判定するプロセッサ及び方法 | |
JP6345346B2 (ja) | 分析装置及び分析方法及び分析プログラム | |
CN110928815B (zh) | 一种获取ahci基地址寄存器值的方法 | |
JP6350296B2 (ja) | 処理プログラム、処理装置および処理方法 | |
JP2019125353A (ja) | 電子文書中の文字列塊を推測する方法 | |
JP2017163429A (ja) | 時系列データ圧縮装置 | |
JP2017151986A (ja) | データを抽出する装置及び方法 | |
EP3358460B1 (en) | Systems and methods for computing mathematical functions | |
WO2019205064A1 (zh) | 神经网络加速装置与方法 | |
JP2020525963A (ja) | メディア特徴の比較方法及び装置 | |
JP6675408B2 (ja) | 情報処理システム、情報処理方法、情報処理プログラム、及び記憶媒体 | |
JP2016045721A (ja) | データ格納方法、三値内積演算回路、それを備えた半導体装置、及び、三値内積演算処理プログラム | |
JP6600077B2 (ja) | 画像処理装置、画像処理方法、及び画像処理プログラム | |
JP4865449B2 (ja) | 差分生成装置及び差分適用装置及び差分生成プログラム及び差分適用プログラム及び差分生成適用システム及び差分生成適用方法 | |
JP2006330124A (ja) | データ処理装置 | |
US8571846B2 (en) | Electronic device and method of generating composite electrical signals | |
JP2018185615A (ja) | 電子機器、方法、及びプログラム | |
JP2009225200A (ja) | A/d変換装置およびa/d変換方法 |
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 |