CN110928815B - 一种获取ahci基地址寄存器值的方法 - Google Patents
一种获取ahci基地址寄存器值的方法 Download PDFInfo
- Publication number
- CN110928815B CN110928815B CN201911196214.XA CN201911196214A CN110928815B CN 110928815 B CN110928815 B CN 110928815B CN 201911196214 A CN201911196214 A CN 201911196214A CN 110928815 B CN110928815 B CN 110928815B
- Authority
- CN
- China
- Prior art keywords
- value
- current
- input value
- ahci
- input
- 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
- 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 CN110928815A (zh) | 2020-03-27 |
CN110928815B true 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 (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840306A (zh) * | 2009-03-18 | 2010-09-22 | 研祥智能科技股份有限公司 | VxWorks操作系统中实现驱动SATA设备的方法和系统 |
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存储器 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7376782B2 (en) * | 2005-06-29 | 2008-05-20 | Intel Corporation | Index/data register pair for indirect register access |
US8601198B2 (en) * | 2011-06-30 | 2013-12-03 | Intel Corporation | Controllable transaction synchronization for merging peripheral devices |
-
2019
- 2019-11-29 CN CN201911196214.XA patent/CN110928815B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101840306A (zh) * | 2009-03-18 | 2010-09-22 | 研祥智能科技股份有限公司 | VxWorks操作系统中实现驱动SATA设备的方法和系统 |
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实现.微电子学与计算机.2019,第36卷(第6期),26-30. * |
徐佳安.基于UVM的SATA AHCI验证.计算机产品与流通.2017,(第11期),107-110. * |
Also Published As
Publication number | Publication date |
---|---|
CN110928815A (zh) | 2020-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8028015B2 (en) | Method and system for large number multiplication | |
US20140281371A1 (en) | Techniques for enabling bit-parallel wide string matching with a simd register | |
JP2022506345A (ja) | ドット積計算機およびその演算方法 | |
EP3038017A1 (en) | Method of generating descriptor for interest point in image and apparatus implementing the same | |
CN111492343A (zh) | 浮点乘法运算处理的系统和方法 | |
CN103180820A (zh) | 用于执行浮点除法的方法和装置 | |
KR20150099936A (ko) | 전자문서의 레이아웃 유지를 위한 대체폰트 적용 방법 및 그 장치 | |
KR102391385B1 (ko) | 내장형 로직 분석기 및 이를 포함하는 집적 회로 | |
US8855428B2 (en) | Computing device and boundary line graph checking method | |
US10747501B2 (en) | Providing efficient floating-point operations using matrix processors in processor-based systems | |
US20100095099A1 (en) | System and method for storing numbers in first and second formats in a register file | |
CN112347154A (zh) | 一种渣皮脱落指数计算方法、终端设备及存储介质 | |
CN110928815B (zh) | 一种获取ahci基地址寄存器值的方法 | |
JP5735150B2 (ja) | 正規化カウントを判定するプロセッサ及び方法 | |
CN108475213B (zh) | 图像处理装置、图像处理方法和图像处理程序 | |
JP6345346B2 (ja) | 分析装置及び分析方法及び分析プログラム | |
US10613861B2 (en) | Programmable linear feedback shift register | |
US20130121558A1 (en) | Point Selection in Bundle Adjustment | |
JP2016133986A (ja) | 処理プログラム、処理装置および処理方法 | |
JP2017151986A (ja) | データを抽出する装置及び方法 | |
JP6324264B2 (ja) | 三値内積演算回路、三値内積演算処理プログラム、及び、三値内積演算回路による演算処理方法 | |
JP2020525963A (ja) | メディア特徴の比較方法及び装置 | |
EP3358460B1 (en) | Systems and methods for computing mathematical functions | |
US11379224B2 (en) | Scale calculation apparatus and computer readable medium | |
US10635395B2 (en) | Architecture and instruction set to support interruptible floating point division |
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 |