搜索 ACPI 标识符
查明 ACPI 或 PNP 标识符属于哪家制造商;如果是标准标识符,还能知道是什么设备。按 Windows 设备管理器、Linux 的 /sys/bus/acpi/devices 文件夹或 DSDT 表中 _HID 显示的原样粘贴标识符,然后按搜索。
接受 ACPI\VEN_INT&DEV_33A1、ACPI\PNP0C0A、INTC1055、PNP0C0A:00、0x0A0CD041 或仅前缀
示例:

工作原理

固件通过 ACPI 表描述操作系统无法自行发现的设备,例如电池、按钮、传感器、I²C 控制器或 TPM。每个设备都有一个硬件标识符(_HID),由制造商前缀和该制造商选定的四位十六进制数字组成。

前缀由 UEFI Forum 在两个注册清单中分配:三个字母的 PNP ID 注册清单和四个字符的 ACPI ID 注册清单。本工具会在这两个注册清单中查找前缀;对于由 Microsoft 和 ACPI 规范定义的标准标识符,还会告诉您是什么设备。

示例

ACPI\PNP0A08Microsoft — PCI Express Root BridgeWindows 设备管理器的格式。PNP0xxx 是任何制造商都可以使用的通用标识符。
ACPI\VEN_INT&DEV_33A1Intel Corporation — Intel Power Engine Plug-in (Modern Standby)Windows 在硬件 ID 中使用的 VEN_/DEV_ 形式。Intel 在 ACPI ID 注册清单出现之前就已使用 INT 前缀。
Name (_HID, EisaId ("PNP0C0A"))PNP0C0A — Control Method Battery — EisaId 0x0A0CD041反汇编后的 DSDT 表中的一行。本工具也接受 EisaId 生成的压缩整数。
10EC5640Realtek Semiconductor Co., Ltd.部分制造商使用 PCI-SIG 分配给它们的供应商 ID 作为前缀;此时制造商信息来自 PCI 目录。

使用场景

  • 识别设备管理器中硬件 ID 以 ACPI\ 开头的未知设备。
  • 根据 _HID 为笔记本电脑的传感器、按钮或 I²C 控制器查找正确的驱动程序。
  • 在调试固件或编写 ACPI 补丁时,解读 DSDT 或 SSDT 表中声明的设备。
  • 了解显示器在 EDID 中报告的三字母制造商代码对应哪家公司。

常见问题

在哪里可以找到设备的 ACPI 标识符?

在 Windows 中,在设备管理器中打开设备的属性,在“详细信息”选项卡的 "硬件 Id" 属性中查看。在 Linux 中,每个设备都显示为 /sys/bus/acpi/devices 下名称中带有其标识符的文件夹,该文件夹中的 hid 文件也包含该标识符。在用 acpidump 和 iasl 反汇编的固件表中,它是每个设备的 _HID 对象。

为什么能找到制造商却找不到设备?

UEFI Forum 的注册清单只分配前缀。其后四位数字的含义由各制造商自行决定,并没有像 PCI 或 USB 那样的公开目录。只有标准标识符(如 Microsoft 的 PNP0xxx 或规范中的 ACPI00xx)以及一些广泛使用的标识符,才能知道对应的设备。

PNP ID 和 ACPI ID 有什么区别?

PNP ID 的前缀为三个字母,源自 20 世纪 90 年代的即插即用;同样的代码也用于在 EDID 中标识显示器制造商。ACPI ID 的前缀为四个字母或数字,是当前使用的格式。两者在前缀之后都带有四位十六进制数字。

什么是压缩的 EisaId?

在 ASL 语言中,EisaId 宏会将 PNP ID 转换为 32 位整数:每个字母占 5 位,产品编号占随后的两个字节。因此,反汇编表时有时会看到 0x0A0CD041 这样的数字,而不是 PNP0C0A。本工具接受这种数字,并显示任意 PNP ID 的压缩形式。

数据多久更新一次?

本工具使用 UEFI Forum 发布的 ACPI ID 和 PNP ID 注册清单的副本,并定期更新。结果旁会显示该副本的日期以及前缀的批准日期。