我正在尝试构建一个基于 Atmel AT91SAM9G25 SoC (ARM9 @ 400Mhz) CPU 的嵌入式 Linux 系统。我正在使用 AT91Bootstrap 引导加载程序。
正如我的帖子主题所示,我对从休眠功能恢复有疑问。挂起到磁盘进程似乎工作正常,但唤醒后,系统不会恢复以前的会话。
我面临的问题详细如下:
我使用 buildroot 为我的系统构建了一个 Linux 映像,并相应地激活/配置了以下内核参数:
电源管理选项 --> 挂起至 RAM 并待机
电源管理选项 --> 休眠和默认恢复分区/dev/mmcblk0p3
(我使用的内核版本是4.0.4,/dev/mmcblk0p3
是sdcard的交换分区。)
当我第一次启动系统时,我注意到交换分区没有自动安装。我设法使用mkswap /dev/mmcblk0p3
和命令手动安装交换分区swapon -a
。我还将相应的行插入到 fstab 文件中:
/dev/mmcblk0p3 none swap sw 0 0
重新启动后,我找不到安装的任何交换分区。为了解决这个问题,我将提到的mkswap
和swapon
命令添加到了 inittab 文件中。重新启动后,交换分区在启动时已成功挂载。
安装交换分区后,我请求系统休眠(挂起到磁盘)。挂起过程似乎按预期工作。
当我重新连接电源时,问题就出现了。尽管系统似乎知道它是从挂起状态唤醒的,但它不会恢复之前的会话。这就像执行冷启动。
暂停到内存工作正常。我可以让系统进入睡眠状态rtcwake -s20 -m mem
,当它醒来时,之前的会话会成功恢复。因此,我认为交换分区出了问题,但我已经没有想法了。
我尝试使用以下命令使系统休眠:
rtcwake -s20 -m disk
echo shutdown > /sys/power/disk
echo disk > /sys/power/state
pm-hibernate
但如上所述,它们都失败了。
可以找到一些有用的 dmesg 和控制台输出这里
对我可能做错的事情有什么建议或想法吗?