1

我正在努力在 ARM 上实现休眠(挂起到磁盘),并通过使用Sebastian Capella 的 swsusp ARM 补丁成功地做到了这一点。现在我可以使用该命令使内核休眠(暂停到sd卡中的交换分区),echo disk > /sys/power/state系统将在下次开机时恢复其状态。但是,如果我再次按下重置,内核将遵循正常的引导顺序。

我的问题是如何使该区域中的交换区域和休眠图像永久化,以便在每次重置时它都会从该永久图像中唤醒?我已经给出了值,swapiness=0以便我希望在系统处于活动状态时不会再有任何页面交换。内核如何决定是正常启动还是从 ( resume=/dev/swap_partition) 休眠中唤醒?

我在互联网上进行了很多搜索,但对 Linux 内核如何从休眠中唤醒以及恢复一次后如何处理交换并没有清楚的了解。谢谢您的时间

我的内核版本是 3.14

4

1 回答 1

0

下面是一些 Linux 休眠 API 调用的代码跟踪:

http://www.srcmap.org/sd_share/4/839d1dea/Linux_kernel_Hibernation_Resume.html

大多数代码跟踪是针对 PowerPC 的。但它可能会让您对内核从休眠中恢复流程有所了解。

对于 ARM,也许您需要:

  • 在休眠时,只需将永久交换文件标记为交换文件。
  • 在恢复时,防止系统将该交换文件“取消标记”为休眠文件。
  • 内核映像升级要非常小心,交换文件内容与内核映像紧密耦合。内核中的任何次要 chg/recompile 都会将交换文件标记为无效并触发重新启动操作。为此添加大量 printk() 日志。
于 2016-03-31T00:13:51.740 回答