news 2026/8/5 2:42:07

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/8/4 8:37:38

PWS-5电子伺服组合式陶瓷股骨头疲劳试验机

PWS-5电子伺服组合式陶瓷股骨头疲劳试验机 一、概述 本机主要应用于 YY/T0809.6-2018带柄股骨部件颈部疲劳性能试验和性能要求、ISO7206-6&#xff1a;2013外科植入物部分和全髋关节假体的拉压疲劳试验。也可以用于带锁髓内钉、带柄股骨部件、有扭矩作用的带柄股骨部件、金属…

作者头像 李华
网站建设 2026/8/4 8:37:31

国内首个基于宏内核的嵌入式实时操作系统

在科技快速发展的今天&#xff0c;传统嵌入式操作系统存在实时性差&#xff0c;缺乏智能化等问题&#xff0c;难以胜任复杂的应用场景。 望获实时Linux&#xff0c;作为国科环宇重点研发的产品&#xff0c;是国内首个基于宏内核的嵌入式实时操作系统&#xff0c;具备智能化、硬…

作者头像 李华
网站建设 2026/8/4 9:35:11

YOKOGAWA701933 日本横河 701933 电流探头 50MHZ

‌ 横河701933电流探头 是一款高性能的电流测量工具&#xff0c;适用于各种电子测量需求。‌基本参数和功能 横河701933电流探头的具体参数包括&#xff1a;‌频带宽度‌&#xff1a;DC至50MHz ‌连续输入范围‌&#xff1a;30A rms ‌可测量导体直径‌&#xff1a;φ5mm ‌电缆…

作者头像 李华
网站建设 2026/8/4 9:35:20

救命神器9个一键生成论文工具,本科生轻松搞定毕业论文!

救命神器9个一键生成论文工具&#xff0c;本科生轻松搞定毕业论文&#xff01; 论文写作的救星&#xff0c;AI 工具如何改变你的学术之路 在当今这个信息爆炸的时代&#xff0c;学术写作正变得越来越复杂。尤其是对于本科生而言&#xff0c;撰写一篇结构严谨、内容充实的毕业论…

作者头像 李华
网站建设 2026/8/3 4:52:42

Python 高效实现 Word 转 PDF:告别 Office 依赖

Python 高效实现 Word 转 PDF&#xff1a;彻底告别 Office 依赖&#xff08;2026 年实用方案&#xff09; 在服务器、Docker、Linux 无头环境、自动化脚本、批量处理等场景下&#xff0c;依赖 Microsoft Office&#xff08;COM / win32com&#xff09;的方式已经越来越不可接受…

作者头像 李华