欢迎来到天天文库
浏览记录
ID:6380379
大小:258.00 KB
页数:36页
时间:2018-01-12
《标准linux休眠和唤醒机制分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、标准linux休眠和唤醒机制分析标准linux休眠和唤醒机制分析(一)说明:1.Basedonlinux2.6.32,onlyformem(SDR)2.有兴趣请先参考阅读:电源管理方案APM和ACPI比较.docLinux系统的休眠与唤醒简介.doc3.本文先研究标准linux的休眠与唤醒,android对这部分的增改在另一篇文章中讨论4.基于手上的一个项目来讨论,这里只讨论共性的地方虽然linux支持三种省电模式:standby、suspendtoram、suspendtodisk,但是在使用电池供电的手持设备上,几乎所有的方案都只支持S
2、TR模式(也有同时支持standby模式的),因为STD模式需要有交换分区的支持,但是像手机类的嵌入式设备,他们普遍使用nand来存储数据和代码,而且其上使用的文件系统yaffs一般都没有划分交换分区,所以手机类设备上的linux都没有支持STD省电模式。一、项目power相关的配置目前我手上的项目的linux电源管理方案配置如下,.config文件的截图,当然也可以通过makemenuconfig使用图形化来配置:##CPUPowerManagement##CONFIG_CPU_IDLEisnotset##Powermanagemento
3、ptions#CONFIG_PM=y#CONFIG_PM_DEBUGisnotsetCONFIG_PM_SLEEP=yCONFIG_SUSPEND=yCONFIG_SUSPEND_FREEZER=yCONFIG_HAS_WAKELOCK=yCONFIG_HAS_EARLYSUSPEND=yCONFIG_WAKELOCK=yCONFIG_WAKELOCK_STAT=yCONFIG_USER_WAKELOCK=yCONFIG_EARLYSUSPEND=y#CONFIG_NO_USER_SPACE_SCREEN_ACCESS_CONTROLisn
4、otset#CONFIG_CONSOLE_EARLYSUSPENDisnotsetCONFIG_FB_EARLYSUSPEND=y#CONFIG_APM_EMULATIONisnotset#CONFIG_PM_RUNTIMEisnotsetCONFIG_ARCH_SUSPEND_POSSIBLE=yCONFIG_NET=y上面的配置对应下图中的下半部分图形化配置。。。,看来是直接在Kconfig文件中删除了配置STD模式的选项。使用上面的配置编译出来的系统,跑起来之后,进入sys目录可以看到相关的接口:#pwd/sys/power#lsst
5、atewake_lockwake_unlockwait_for_fb_sleepwait_for_fb_wake#catstatemem如果配置了宏CONFIG_PM_DEBUG,那么在power目录下会多出一个pm_test文件,catpm_test后,列出的测试选项有:[none]coreprocessorsplatformdevicesfreezer。关于这个test模式的使用,可以参考kernel文档:/kernel/documentation/power/Basic-pm-debugging.txt这个文档我也有详细的阅读和分析。
6、二、sys/power和相关属性文件创建系统bootup时候在sys下新建power和相关属性文件,相关源码位置:kernel/kernel/power/main.cstaticint__initpm_init(void){interror=pm_start_workqueue();//CONFIG_PM_RUNTIMEnotset,sothisfunisnullif(error)returnerror;power_kobj=kobject_create_and_add("power",NULL);//建立power对应的kobject和s
7、ysfs_dirent对象,同时建立联系:kobject.sd=//&sysfs_dirent,sysfs_dirent.s_dir->kobj=&kobject。if(!power_kobj)return-ENOMEM;returnsysfs_create_group(power_kobj,&attr_group);//建立一组属性文件,可以在power下建立一个子目录来存放这些属性文件,//不过需要在结构体attr_group中指定name,否则直接将这些属性文件放在//power_kobj对应的目录下。}core_initcall(p
8、m_init);//看的出来,该函数是很早就被调用,initcall等级为1staticstructattribute_groupattr_group={.attrs=g,};s
此文档下载收益归作者所有