1 / 36
文档名称:

标准linux休眠和唤醒机制分析.doc

格式:doc   大小:258KB   页数:36页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

标准linux休眠和唤醒机制分析.doc

上传人:3044324210 2016/8/23 文件大小:258 KB

下载得到文件列表

标准linux休眠和唤醒机制分析.doc

相关文档

文档介绍

文档介绍:标准 linux 休眠和唤醒机制分析标准 linux 休眠和唤醒机制分析(一) 说明: 1. Based on , only for mem(SDR) 2. 有兴趣请先参考阅读: 电源管理方案 APM 和 ACPI Linux 3. 本文先研究标准 linux 的休眠与唤醒, android 对这部分的增改在另一篇文章中讨论 4. 基于手上的一个项目来讨论,这里只讨论共性的地方虽然 linux 支持三种省电模式: standby 、 suspend to ram 、 suspend to disk , 但是在使用电池供电的手持设备上, 几乎所有的方案都只支持 STR 模式( 也有同时支持 standby 模式的), 因为 STD 模式需要有交换分区的支持,但是像手机类的嵌入式设备,他们普遍使用 nan d 来存储数据和代码, 而且其上使用的文件系统 yaffs 一般都没有划分交换分区, 所以手机类设备上的 linux 都没有支持 STD 省电模式。一、项目 power 相关的配置目前我手上的项目的 linux 电源管理方案配置如下, .config 文件的截图,当然也可以通过 make menuconfig 使用图形化来配置: ## CPU Power Management ## CONFIG_CPU_IDLE is not set ## Power management options # CONFIG_PM=y # CONFIG_PM_DEBUG is not set CONFIG_PM_SLEEP=y CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y CONFIG_HAS_WAKELOCK=y CONFIG_HAS_EARLYSUSPEND=y CONFIG_WAKELOCK=y CONFIG_WAKELOCK_STAT=y CONFIG_USER_WAKELOCK=y CONFIG_EARLYSUSPEND=y # ESS_CONTROL is not set # CONFIG_CONSOLE_EARLYSUSPEND is not set CONFIG_FB_EARLYSUSPEND=y # CONFIG_APM_EMULATION is not set # CONFIG_PM_RUNTIME is not set CONFIG_ARCH_SUSPEND_POSSIBLE=y =y 上面的配置对应下图中的下半部分图形化配置。。。, 看来是直接在 Kconfig 文件中删除了配置 STD 模式的选项。使用上面的配置编译出来的系统,跑起来之后,进入 sys 目录可以看到相关的接口: # pwd /sys/power # ls state wake_lock wake_unlock wait_for_fb_sleep wait_for_fb_wake # cat state mem 如果配置了宏 CONFIG_PM_DEBUG , 那么在 power 目录下会多出一个 pm_test 文件, cat pm_test 后, 列出的测试选项有: [none] core processors platform devices freezer 。关于这个 test 模式的使用,可以参考 kernel 文档: /kernel/documentation/power/Basic-pm- 这个文档我也有详细的阅读和分析。二、 sys/power 和相关属性文件创建系统 bootup 时候在 sys 下新建 power 和相关属性文件,相关源码位置: kernel/kernel/power/ static int __init pm_init(void) { int error = pm_start_workqueue();// CONFIG_PM_RUNTIME not set, so this fun is null if (error) return error; power_kobj = kobject_create_and_add("power", NULL); // 建立 power 对应的 kobject 和 sysfs_dirent 对象,同时建立联系: = // &sysfs_dirent , ->kobj = &kobject 。 if (!power_kobj) return -ENOMEM; return sysfs_create_group(power_kobj, &attr_group); // 建立一组属性文件, 可