ACPI 定义块:系统总线的 _SB 和 _SB_ 之间的区别

ACPI Definition Block: Difference between _SB and _SB_ for System bus

我正在研究 edk2 (UEFI)。因此,我对 DSDT table 中定义的设备路径有些担忧。在这个table中,我们使用/_SB作为系统总线的根,但在Linux上是/_SB_。例如,我通过命令检查

 $ cat /sys/devices/LNXSYSTM\:00/LNXSYBUS\:00/PNP0A08\:00/device\:00/path

有时,我也看到一些 ACPI table 使用 /_SB_ 来引用设备路径。

你知道它有什么不同吗?怎么用?

非常感谢!

ACPI 规范(我在这里进一步参考 v6.3)第 19.3.1 章定义了允许在名称中使用的字符。虽然它没有清楚地说明短于 4 个字符的名称发生了什么。第 5.3 章对此进行了说明

By convention, when an ASL compiler pads a name shorter than 4 characters, it is done so with trailing underscores (‘_’). See the language definition for AML NameSeg in the ACPI Source Language (ASL) Reference chapter.

这一点也被20.4章证实了,它展示了AML中的字节流。例如名字

\S2

翻译成

RootChar 'S2__'

也就是说,\_SB\_SB_ 是同名的等效符号。