是在做 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
系统会:
-
模拟进入休眠流程
-
执行到 核心 suspend 阶段
-
停留 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 |
JINHU