`
womendu
  • 浏览: 1535445 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

标准linu休眠和唤醒机制分析(一)

阅读更多

说明:

1. Based on linux2.6.32, only for mem(SDR)

2. 有兴趣请先参考阅读: 电源管理方案APMACPI比较.doc

Linux系统的休眠与唤醒简介.doc

3. 本文先研究标准linux的休眠与唤醒,android对这部分的增改在另一篇文章中讨论

4. 基于手上的一个项目来讨论,这里只讨论共性的地方

虽然linux支持三种省电模式:standbysuspend to ramsuspend to disk,但是在使用电池供电的手持设备上,几乎所有的方案都只支持STR模式(也有同时支持standby模式的),因为STD模式需要有交换分区的支持,但是像手机类的嵌入式设备,他们普遍使用nand来存储数据和代码,而且其上使用的文件系统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

# CONFIG_NO_USER_SPACE_SCREEN_ACCESS_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

CONFIG_NET=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-debugging.txt

这个文档我也有详细的阅读和分析。

二、sys/power和相关属性文件创建

系统bootup时候在sys下新建power和相关属性文件,相关源码位置:

kernel/kernel/power/main.c

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对应的kobjectsysfs_dirent对象,同时建立联系:kobject.sd =

// &sysfs_dirent sysfs_dirent.s_dir->kobj = &kobject

if (!power_kobj)

return -ENOMEM;

return sysfs_create_group(power_kobj, &attr_group);

// 建立一组属性文件,可以在power下建立一个子目录来存放这些属性文件, // 不过需要在结构体attr_group中指定name,否则直接将这些属性文件放在 // power_kobj对应的目录下。

}

core_initcall(pm_init); // 看的出来,该函数是很早就被调用,initcall等级为1

static struct attribute_group attr_group = {

.attrs = g,

};

struct attribute_group {

const char *name;

mode_t (*is_visible)(struct kobject *,

struct attribute *, int);

struct attribute **attrs;

};

// 属性文件都是以最基本得属性结构struct attribute来建立的

static struct attribute * g[] = {

&state_attr.attr,

#ifdef CONFIG_PM_TRACE // not set

&pm_trace_attr.attr,

#endif

#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_PM_DEBUG) // not set

&pm_test_attr.attr,

#endif

#ifdef CONFIG_USER_WAKELOCK // set

&wake_lock_attr.attr,

&wake_unlock_attr.attr,

#endif

NULL,

};

#ifdef CONFIG_PM_SLEEP

#ifdef CONFIG_PM_DEBUG

power_attr(pm_test);

#endif

#endif

power_attr(state);

#ifdef CONFIG_PM_TRACE

power_attr(pm_trace);

#endif

#ifdef CONFIG_USER_WAKELOCK

power_attr(wake_lock);

power_attr(wake_unlock);

#endif

#define power_attr(_name) \

static struct kobj_attribute _name##_attr = { \

.attr = { \

.name = __stringify(_name), \

.mode = 0644, \

}, \

.show = _name##_show, \

.store = _name##_store, \

}

// 而这些被封装过的属性结构体,将来会使用kobjectktype.sysfs_ops->show(store)这两个通用函数通过container_of()宏找到实际的属性结构体中的showstore函数来调用。

关于更多sysfs的内容,请查看其他关于这部分内容的详细解析文档。

分享到:
评论

相关推荐

    Linu内核分析

    综上所述,《Linux内核分析》一书从Linux内核的历史背景、开发模式、结构特征、硬件基础、中断机制以及进程管理等方面,提供了深入浅出的讲解,对于想要深入了解Linux内核工作原理的读者来说,是一本不可多得的技术...

    特色平台前端linu移植项目可行性分析报告.pdf

    特色平台前端linu移植项目可行性分析报告.pdf

    嵌入式linu学习规划

    1. **数字电路与模拟电路**:理解数字电路的基本原理,掌握模拟电路的工作机制。 2. **计算机组成原理**:熟悉计算机系统的各个组成部分及其工作原理。 3. **微机原理与接口技术**:掌握微型计算机的基本原理及接口...

    Linux内核QoS实现机制.doc

    总的来说,Linux内核的QoS实现机制是一个复杂而精细的体系,它通过灵活的策略和调度算法,确保了网络资源的高效利用和业务的优质体验。网络管理员可以根据具体需求,利用内核提供的接口和工具,定制适合的QoS策略,...

    linu--x命令集

    FTP 是一种用于在网络上进行文件传输的标准协议和服务。通过 FTP,用户可以在两台计算机之间上传或下载文件。它支持多种文件类型,并且可以实现基本的文件管理功能。 - **FTP Count**(文中提到的“FTPCount”)...

    Linu系统安全配置标准V.pdf

    Linu系统安全配置标准V.pdf

    vstock61.zip_palm recognition_主成分分析_小波 人脸识别_小波 分析 人脸识别_模式识别 linu

    1. **掌纹识别(Palm Recognition)**:这是一种生物特征识别技术,通过分析和比较个人的掌纹特征来进行身份验证。掌纹具有独特的纹理、线形结构和细节,使其成为生物识别系统中的一个可靠选项。在实现时,通常需要...

    Linu系统安全配置标准.pdf

    这份"Linu系统安全配置标准.pdf"文档提供了一系列针对Linux服务器的安全加固技术要求,以增强系统的稳定性和防止未授权访问。以下是根据文档内容提炼出的关键知识点: 1. **补丁管理**: - **系统补丁**:建议定期...

    支持qt和linu通信的qssh库

    “支持qt和linu通信的qssh库”即是在这种背景下应运而生的一个开源项目。这个库的出现,极大地简化了Qt应用程序中集成SSH功能的复杂性,使得开发者可以在自己的应用程序中轻松实现安全的网络通信。qssh库提供了一...

    Linu系统配置DNS服务器

    ### Linu系统配置DNS服务器知识点详解 #### 一、实验环境 - **操作系统**: CentOS 6.4 - **DNS服务器软件**: BIND (Berkeley Internet Name Domain) #### 二、DNS服务器配置概述 DNS服务器(Domain Name System)...

    linu下cadence的patch包

    总的来说,这个"linu下cadence的patch包"是一个用于提升Linux环境下Cadence工具性能和稳定性的更新,对于那些依赖Cadence进行复杂电路设计的专业人士来说,定期检查和应用这些补丁是保持工作效率和数据安全的重要...

    《LINU系统及其编程》考试复习重点.docx

    解决方案:通过分析系统负载和进程状态,找出 CPU 使用率过高的原因。如果是由于高负载应用导致的,可以优化应用代码或增加服务器资源。 * 问题 2:内存泄漏 解决方案:通过内存检测工具找出内存泄漏的原因,并进行...

    linu学习资料

    通过阅读和分析源代码,学习者可以了解到如何设计和实现一个复杂的操作系统内核,同时也能提升解决问题的能力。此外,源代码分析也有助于理解操作系统与硬件之间的交互,以及如何通过内核模块扩展系统功能。 总之,...

    Windows客户端访问Linu服务器NFS.doc

    "Windows客户端访问Linu服务器NFS" 本文档主要讲解Windows客户端如何访问Linux服务器的NFS(Network File System),以解决异构环境中的文件共享问题。文中介绍了跨平台通讯工具SFU(Services For Unix),它能够...

    Linu编程GCC手册

    ### Linu编程GCC手册知识点概览 #### 一、GCC简介 GCC(GNU Compiler Collection)是一套由GNU项目开发的编译器集合,它支持多种编程语言,包括但不限于C、C++、Objective-C、Fortran、Ada、Go等。本手册主要介绍了...

    linu 搭建ELK(es+kibana+logstash)安装包

    新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。 Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、...

    myself linu x(2)

    myself linu x(2)myself linu x(2)myself linu x(2)myself linu x(2)myself linu x(2)

    Linu0.01内核分析与操作系统设计4/4

    《Linux0.01内核分析与操作系统设计》介绍LINUX0.01的内核,0.01是拥有比较少的代码,对于初学者来说容易理解。(共4个文件,第1个文件扣分,其余不扣。4/4)

    linu 下安装 websphere 手册

    linu下安装websphere手册,一目了然

    JSONPointer_linu_

    JSONPointer是JSON(JavaScript Object Notation)标准的一个扩展,用于在JSON文档中引用和操作特定的数据元素。在本文中,我们将深入探讨JSONPointer的概念、语法、使用方法以及它在Linux环境中的应用。JSONPointer...

Global site tag (gtag.js) - Google Analytics