本文基于 RockPI 4A 单板 Debian 系统 Linux4.4 内核介绍下睡眠唤醒( suspend/resume )的一些调试方法。
1、关闭串口睡眠
在Linux内核睡眠过程中,会先调用 suspend_console() 函数使串口进入睡眠状态,这样会导致后续设备驱动的睡眠过程不可见。可以在boot启动参数中增加 no_console_suspend 参数,显示设备驱动睡眠日志。
2、修改串口日志等级
修改串口日志打印等级,显示更多调试信息。
3、打开设备睡眠唤醒时间
设置 pm_print_times 参数,可以显示设备驱动睡眠唤醒时间,方便调试时查看哪个函数处理占用时间过长。
在调试Linux内核睡眠唤醒功能时,可以使用 RTC 做唤醒源,在系统睡眠5秒后,自动唤醒系统。
在 arch/arm64/configs/rockchip_linux_defconfig 文件中配置宏 CONFIG_PM_TEST_SUSPEND 。
唤醒日志如下:
Linux内核支持四种系统睡眠状态即: mem、standby、freeze and disk 。
可通过文件 /sys/power/state 进行读写访问,区别如下:
在 RockPI 4A 单板 Debian 系统 Linux 4.4 内核中,查看电源状态,仅支持 freeze和mem 两种。
原因:
1、 Platform 驱动只实现了 mem 类型的 suspend
2、只有在 hibernation 可用时,才支持 STD
1、 psci 初始化流程
suspend_set_ops() 函数赋值数组 pm_states 实现如下:
2、power state显示
/sys/power/state 文件显示的内容,通过 state_show() 函数实现,该函数最终显示数组 pm_states 的内容。
参考:
Documentation/power/states.txt
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)