电源管理
1 引言
linux系统进入低功耗模式,需要执行如下步骤,
- a. 暂停各类APP(用户APP,内核线程);
- b. 暂停各类设备;
- c. 停止CPU;
Linux唤醒过程:
- d. 启动CPU
- e. 启动设备
- f. 启动各类APP
可以参考文章
1. 电源管理基本观念之一,链接为http://blog.sina.com.cn/s/blog_a6559d920101i52j.html;
2. Linux的电源管理架构,链接为:https://blog.csdn.net/bingqingsuimeng/article/details/7935414;
3. Linux休眠与唤醒,链接为:https://blog.csdn.net/bingqingsuimeng/article/details/8197912。
2 基本概念
设备电源管理模型:
- 系统睡眠模型
- On
- Standby
- Suspend to RAM
- Runtime电源管理模型
- 降低运行时钟
- 关闭无用设备
3 U-BOOT电源管理
定义suspend命令
U_BOOT_CMD(suspend, 1, 0, do_suspend, "short command comment", "long command comment");
实现do_suspend函数
do_suspend(*cmdtp, flag, argc, *argv[])
睡眠操作:参考S3C2440 P250,详述如何进入Sleep Mode
注:
1. 8~12步骤需要使用汇编实现,参考内核源码arch\arm\mach-S3C2440.S
2. 休眠时第9步,让SDRAM自刷新时,CPU无法访问SDRAM。此时如果有MMU功能,则需要页表填充MMU进行地址映射。
通过执行rREFRESH和RCLKCON,从SDRAM中读取指令,随后指令被ICACHE和DCACHE使用填充入TLB。关闭SDRAM后,CPU仍能通过cache使用。
唤醒操作:参考S3C2440 P251,详述如何唤醒
3 Linux电源管理框架
启动suspend to ram:
echo mem > /sys/power/state
入口函数为:
state_store (/kernal/power/main.c)
enter_state
suspend_prepare
suspend_enter
suspend_finish
操作结构体为:
power_attr(state);