展开

关键词

Linux-wakelock

前言之前说过Google为了在user space阻止系统suspend,为Android设计出一套新的: wakelocks, early_suspend等。 这时候系统持有一个wakelock,kernel层面就是有wakeup event正在处中。 当系统需要susupend的时候,就会调用pending接口检查到有wakeup event事件在处,就需要abort suspend。

98120

Linux-Autosleep

字面解就是"没有事情干的时候睡觉"。 autosleep一种强大的方法,只要在系统没有什么事情可做的时候,整个系统就睡眠下去。此机制在android手机上非常有效,同时也能阻止不良应用程序一直保持系统唤醒,浪费池。 Wysocki <rjw@sisk.pl> */ 详细文章可见: https://lwn.net/Articles/479841/ Autosleep原 1. 为了保证一个时刻只能处一个work。 B: 当提交suspend_work到工作队列之后,就会调用try_to_suspend函数查询是否可以进入suspend。

72920
  • 广告
    关闭

    腾讯云618采购季来袭!

    一键领取预热专享618元代金券,2核2G云服务器爆品秒杀低至18元!云产品首单低0.8折起,企业用户购买域名1元起…

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux-wakeup count

    以及如何如何判断当前是否有wake events正在处? 通常思路: 用一个变量记录当前系统发生的所有wakeup event,用另一个变量记录当前是否有wake events在处。 linux中使用一个原子变量,高16位记录系统所有的wakeup event总数,低16位记录是否有wakeup events在处中。 "wakeup event in progress"代表系统是否有wake events正在处,在combined_event_count的低16位。 因为这时候一个wakeup event刚处完毕,就代表系统已经发生过一个wakeup event。 判断combined_event_count的低16位是否为零,就知道有没有wakeup event在处。 实现流程 既然明白了上述的原,就按照此原一步一步分析代码的处流程即可。 a.

    64721

    Linux-概述

    如何能做到手机待机时间长久,而且用户还能玩的尽兴,这时候就必须对设备进行省。那用什么省方式呢? 比如在手机听音乐的时候关闭屏幕,在看影的时候调节屏幕亮度等都可以用来省。 本节就简单认识下linux下的状态 On (on) S0-Working Standby (standby) S1- CPU and 此状态下计算机将所有活动的状态保存到磁盘中,然后处于关机状态,此模式下是不耗的,而相比之前的模式,休眠和唤醒的速度都比较慢。 下图是四种状态的功耗和唤醒速度对比。 ?

    98400

    Linux-Runtime PM

    Runtime PM (Runtime Power Management)翻译过来就是运行时。主要的作用是: 每个设备处好自己的,在不需要工作时进入低功耗状态。 当设备不忙的时候就进入自己的低功耗模式,这样一来每个device(包括CPU) 都做好自己的事,整个系统就达到最大节省能。这时候突然想起了一句话"只要人人都献出一片爱,世界将变成美好的人间"。 改变设备的状态需要整个平台的支持。 b. 当设备处于低功耗模式时,wakeup signal常常需要platform或者bus的支持。 c. 比如system-wide suspend的时候设备已经处于Runtime PM的SUSPENDED状态了,这时候应该怎么处此设备? /power/control接口在运行时对该设备进行。 .no_callbacks: 表明该设备不是有Runtime PM callbacks。

    1.2K20

    Linux(9)_wakelocks【转】

    同时,该补丁集更改了Linux kernel原生的执行过程(kernel/power/main.c中的state_show和state_store),转而执行自定义的state_show、state_store wakelocks的功能 对比Android wakelocks要实现的功能,Linux kernel的方案是: 允许driver创建wakelock以阻止睡眠、注销wakelock以允许睡眠:已经由“Linux 3.2 Kernel wakelocks在中的位置 相比Android wakelocks,Kernel wakelocks的实现非常简单(简单的才是最好的),就是在PM core中增加一个wakelock 从应用开发者的角度,确实可以这样解。但从底层实现的角度,却完全不是一回事。 注1:上面有关wakeup source的操作接口,可参考“Linux(7)_Wakeup events framework”。

    45210

    Linux-wakeup events framework

    Linux系统中的一般是冷睡眠,而Android系统却将linux系统中的睡眠作为通常待机使用,显然Linux中的不符合Android系统。 Android上的省,节能问题。 .entry: 用来将唤醒挂到链表上,用于。 .lock: 同步机制,用于访问链表时使用。 .timer: 定时器,用于设置该唤醒的超时时间。 那到底什么是唤醒呢? 在linux系统中,只有具有唤醒系统的设备才叫做“wakeup source”。 wakeup count相关的处,留到wakeup count小节分析。总之简单解就是激活active的反操作。

    86721

    Linux-SuspendResume流程

    前言 根据上一节linux-概述可知,linux存在的几种方式,如何查看这几种方式,以及最后的如何睡眠唤醒等。 只有通过register_pm_notifier的设备,子系统会在这个时候处自己的事情。 如果在12s之内suspend没有处完成,就打印call stack,导致系统panic。

    1.1K20

    Linux 子系统

    Linux 非常复杂,牵扯到系统级的待机、频率压变换、系统空闲时的处以及每个设备驱动对系统待机的支持和每个设备的运行时(Runtime),可以说它和系统中的每个设备驱动都息息相关。 对于消费子产品来说,相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,下图呈现了 Linux 内核的整体架构。 6、Regulator 驱动 Regulator是Linux系统中的基础设施之一,用于稳压,是各种驱动子系统中设置压的标准接口。 这通常是由于与这个按键对应的输入设备驱动汇报了一个和相关的input_event,用户空间的daemon进程收到这个事件后,再触发s2ram的。 另外,在实际工程中,尤其是在消费子的领域,可能有超过半数的bug都属于。这个时候,的很多工作就是在搞定鲁棒性和健壮性,可以说,在很多时候,这就是个体力活,需要工程师有足够的耐性。

    16920

    Linux-Operating Performance Points(OPP)

    为了实现这一目的,Soc中的子模块被分组成域,允许一些域以较低的频率和压运行,而其他的域运行在较高的压和频率上。 Operating Performance Points Library OPP library提供了一系列辅助函数去和查询设备的OPP信息。 OPP library的代码路径在drivers/base/power/opp.c,头文件路径在include/linux/pm_opp.h中。 ; unsigned long u_volt; struct device_opp *dev_opp; struct rcu_head head; }; node: 用于链表此设备下的 struct srcu_notifier_head head; struct list_head opp_list; }; .node: 用于将所有的opp设备使用dev_opp_list链表

    63320

    Linux(7)_Wakeup events framework

    前言 本文继续“Linux(6)_Generic PM之Suspend功能”中有关suspend同步以及PM wakeup的话题。 注2: 用户空间同步的两种情况,咋一看,非常合乎情,kernel你得好好处!但事实上,该同步问题牵涉到了另外一个比较有争议的话题:日常的机制。是否要基于suspend实现? 注3:在Linux kernel看来,power是系统的核心资,不应开放给用户程序随意访问(wake lock机制违背了这个原则)。 而在运行时的过程中,系统何时进入低功耗状态,也不是用户空间程序能决定的(auto sleep中枪了)。 这表现在suspend过程中频繁调用pm_wakeup_pending接口上(可参考“Linux(6)_Generic PM之Suspend功能”)。

    63420

    Linux-Linux regulator framework概述

    一般芯片(Power Management IC)中会包含一个甚至多个regulator。 2. regulator有什么作用? 通常的作用是给子设备供。 如果一个regulator控制多个设备,而每个设备的压或流需求方式不同,linux regulator framework会怎么这些设备? 3. 有些设备只需要enable/disable即可,而有些设备在运行的过程中需要动态的改变voltage或者current,Linux regulator Framework会如何处这些问题? .min_uV/max_uV: 最小/最大的输出压。 .uV_offset: consumer看到的和实际之间的偏移值,用于补偿。 consumer consumer可以解为regulator提供服务的对象。比如LCD使用regulator自己,就必须使用regulator core提供的regulator相关接口函数。

    1.1K31

    Android基础知识整

    如果你也有以上疑问,那么本文会对你解开疑惑有一定的帮助 ACPI简介 要解第一个问题,得先从ACPI(高级配置与接口)说起,ACPI是一种规范(包含软件与硬件),用来供操作系统应用程序所有接口 Android Doze模式码分析 Android框架 Android采用linux内核,所以状态整体上是与linux操作系统相同,下图是Android的框架: ? SCREEN_BRIGHT_WAKE_LOCK 开启 变亮 关闭 FULL_WAKE_LOCK 开启 变亮 变亮 锁的释放 Linux3.4内核中摒弃了之前的wakelock机制,引入wakeup source机制来进行睡眠 ,用于运行Linux+Android系统,耗量高;BP用于运行实时操作系统(RTOS),用于处手机通信,耗量低。 当AP进入睡眠,有来时,Modem(调制解调器)将唤醒AP;而我们平时所用的Alarm在硬件上则是依赖PMIC(芯片)中的RTC模块,所以即使AP断进入睡眠,我们定的闹钟依旧会生效。 ?

    1.5K21

    1.Linux-休眠与唤醒

    常用的休眠方式有freeze,standby, mem, disk freeze: 冻结I/O设备,将它们置于低功耗状态,使处器进入空闲状态,唤醒最快,耗比其它standby, mem, disk方式高 standby:除了冻结I/O设备外,还会暂停系统,唤醒较快,耗比其它 mem, disk方式高 mem:      将运行状态数据存到内存,并关闭外设,进入等待模式,唤醒较慢,耗比disk方式高 则通知pm子系统,唤醒中断处结束。 err=gpio_request_one(mykey_data.gpio, GPIOF_DIR_IN, mykey_data.desc); //获取脚 ,并设置脚为输入 if (err < 0) { printk("mykey_open err : gpio_request_one err=%d

    3.1K20

    详解linux驱动编写

    对于嵌入式设备来说,合适的,不仅可以延长池的寿命,而且可以省,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。 下面,我们可以看看linux是如何处驱动的。

    30554

    高通qpnp-vm-bms驱动

    if (is_bat_pres_ght) { //设置池的设置低(高,高温,低温)的阈值,也就是池低关机 rc = setup_vbat_monitoring State of charge 量百分比 OCV Open circuit voltage 开路压,池在开路状态下的端压称为开路压 SOC=(RC-CC-UUC)/(FCC-UUC) 这个估值算法,我猜可能是一套学习算法,具体的没有码,不清楚,只知道它把算法变为.bin文件,用了binder机制,作为服务一直运行。 我们如何知道monitor_soc_work函数不断的运行呢? , 那么就return出来; 如果chip->last_soc低于设置的resume-soc复冲压的话,就设置的充状态,并设置set_property给上层; 我们可以看看这个函数在哪里使用的: 字面意思就是当充器被拔掉的时候是量满的;也就是说量满的之后(是之后),并且充器没有拔掉的时候;看一下这个标志位是会在什么时候改变的吧: static void reported_soc_check_status

    64730

    Linux-Linux Regulator Framework代码分析

    regulator的作用就是consumer设备,给consumer设备提供voltage, current。 设置regulator的约束信息,比如设置压,流等,最终会通过regulator中的regulator_ops函数设置。 6. 添加regulator的设备属性。 6. 判断regulator是否存在级联关系,处级联关系。 7. 添加consumer设备,通过init_data中的num_consumer_supplies个数,添加consumer的信息。

    1K20

    1.-4种休眠方式状态

    常用的休眠方式有freeze,standby, mem, disk freeze: 冻结I/O设备,将它们置于低功耗状态,使处器进入空闲状态,唤醒最快,耗比其它standby, mem, disk方式高 standby:除了冻结I/O设备外,还会暂停系统,唤醒较快,耗比其它 mem, disk方式高 mem:将运行状态数据存到内存,并关闭外设,进入等待模式,唤醒较慢,耗比disk方式高 disk:

    2.1K30

    扫码关注云+社区

    领取腾讯云代金券