我必须禁用某些事件为了避免在我的台式机中挂起后立即唤醒,我通过反复试验做到了(效果很好,所以这不是问题)。但我想知道......例如在我的笔记本电脑中我有一个很长的列表/proc/acpi/wakeup
:
[...]
RP03 S4 *disabled
PXSX S4 *disabled
RP04 S4 *disabled pci:0000:00:1c.3
PXSX S4 *enabled pci:0000:03:00.0
RP06 S4 *disabled
[...]
我四处搜寻,找不到解释第一列中 4 个字母代码含义的列表的地方。我想象后面带有设备名称的事件是由该设备链接/生成的,但我对其余的大多数事件感到茫然……减去疯狂的猜测。
例如,我如何知道事件RP06
是什么?哪里有清单吗?或者这些代码是特定于供应商的?
答案1
这些代码来自 BIOS 的 DSDT(差异化系统描述表)。此“表”描述了主板上的集成设备、它们的依赖性和电源管理功能。
DSDT 中的设备按树形排列,每个路径组件限制为 4 个字符。其中的代码/proc/acpi/wakeup
是供应商用于设备的设备的最后一个路径组件(也称为名称)。
它们本质上是特定于供应商的,因为供应商可以根据自己的喜好命名任何设备。但有一些名称在许多供应商之间是通用的,或者是因为它们被用作示例ACPI规范或者因为它们是明显的缩写:
- PS2K:PS/2 键盘
- PS2M:PS/2 鼠标
- PWRB 或 PBTN:电源按钮
- SLPB:睡眠按钮
- LID:笔记本电脑盖
- RP0x 或 EXPx:PCIE 插槽 #x(又名 PCI Express 根端口 #x)
- EHCx 或 USBx:USB 2.0 (EHCI) 芯片
- XHC:USB 3.0 (XHCI) 芯片
- PEGx:用于图形插槽 #x 的 PCI Express
- GLAN 或 IGBE:千兆位以太网
答案2
PCI 设备的明显解决方案:
# cat /proc/acpi/wakeup
Device S-state Status Sysfs node
GP12 S4 *enabled pci:0000:00:07.1
GP13 S4 *enabled pci:0000:00:08.1
XHC0 S4 *enabled pci:0000:08:00.3
GPP0 S4 *enabled pci:0000:00:01.1
GPP8 S4 *enabled pci:0000:00:03.1
GPP1 S4 *enabled pci:0000:00:01.2
PTXH S4 *enabled pci:0000:02:00.0
PT20 S4 *enabled pci:0000:03:00.0
...
是按公交车号码搜索:
# lspci | grep 08:00.3
08:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
# lspci | grep 02:00.0
02:00.0 USB controller: Advanced Micro Devices, Inc. [AMD] Device 43ee
答案3
您可以为您的计算机提取并反编译 ACPI 表。
通过使用Intel的ASL编译器,您可以将系统DSDT表转换为源代码。
您需要安装acpica-tools
:
- 乌班图:
sudo apt-get install acpica-tools
- 拱门Linux:
sudo pacman -S --needed acpica
步骤如下:
- 提取 ACPI 表(以 root 身份):
sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.dat
- 反编译:
iasl -d dsdt.dat
,我们得到输出文件dsdt.dsl
- 查找定义的设备
/proc/acpi/wakeup
并将其与dsdt.dsl
参考
答案4
Linux内核acpi 命名空间的文档给出了一些关于这些缩写可能是什么的诱人提示,例如“Scope(RP03):PCI0电源范围”,以及内核源代码因为 /proc 文件说它是 a
dev->pnp.bus_id
,但这没有帮助。
958页面ACPI 规范 5.0很有趣,但对这些名字也没有帮助。