【问题标题】:Linux Suspend To RAM from idle loopLinux 从空闲循环挂起到 RAM
【发布时间】:2015-03-24 13:19:33
【问题描述】:

我有一个关于 Linux 内核中的 STR(挂起到 RAM)的问题。

我正在开发一个小型嵌入式 Linux(内核 3.4.22),我想实现一种机制,让系统在无事可做时进入睡眠状态(挂起到内存)。

这样做是为了省电。

硬件支持 RAM 自刷新,这意味着其内容将保持持久性。 我会处理所有其他应该完成的事情(例如保持 CPU 上下文等……)

我想从空闲循环中触发内核 PM(电源管理)子系统。 当系统无事可做时,它应该进入睡眠状态。

硬件还支持唤醒系统的方法。

做了一些研究,我发现Linux通过编写“echo“mem”> /sys/power/state”为用户空间提供了切换到STR的选项。 这将触发 PM 子系统并执行相关回调。

我的问题是: 除了写入上述过程之外,还有其他标准的替代方法可以进入 STR 吗?

有没有人试图将系统从空闲循环代码放入STR?

谢谢,

【问题讨论】:

  • 据我所知,这是一种标准方式。但是,嘿,您也许必须考虑使用运行时 PM。

标签: linux linux-kernel embedded suspend


【解决方案1】:

为什么需要另一种方法? Linux 将所有内容都视为文件。 psudo 文件的内容决定了系统的状态,这有什么奇怪的吗?自己检查。 pm-utils 是用于管理系统状态的流行工具集。所有的命令都只是调用 /sys 文件。

【讨论】:

  • 问题是我想从内核空闲循环中触发它。我尝试执行与 sysfs 写入回调相同的操作,但这无法完成,因为 PM 调用 sync 需要上下文切换。所以我想知道是否还有其他选择。
【解决方案2】:

此策略实际上取决于平台。您必须查看平台的 cpuidle 驱动程序才能了解它在做什么。例如,在 atmel 平台上,它同时使用 RAM 自刷新和 WFI。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多