PXA310的电源管理(3)
来源:互联网 发布:华为数据网络怎么设置 编辑:程序博客网 时间:2024/04/30 01:52
PXA310的电源管理(3)
ioctl 中还有设置CPU的工作模式
/kernel/power
传统的APM(Advanced Power Management)是一种基于bios的电源管理标准,目前的最新版本是1.2,
它提供了CPU和设备电源管理的功能,但是由于这种电源管理方式主要是由bios实现,所以有些缺陷,
比如对bios的过度依赖,新老bios之间的不兼容性,以及无法判断电源管理命令是由用户发起的还是由bios发起的,
为了弥补APM的缺陷,新的电源管理ACPI应运而生,这就是ACPI(Advanced Configuration and Power Interface),
它主要是将电源管理的主要执行者由bios转换成为操作系统,这样可以提供更大的灵活性以及可扩展性。
设备电源管理接口主要需要实现以下5点:
使用pm_register对设备的每个实例(instance)进行注册;
在对硬件进行操作之前调用pm_access(这样会保证设备已被唤醒并且处于ready状态);
用户自己的pm_callback函数在系统进入suspend状态(ACPI D1-D3),或者从suspend状态恢复(ACPI D0)的时候会被调用;
当设备不在被使用的时候调用pm_dev_idle函数,这个操作是可选的,可以增强设备idle状态的监测能力;
当被unload的时候,使用pm_unregister来取消设备的注册。
当收到IPMC_IOCTL_SET_CPU_MODE 时
直接调用pm_suspend进入指定的工作模式
linux 定义了如下几种电源管理状态
static const char * const pm_states[PM_SUSPEND_MAX] = {
[PM_SUSPEND_STANDBY] = "standby",
[PM_SUSPEND_MEM] = "mem",
#ifdef CONFIG_SOFTWARE_SUSPEND
[PM_SUSPEND_DISK] = "disk",
#endif
[PM_SUSPEND_LCDREFRESH] = "lcdrefresh",
[PM_SUSPEND_DEEPSLEEP] = "deepsleep",
NULL,
};
可以用如下命令来查找当前的所有状态
/sys/power # cat state
standby mem lcdrefresh deepsleep
如果传入的状态为
#define PM_SUSPEND_DISK ((__force suspend_state_t) 4)
则pm_suspend_disk
如果是其他状态
则走suspend_prepare suspend_enter suspend_finish 的流程
这是一个框架
实际调用的是pxaxx_pm.c中的具体方法
在初试化的时候将对应的操作方法注册到linux的电源管理框架中
为了方便应用,还提供了一个动态定时器。
IPMC_IOCTL_SET_SLEEPTIME
IPMC_IOCTL_GET_SLEEPTIME
设置获取刚才那个动态定时器的时间间隔
也就是pxa310提供的电源管理的支持还是比较丰富的。
- PXA310的电源管理(3)
- PXA310的电源管理(1)
- PXA310的电源管理(2)
- PXA310系统电源管理
- Android 的电源管理
- WINCE的电源管理
- Android 的电源管理
- Android的电源管理
- WINCE的电源管理
- FT5206的电源管理
- WIFI的电源管理
- android的电源管理
- Android 的电源管理
- WINCE的电源管理
- Android的电源管理
- Android的电源管理
- Android的电源管理
- android的电源管理
- VC6.0创建DLL动态链接库四大要素
- 网站提高速度的13个简易规则
- Ext中修改滚动条样式
- Oracle字符串处理大全
- asp中的InStr函数的改写
- PXA310的电源管理(3)
- java URLRewrite的配置和使用
- linux资源占用 top
- 全局变量和局部变量在内存里的区别?堆和栈(转载-无法确定作者与出处) 收藏
- Jetty 源码分析
- 纹理化海量地形
- oracle常用SQL
- .net ToString()格式统计
- 面向对象程序设计六大原则总结