一种获取AHCI基地址寄存器值的方法技术

技术编号:23604561 阅读:30 留言:0更新日期:2020-03-28 05:41
本发明专利技术公开了一种获取AHCI基地址寄存器值的方法,其特征在于包括以下步骤:S100:枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值;S200:根据AHCI分类码的偏移地址、当前PCI设备的总线键值、设备键值及功能键值,计算输入值并向CPU输入端口输入当前输入值;S300:根据当前输入值获取CPU输出端口的当前输出值并判断当前输出值是否等于AHCI分类码,如果是,表示当前PCI设备为AHCI控制器,执行步骤S500,否则,执行步骤S400;S400:获取下一PCI设备的总线键值、设备键值及功能键值,执行步骤S200;S500:根据基地址寄存器的偏移地址、所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值,计算并获取AHCI基地址寄存器值。

A method of getting AHCI base address register value

【技术实现步骤摘要】
一种获取AHCI基地址寄存器值的方法
本专利技术属于数据恢复与硬盘固件安全
,涉及一种获取AHCI基地址寄存器值的方法。
技术介绍
在硬盘存储领域上,如何从底层实现对硬盘进行控制及数据恢复,现有技术中还没有涉及到类似的技术方案。随着硬盘技术的不断发展及硬盘使用量的扩大,如何更好的控制、监控硬盘及恢复硬盘数据都变得越发的重要。经研究发现:在硬盘AHCI的工作模式下,只有获取了PCI配置空间中AHCI基地址寄存器(AHCIBaseAddressRegister)的值后,才可以进行控制硬盘、恢复硬盘数据等操作。
技术实现思路
针对现有技术的不足,本专利技术提供了一种获取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设备:Bus02,Device00,Function00-VMwareInc.UHCIUSBControllerBus02,Device01,Function00-IntelCorporationEthernetControllerBus02,Device02,Function00-VMwareInC.HDAudioDeviceBus02,Device03,Function00-VMwareInc.EHClUSBControllerBus02,Device05,Function00-VMwareInc.AHClControllerBus03,Device00,Function00-LSILogic53C810DevlceMassStorageController从上述枚举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+本文档来自技高网...

【技术保护点】
1.一种获取AHCI基地址寄存器值的方法,其特征在于包括以下步骤:/nS100:枚举PCI总线的各个PCI设备并获取各个PCI设备的总线键值、设备键值及功能键值;/nS200:根据AHCI分类码的偏移地址、当前PCI设备的总线键值、设备键值及功能键值,计算输入值并向CPU输入端口输入当前输入值;/nS300:根据当前输入值获取CPU输出端口的当前输出值并判断当前输出值是否等于AHCI分类码,如果是,表示当前PCI设备为AHCI控制器,执行步骤S500,否则,执行步骤S400;/nS400:获取下一PCI设备的总线键值、设备键值及功能键值,执行步骤S200;/nS500:根据基地址寄存器的偏移地址、所述步骤S200中当前PCI设备的总线键值、设备键值及功能键值,计算并获取AHCI基地址寄存器值。/n

【技术特征摘要】
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输入端口输入当前输入值。...

【专利技术属性】
技术研发人员:梁效宁董超许超明林华彦
申请(专利权)人:四川效率源科技有限责任公司
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1