从休眠状态恢复在嵌入式 Linux 系统上不起作用

从休眠状态恢复在嵌入式 Linux 系统上不起作用

我正在尝试构建一个基于 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

重新启动后,我找不到安装的任何交换分区。为了解决这个问题,我将提到的mkswapswapon命令添加到了 inittab 文件中。重新启动后,交换分区在启动时已成功挂载。

安装交换分区后,我请求系统休眠(挂起到磁盘)。挂起过程似乎按预期工作。

当我重新连接电源时,问题就出现了。尽管系统似乎知道它是从挂起状态唤醒的,但它不会恢复之前的会话。这就像执行冷启动。

暂停到内存工作正常。我可以让系统进入睡眠状态rtcwake -s20 -m mem,当它醒来时,之前的会话会成功恢复。因此,我认为交换分区出了问题,但我已经没有想法了。

我尝试使用以下命令使系统休眠:

rtcwake -s20 -m disk
echo shutdown > /sys/power/disk
echo disk > /sys/power/state
pm-hibernate

但如上所述,它们都失败了。

可以找到一些有用的 dmesg 和控制台输出这里

对我可能做错的事情有什么建议或想法吗?

相关内容