news 2026/4/18 7:53:27

ACPI中的HID(硬件ID)和PCI配置空间中的设备标识符的关系ACPI!ACPIBuildProcessDevicePhaseAdrOrHid函数分析有要么有HID或要么有ADR

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI中的HID(硬件ID)和PCI配置空间中的设备标识符的关系ACPI!ACPIBuildProcessDevicePhaseAdrOrHid函数分析有要么有HID或要么有ADR

ACPI中的HID(硬件ID)和PCI配置空间中的设备标识符的关系

第一部分:

ACPI!ACPIBuildProcessDevicePhaseAdrOrHid函数分析有要么有HID或要么有ADR

NTSTATUS
ACPIBuildProcessDevicePhaseAdrOrHid(
IN PACPI_BUILD_REQUEST BuildRequest
)

{

nsObject = ACPIAmliGetNamedChild(
deviceExtension->AcpiObject,
PACKED_HID
);
if (nsObject == NULL) {

//
// Otherwise, there had better be an _ADR present
//
nsObject = ACPIAmliGetNamedChild(
deviceExtension->AcpiObject,
PACKED_ADR
);

参考:

Device (AGP)
{
Name (_ADR, 0x00010000) // _ADR: Address
}

Device (ISA)
{
Name (_ADR, 0x00070000) // _ADR: Address

Device (MBRD)
{
Name (_HID, EisaId ("PNP0C02")) // _HID: Hardware ID
Name (_UID, 0x1F) // _UID: Unique ID

参考结束:

第二部分:

dsdt.dsl:1767: Device (AGP) 0x10000 "PCI\VEN_8086&DEV_7191&SUBSYS_00000000&REV_01\3&61aaa01&0&08" 1
dsdt.dsl:1772: Device (ISA) 0x70000 "PCI\VEN_8086&DEV_7110&SUBSYS_00000000&REV_08\3&61aaa01&0&38"
dsdt.dsl:2272: Device (PWR) 0x00070003
dsdt.dsl:2284: Device (USB) 0x00070002
dsdt.dsl:2294: Device (IDE) 0x00070001 "PCI\VEN_8086&DEV_7111&SUBSYS_197615AD&REV_01\3&61aaa01&0&39"


dsdt.dsl:5026: Device (EXPL) "ACPI\PNP0C02\4"
dsdt.dsl:5099: Device (DMAR) "ACPI\PNP0C02"
dsdt.dsl:5134: Device (VMGC) "ACPI\VMW0001"
p2p0 110000 "PCI\VEN_15AD&DEV_0790&SUBSYS_00000000&REV_02\3&61aaa01&0&88" 2
p2p1 120000
p2p2 130000
p2p3 140000

Device (PE40) 150000 "PCI\VEN_15AD&DEV_07A0&SUBSYS_00000000&REV_01\3&61aaa01&0&A8" 3
Device (PE50) 160000 "PCI\VEN_15AD&DEV_07A0&SUBSYS_00000000&REV_01\3&61aaa01&0&B0" b
Device (PE60) 170000 "PCI\VEN_15AD&DEV_07A0&SUBSYS_00000000&REV_01\3&61aaa01&0&B8" 13
Device (PE70) 180000 "PCI\VEN_15AD&DEV_07A0&SUBSYS_00000000&REV_01\3&61aaa01&0&C0" 1b

第三部分:

ACPI HID(硬件ID)和PCI配置空间中的设备标识符是‌不同但相关‌的概念,它们服务于不同的目的,但共同用于设备识别和驱动程序匹配。

‌ACPI HID(硬件ID)‌:是ACPI(高级配置与电源接口)命名空间中用于标识设备的字符串,由固件(如BIOS/UEFI)定义。
它遵循ABC[D]xxxx格式,其中ABC[D]是供应商ID,xxxx是设备ID。对于PCI主桥,其ACPI HID通常是PNP0A03或PNP0A08,这告诉操作系统这是一个PCI根总线控制器。
ACPI HID用于操作系统在ACPI命名空间中枚举设备并加载相应的驱动程序。‌

‌PCI配置空间中的设备标识符‌:是PCI本地总线规范定义的硬件寄存器,位于每个PCI设备的配置空间头部。
它主要包括‌Vendor ID‌(供应商ID)和‌Device ID‌(设备ID),这两个16位的值共同唯一标识一个PCI设备的型号和制造商。这些信息是PCI设备固有的,由硬件厂商在设计芯片时写入。

‌关键区别与联系‌:

‌层级不同‌:ACPI HID是平台固件层面的抽象标识,用于操作系统发现和管理硬件资源;
PCI Vendor ID/Device ID是总线协议层面的物理标识,用于PCI子系统内部识别设备。
‌用途不同‌:ACPI HID(如PNP0A03)让操作系统知道“这是一个PCI根桥”,从而为其分配资源并枚举其下的PCI总线;
PCI Vendor ID/Device ID则让操作系统知道“这个PCI设备是一个Intel 82574L网卡”或“一个NVIDIA GeForce显卡”,从而加载具体的设备驱动程序。
‌关联性‌:一个PCI设备(如网卡、显卡)会同时拥有PCI配置空间中的Vendor ID/Device ID,
以及一个ACPI HID(通常是PNP0A03或PNP0A08,如果它是根桥;对于普通PCI设备,其ACPI标识可能通过其他方式如_CID或设备树关联)。操作系统会先通过ACPI HID发现PCI根桥,然后通过扫描PCI总线读取

各个设备的Vendor ID/Device ID来识别它们。

简而言之,ACPI HID告诉你“设备在系统中的角色”(如PCI根桥),而PCI配置空间的Vendor ID/Device ID告诉你“设备的具体型号”。
它们是操作系统在不同层级识别硬件的两个关键信息。

第二部分:

1: kd> x ACPI!ACPIBuild*dispatch
f74380d4 ACPI!AcpiBuildPowerResourceDispatch = <function> *[5]
f7438104 ACPI!AcpiBuildThermalZoneDispatch = <function> *[4]
f74380e8 ACPI!AcpiBuildRunMethodDispatch = <function> *[7]
f7438008 ACPI!AcpiBuildDeviceDispatch = <function> *[23]
f74380c4 ACPI!AcpiBuildOperationRegionDispatch = <function> *[4]
1: kd> dx -r1 (*((ACPI!long (*(*)[23])(_ACPI_BUILD_REQUEST *))0xf7438008))
(*((ACPI!long (*(*)[23])(_ACPI_BUILD_REQUEST *))0xf7438008)) [Type: long (* [23])(_ACPI_BUILD_REQUEST *)]
[0] : 0xf73fb840 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[1] : 0x0 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[2] : 0xf73fce98 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[3] : 0xf73fb118 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[4] : 0xf73fb09e [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[5] : 0xf73fb40c [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[6] : 0xf73fb7a0 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[7] : 0xf73fb246 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[8] : 0xf73fb72e [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[9] : 0xf73fafda [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[10] : 0xf73fddf2 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[11] : 0xf73fafda [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[12] : 0xf73fd18a [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[13] : 0xf73fafda [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[14] : 0xf73fcf04 [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[15] : 0xf73fafda [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[16] : 0xf73fcfca [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[17] : 0xf73fafda [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[18] : 0xf73fd09e [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[19] : 0xf73fafda [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[20] : 0xf73fb36a [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[21] : 0xf73faf0a [Type: long (*)(_ACPI_BUILD_REQUEST *)]
[22] : 0xf73fb57c [Type: long (*)(_ACPI_BUILD_REQUEST *)]
1: kd> dds 0xf7438008
f7438008 f73fb840 ACPI!ACPIBuildProcessGenericComplete [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 4654]
f743800c 00000000
f7438010 f73fce98 ACPI!ACPIBuildProcessDeviceFailure [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2507]
f7438014 f73fb118 ACPI!ACPIBuildProcessDevicePhaseAdrOrHid [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2844]
f7438018 f73fb09e ACPI!ACPIBuildProcessDevicePhaseAdr [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2754]
f743801c f73fb40c ACPI!ACPIBuildProcessDevicePhaseHid [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 3434]
f7438020 f73fb7a0 ACPI!ACPIBuildProcessDevicePhaseUid [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 4547]
f7438024 f73fb246 ACPI!ACPIBuildProcessDevicePhaseCid [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 3018]
f7438028 f73fb72e ACPI!ACPIBuildProcessDevicePhaseSta [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 4479]
f743802c f73fafda ACPI!ACPIBuildProcessDeviceGenericEvalStrict [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2657]
f7438030 f73fddf2 ACPI!ACPIBuildProcessDevicePhaseEjd [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 3247]
f7438034 f73fafda ACPI!ACPIBuildProcessDeviceGenericEvalStrict [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2657]
f7438038 f73fd18a ACPI!ACPIBuildProcessDevicePhasePrw [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 3935]
f743803c f73fafda ACPI!ACPIBuildProcessDeviceGenericEvalStrict [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2657]
f7438040 f73fcf04 ACPI!ACPIBuildProcessDevicePhasePr0 [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 3572]
f7438044 f73fafda ACPI!ACPIBuildProcessDeviceGenericEvalStrict [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2657]
f7438048 f73fcfca ACPI!ACPIBuildProcessDevicePhasePr1 [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 3684]
f743804c f73fafda ACPI!ACPIBuildProcessDeviceGenericEvalStrict [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2657]
f7438050 f73fd09e ACPI!ACPIBuildProcessDevicePhasePr2 [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 3803]
f7438054 f73fafda ACPI!ACPIBuildProcessDeviceGenericEvalStrict [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2657]
f7438058 f73fb36a ACPI!ACPIBuildProcessDevicePhaseCrs [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 3147]
f743805c f73faf0a ACPI!ACPIBuildProcessDeviceGenericEval [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 2562]
f7438060 f73fb57c ACPI!ACPIBuildProcessDevicePhasePsc [d:\srv03rtm\base\busdrv\acpi\driver\nt\buildsrc.c @ 4228]
f7438064 00000000
f7438068 00000000
f743806c 00000000

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 8:20:37

【基于STM32单片机老人防丢智能拐杖 盲人导航定位跌倒检测设计系统 系统设计(实物+程序+原理图+其他资料)】

随着我国人口老龄化的加剧和期望寿命的延长&#xff0c;老年人的健康安全问题成为当今 社会首要解决的问题。通过计算机技术来解决老年人的医疗保健问题逐渐成为热门 的研究领域。而据相关调查显示&#xff0c;老年人到医院因伤就诊的病例中&#xff0c;跌倒病例已经 超过了50%…

作者头像 李华
网站建设 2026/4/18 5:14:27

正式发布:RT-Thread首款双核低功耗AI语音产品

RT-Thread与英飞凌深度协同打造的行业突破性产品——基于英飞凌PSOC™ Edge系列微控制器的低功耗AI开发平台“Edgi Talk”&#xff0c;今日正式发布&#xff01;我们将于今晚举行线上新品发布直播&#xff0c;深度解析技术亮点与应用场景&#xff0c;更有现场演示与互动答疑。产…

作者头像 李华
网站建设 2026/4/18 6:26:13

好写作AI:综述类文献的智能整合——AI在知识脉络梳理中的角色

当海量文献成为思维的负担面对一个研究主题&#xff0c;检索到数百篇相关文献&#xff0c;你是否感到无所适从&#xff1f;信息过载的时代&#xff0c;撰写一篇合格的文献综述&#xff0c;最大的挑战已非“找不到资料”&#xff0c;而是 “理不清脉络” —— 如何在庞杂的文献中…

作者头像 李华
网站建设 2026/4/18 6:29:59

调音神器,百万调音师专业工具

今天再给大家推荐一款与音频相关的工具&#xff0c;也是非常好用&#xff0c;有需要的小伙伴可以下载收藏。 软件介绍 今天给大家推荐的这款软件Melodyne是一款非常专业的音频编辑工具&#xff0c;据说百万调音师用的就是这款工具。 这款软件最大的特点是以“音符”为单位&…

作者头像 李华
网站建设 2026/4/17 14:51:21

LLM微调的关键要点:如何打造高效、可靠的AI模型

.01 概述 在人工智能&#xff08;AI&#xff09;领域&#xff0c;近年来大规模语言模型&#xff08;LLM&#xff09;的发展给我们带来了巨大的惊喜。无论是文本生成、翻译、摘要&#xff0c;还是问答任务&#xff0c;LLM都表现出了强大的多功能性。然而&#xff0c;尽管这些模…

作者头像 李华