Linux suspend/hibernate 测试模式设置

2025-10-29 33 0

是在做 Linux suspend/hibernate 测试模式设置,echo core > /sys/power/pm_test并不是一个错误操作,而是 电源管理子系统的测试入口。

下面我帮你详细解释它的作用、原理,以及在 Kylin / 国产平台上怎么结合 rtcwake 测试用。

🧩/sys/power/pm_test 是什么

Linux 内核在进行挂起(S3)或休眠(S4)时,会分多个阶段完成,从用户态到设备驱动再到平台固件。 /sys/power/pm_test 用来测试 suspend/hibernate 各阶段是否正常工作

⚙️可选值与含义

查看当前可用模式:

cat /sys/power/pm_test

输出类似:

[none] core processors platform devices freezer

你可以写入以下值之一:

模式 阶段 说明
none 默认 正常挂起或休眠流程
freezer 冻结用户进程 测试进程冻结/解冻是否正常
devices 挂起设备驱动 测试驱动 suspend/resume
platform 调用平台层(ACPI/firmware) 测试 ACPI / 电源控制逻辑
processors CPU 进入低功耗前状态 测试 CPU suspend 恢复
core 内核核心路径 测试除平台固件外的 suspend/hibernate 核心逻辑

🔬工作原理

当设置 pm_test=core 后再执行挂起/休眠,例如:

echo core > /sys/power/pm_test
echo disk > /sys/power/state

系统会:

  1. 模拟进入休眠流程

  2. 执行到 核心 suspend 阶段

  3. 停留 5 秒后自动恢复

👉 实际上不会关机、不会丢失内存,仅测试流程。

同理:

echo mem > /sys/power/state

会测试挂起(S3)路径。

🧰常见测试组合

|测试目的|命令组合|说明| |测试挂起路径是否正常|echo core > /sys/power/pm_test; echo mem > /sys/power/state|检查 suspend 流程稳定性| |测试休眠路径是否正常|echo core > /sys/power/pm_test; echo disk > /sys/power/state|检查 hibernate 前半流程| |恢复默认行为|echo none > /sys/power/pm_test|恢复真实挂起/休眠|

🧠与 rtcwake 结合使用

当你用 rtcwake 测试时,可以先启用测试模式防止系统真的关机:

echo core > /sys/power/pm_test
sudo rtcwake -m disk -s 30

此时:

  • 系统会执行休眠流程到 core 阶段

  • 延时 5 秒自动恢复

  • 不会真的掉电

  • rtcwake 仍然会尝试设置唤醒时间 → 可用于验证 RTC 部分逻辑是否正常

这对于排查“为何 set wake alarm failed”非常有用。

🔍查看日志验证阶段

查看日志:

dmesg | grep PM:

或:

dmesg | grep -E "PM|suspend|hibernate"

输出会显示:

PM: suspend entry (core test)
PM: suspend exit

表示测试模式生效。

✅恢复正常状态

完成测试后记得恢复:

echo none > /sys/power/pm_test

否则之后执行 echo mem > /sys/power/state 只会“假装休眠”。

📘总结

目的 操作
验证 suspend/hibernate 流程是否通畅 echo core > /sys/power/pm_test; echo mem > /sys/power/state
验证 RTC 唤醒逻辑不关机 echo core > /sys/power/pm_test; rtcwake -m disk -s 60
恢复真实挂起 echo none > /sys/power/pm_test

相关文章

发布评论