ACPI 唤醒状态可以从内核修改吗?

ACPI 唤醒状态可以从内核修改吗?

最近,我开始尝试使用 LAN 唤醒,以使我的家庭设置更加舒适,但在此过程中我对 ACPI 配置感到好奇。

快速检查后,我注意到我的以太网控制器支持 WOL,所以我玩了一下:

Settings for eth0:
    [...]
    Supports Wake-on: pumbg
    Wake-on: g

经过一些测试,我意识到:

  • 当我的计算机挂起时,WOL 在另一台设备上工作正常。
  • 当我的计算机关闭时,什么也没有发生。

现在的问题是,我想使用 WOL,以便我的计算机可以在我到家之前做好准备。如果我需要将计算机保持在挂起模式才能工作(系统无论如何都会在几秒钟内恢复),我就不需要该功能。

我调查了一下,发现我的以太网卡有一个 S4S状态条目/proc/acpi/wakeup

Device  S-state   Status    Sysfs node
PXSX    S4        *enabled  pci:0000:09:00.0

根据我的阅读,这意味着当且仅当系统处于状态 S4(或以下)(对应于休眠状态)时,我的以太网控制器才可以用作触发器。这解释了为什么我可以在挂起模式 (S1/S3) 下使用 WOL,但一旦运行就不能使用poweroff(我相信这会将机器置于 S5,软关闭)。

我对 ACPI 不太熟悉,而且我对硬件的了解当然不会延伸到以太网控制器。我想知道的是:有什么方法可以让我的系统保持 S5 中以太网控制器的电源(当系统关闭时)?我的 (3.13) Linux 内核是否有发言权,或者这完全取决于我的主板(或控制器)的设计?

似乎我可以通过写入来决定哪些设备可以用作触发器/proc/acpi/wakeup(我相信现在已弃用)。但我可以更具体一些,并决定设备可以在哪种状态下唤醒机器吗?

答案1

这取决于主板的设计。

/proc/acpi/wakeup根据 ACPI 表中主板的自我描述生成。它列出了您的计算机可用于唤醒事件的所有设备以及主板支持这些唤醒的状态。您不能比启用/禁用唤醒源更具体,但 BIOS 菜单中可能有更多设置。

你说得对,poweroff将机器置于 S5 中。但S5和S4是非常相似的状态。通常,唯一的区别是主板芯片上的寄存器中设置为休眠状态的某些位。这意味着就硬件而言,如果您设法通过拨动主板的 I/O 端口或写入 I²C 设备来手动更改相关寄存器,则通常可以配置从 S5 唤醒。您需要阅读芯片组、SuperIO 芯片等的数据表才能正常工作。或者,也可以修改init守护程序,将关闭序列的最后部分替换为休眠+重新启动之类的内容,以强制 BIOS 保持唤醒源处于活动状态。

由于您的计算机支持从 S4 唤醒,因此最简单的解决方案是使用休眠(例如通过pm-hibernate)而不是使用poweroff

相关内容