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

实用电路精讲系列---双级运放放大电路(差分放大+跟随缓冲) 本文分析了双极运放放大电路的工作原理及其典型应用。该电路结合差分放大器跟随缓冲器,实现高精度信号放大与阻抗匹配。差分放大器通过放大差模信号并抑制共模噪声提升信噪比;跟随缓冲器则提供阻抗变换,确保信号稳定传输。两者协同工作可优化输入阻抗、增强噪声抑制并提高设计灵活性。文章还列举了10个典型应用案例,包括医疗设备、工业传感器新能源系统等,展示了该电路在精密电子系统中的关键作用。最后通过实用电路分析,详细说明了各模块功能及设计注意事项。 阅读详情

说明:

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

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

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

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

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

 

虽然linux支持三种省电模式:standby、suspend to ram、suspend 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的内容,请查看其他关于这部分内容的详细解析文档。

【电容/电感】电路板会“滋滋”的响,我们称它为啸叫 、啸叫的起源 大部分硬件工程师应该都遇到过,PCBA上电后出现“滋滋滋”的叫声,其声响或大或小,或时有时无,或深沉或刺耳,或变化无常者皆有。该现象我们称为“啸叫”,般分为电感啸叫电容啸叫。 阅读详情

相关推荐

基于FreeRedis实现的.NET Redis客户端缓存缓存键条件优雅过滤

在.NET开发中,使用Redis作为缓存解决方案是很常见的。FreeRedis是个功能强大的Redis客户端库,它提供了丰富的功能灵活性,使我们能够轻松地与Redis进行交互。在本文中,我们将探讨如何使用FreeRedis实现缓存键条件的优雅过滤,以提高缓存的效率准确性。

RzuScala的博客 306

linux电源管理-pm core主流程

PM Core,SR(suspend/resume)主流程,顾名思义就是把Linux Kernel中各个低功耗模块组合在起,成为睡眠唤醒流程的主干道,我们称之为SR主流程。其在内核中特性的开关主要受以下宏控制:相关代码主要在kernel/power/目录下main.c----提供用户态接口,以及pm notifier相关接口.c----Suspend功能的主流程.c----Suspend过程中对控制台的处理逻辑.c----Suspend过程中对进程的处理逻辑。......

szembed的博客 1551

Java后端新人入职第天,环境搭建,全看这篇就行了

本文主要是记录个新人java后端开发来到个新公司,如何快速完成环境搭建,本文意旨个小时搞定所有环境搭建,让你更快加入到新环境。包括Java、Maven、Tomcat、idea、Redis、Mysql等等,还附带对应安装资源包,我这里就以目前比较流行的版本进行详细说明。

qi_ming88的博客 9229

Linux电源管理(5)_HibernateSleep功能介绍

1. 前言 HibernateSleep两个功能是Linux Generic PM的核心功能,它们的目的是类似的:暂停使用——>保存上下文——>关闭系统以节电········>恢复系统——>恢复上下文——>继续使用。 本文以内核向用户空间提供的接口为突破口,从整体上对这两个功能进行介绍,并会在后续的文章中,分析它们的实现逻辑执行动作。 顺便感概下,虽然这些机制在Linux系统中存在很久

蓝精灵的专栏 1406

标准linu休眠唤醒机制分析-四)

转自http://blog.csdn.net/lizhiguo0532/article/details/6453529 说明: 1. Based on linux2.6.32,  only for mem(SDR) 2. 有兴趣请先参考阅读: 电源管理方案APMACPI比较.doc Linux系统的休眠与唤醒简介.doc 3. 本文先研究标准linux的休眠与唤醒,android对

zirconsdu的专栏 2139

如何调试Suspend-Resume相关的Bug

Linux系统中,Suspend-Resume是个复杂的过程,其涉及到BIOS、Kernel、Graphic驱动以及相关的应用程序。本文将介绍如何调试Suspend-Resume相关Bug,如何缩小引起Suspend-Resume失败的范围。 在此之前,我们必须Kill所有使用/proc/acpi/event的进程,例如:gnome-power-manager。 1.        运行:

动则为奇,静则为陈 1550

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

说明: 1. Based on linux2.6.32,  only for mem(SDR) 2. 有兴趣请先参考阅读: 电源管理方案APMACPI比较.doc Linux系统的休眠与唤醒简介.doc 3. 本文先研究标准linux的休眠与唤醒,android对这部分的增改在另篇文章中讨论 4. 基于手上的个项目来讨论,这里只讨论共性的地方   虽然linux支持三种省电模式

gjy938815的专栏 503

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

<br /> <br />三、pm_test属性文件读写<br />int pm_test_level = TEST_NONE;<br /> <br />static const char * const  pm_tests[__TEST_AFTER_LAST] = {<br />       [TEST_NONE] = "none",<br />       [TEST_CORE] = "core",<br />       [TEST_CPUS] = "processors",<br />      

zgolee的专栏 9217

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

<br />suspend第三、四、五阶段:platform、processor、core<br />static int suspend_enter(suspend_state_t state)<br />{<br />       int error;<br /> <br />       if (suspend_ops->prepare) {<br /> // 平台特定的函数,mtkpm.c, 有定义,对pmiccpu dll的些设置<br />              error = susp

zgolee的专栏 7875

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

<br />五、suspendresume代码走读<br />    <br />下面对suspend分的几个阶段都是按照pm test的5中模式来划分的:freezer、devices、platform、processors、core。<br />suspend第阶段:freezer<br />int enter_state(suspend_state_t state)<br />{<br />       int error;<br /> <br />       if (!valid_state(

zgolee的专栏 8163

基于 Three.js 的仓库可视化管理系统源码.zip

基于 Three.js 的仓库可视化管理系统源码.zip

Latex命令速查手册.pdf

Latex命令速查手册.pdfLatex命令速查手册.pdfLatex命令速查手册.pdfLatex命令速查手册.pdfLatex命令速查手册.pdfLatex命令速查手册.pdf

上一篇: Linux系统的休眠与唤醒简介
下一篇: 标准linu休眠和唤醒机制分析(二)
xie0812
博客等级 码龄14年 155粉丝 28原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值