news 2026/5/2 13:11:45

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/25 17:26:56

基于A2A协议的Golang多智能体协同系统实战

引言 随着人工智能技术的迅猛发展,单一智能体系统已难以应对日益复杂的现实世界任务。多智能体系统(Multi-Agent System, MAS)通过分布式智能体之间的协同与合作,展现出强大的问题解决能力,在自动驾驶、智能制造、智慧城市等领域得到广泛应用。 在多智能体系统中,智能体…

作者头像 李华
网站建设 2026/4/27 7:05:50

开源二手交易小程序源码系统,打造个性化商城,功能一应俱全

温馨提示&#xff1a;文末有资源获取方式 今天&#xff0c;我要向大家推荐一款全面的二手交易小程序源码系统&#xff0c;它基于先进的技术栈开发&#xff0c;源码完全开源&#xff0c;支持二次开发&#xff0c;让您轻松搭建属于自己的二手交易商城。源码获取方式在源码闪购网。…

作者头像 李华
网站建设 2026/4/29 11:13:31

好写作AI:从数据到观点——AI在实证研究中的逻辑链条构建

当数据沉默时&#xff0c;谁能为它发声&#xff1f;面对满屏的实验数据、调查统计和案例分析&#xff0c;许多学生陷入相似的困境&#xff1a;“我的数据说明了什么&#xff1f;”“如何让这些数字形成有说服力的论证&#xff1f;”实证研究的核心挑战&#xff0c;往往不在于数…

作者头像 李华
网站建设 2026/5/1 22:19:30

书匠策AI:教育论文数据分析的“时空折叠器”,让你的研究穿越未来

在教育研究的宇宙中&#xff0c;数据是星辰&#xff0c;分析是望远镜&#xff0c;而结论则是我们试图捕捉的遥远星系。但传统数据分析工具像一台老式天文台——操作复杂、视野有限&#xff0c;研究者常被困在“清洗数据”“调试代码”“选择图表”的琐碎中&#xff0c;真正的研…

作者头像 李华
网站建设 2026/5/1 8:47:16

书匠策AI:教育论文的“数据炼金术士”,让数字开口说故事的秘密武器——官网:http://www.shujiangce.com | 微信公众号搜一搜“书匠策AI”

在学术写作的江湖里&#xff0c;数据是“武林秘籍”&#xff0c;而数据分析则是“绝世武功”。但面对SPSS的报错、Python的代码、R语言的版本兼容问题&#xff0c;许多教育研究者常陷入“数据焦虑”&#xff1a;明明有满脑子的理论&#xff0c;却被技术门槛卡在论文的“最后一公…

作者头像 李华
网站建设 2026/5/2 5:35:31

Linux 命令:uniq

概述 uniq 命令是对连续重复行去重/统计的工具&#xff0c;常与 sort 配合使用&#xff08;先排序让重复行连续&#xff0c;再去重&#xff09;&#xff0c;核心用于文本去重、统计重复行出现次数&#xff0c;是处理日志、数据清单的高频组合工具&#xff0c;注意&#xff1a;直…

作者头像 李华