是否有可能在特定时间唤醒 Linux 设备

是否有可能在特定时间唤醒 Linux 设备

我在嵌入式主板上运行 Debian。我想在晚上 10 点挂起或休眠主板,并在早上 7 点唤醒它。使用 / 挂起/休眠主板没有问题pmi action suspendhibernate但是,我想知道是否可以安排主板在特定时间唤醒(也许使用 cron 或其他方法?)。如果可以,您能否解释一下我如何做到这一点所需的所有步骤?

请注意,可以使用外部中断信号唤醒嵌入式电路板,或者使用 PIC 等 MCU、定时器和继电器构建简单电路来设置何时唤醒电路板。但这是不是我所要求的。我想知道在 Linux 上是否有任何方法可以执行唤醒操作。该板有一个 WiFi 连接,除了电源线外,无法连接其他电缆(请不要写有关局域网唤醒的内容)。

答案1

考虑一下你的要求。你想要一个关闭电源的设备在某个特定时间执行一些代码来打开它。什么会执行该代码?什么会制作设备是否执行该代码?

根据设备的睡眠深度,可以通过配置 BIOS 在特定时间启动设备,如果BIOS 支持此功能。关机时,您将直接摆弄 CMOS 内存中的位,并希望不会损坏任何东西,但原则上这应该是可行的,如果您不需要在 BIOS 升级的情况下恢复能力,它甚至可能是可行的。然而,这仍然取决于设备是否完全关闭;必须有某种东西监视系统实时时钟并在达到预选值时执行开机序列。局域网唤醒、铃声唤醒等技术也是如此,它们都依赖于某物触发开机事件。(尽管你要求回答者不要这样做,但我还是因为写了关于局域网唤醒的内容而被否决了……?)

更确切地说,在 ATX 中触发的(即使是按下电源按钮)是从一种电源状态转换到另一种电源状态。完全关闭 ATX 系统的唯一方法是使用 PSU 上的开关关闭电源,或拔下电源线。这与 AT PSU 不同,AT PSU 在关闭计算机时实际上会完全关闭电源,因为电源开关与交流电源线一致和 ATX PSU 电源开关(不是计算机的电源按钮)一样。但这实际上并没有什么区别,因为无论系统是完全关闭还是只是运行某种循环,等待系统时钟达到特定值,操作系统都不会运行,即使 CPU 已打开电源(这是主板和 BIOS 的实现细节;它们可能会使用辅助的低功耗 CPU 来执行此类简单任务),也不会运行您安装的代码,因此就 CPU 而言,任何地方都看不到 Linux,更不用说 cron 之类的东西了。

底线;如果你所问的问题可以直接通过 Linux 实现,我会感到非常惊讶,尽管它可能通过查看周围硬件和固件的更大图景,可以实现这一点。最安全的选择几乎肯定是正是外部触发器,在关机时进行编程,以在给定间隔之后或在给定时间(如果它具有独立的 RTC)触发开机序列。

答案2

对于正在搜索此内容的其他任何人,请查看 RTC 的界面。在我当前的系统上,写入未来的日期将使/sys/class/rtc/rtc0/wakealarm系统在未来唤醒。例如:

# wake up the system in 3 minutes
sh -c "echo `date '+%s' -d '+ 3 minutes'` > /sys/class/rtc/rtc0/wakealarm"

将更改为接近您想要的+ 3 minutestomorrow 0700,除非您在午夜后运行命令......

我发现这个linux.com

相关内容