Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    【FAQ】全志R系列休眠唤醒使用和框架介绍

    其它全志芯片讨论区
    r329 r328 r818 faq 技术支持
    1
    1
    1683
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • q1215200171
      budbool LV 9 last edited by

      【问题背景】

      硬件:R系列芯片
      软件:Tina

      【问题简述】

      说明:该FAQ旨在记录休眠唤醒的基本框架。

      【问题分析】

      1.相关术语
      B19F6272-2FED-44d5-88EA-E203005E5B55.png

      2.简要概述

      所谓的功耗管理通俗的讲就是省电,两个出发点:
      能不用就不用-间歇供电和断电--->静态功耗。
      必须用时少用-降低供电电压和频率--->动态功耗。
      功耗管理可分为静态功耗管理与动态功耗管理,当前Linux下的功耗管理技术主要如下图所示。

      44b5af95541443ef832fcfe5f7f4a626.jfif

      静态功耗管理通常指的是对待机情况下的功耗进行管理,它需要检测整个系统的工作状态。
      动态功耗管理通常指的是对运行时的CPU或device的电压频率进行调整。
      因此功耗管理会涉及包括供电(Power Supply)、充电(Charger)、时钟(Clock)、频率(Frequency)、电压(Voltage)、休眠/唤醒(Suspend/Resume)等方面。

      2.1配置

      make kernel_menuconfig

      96d9a6fe9aa94a9184cfb6aa2c70edd6.jfif

      [*] Suspend to RAM and standby	Standby基础功能,配置会默认选上部分依赖。
      [*] Wake lock	借鉴安卓锁机制,有锁就不能进入深度休眠。
      [*] Scene lock	用于设置系统进入何种场景standby,如:normal,super,usb...
      [*] Early suspend	浅度休眠,配合wake_lock机制使用,一般用来关屏。
      [*] Opportunistic sleep	Autosleep机制。
      [*]Power Management Debug Support	调试相关宏的开关。
      

      2.2文件节点

      配置好相应功能后进行编译,烧写到小机端会产生/sys/power目录,并在其下产生一些文件节点。

      R18平台的文件节点如下图:

      36054134547943bd8b64a6dfcdfb0d2d.jfif

      2.3框架流程

      6717d60e461c425b84833c3effab8a8c.jfif

      P表示platform,也即系统相关的处理,实现整个系统的休眠操作;

      D表示device,表示设备相关的处理,实现设备相关的休眠操作,这部分在各设备驱动中实现。
      可以看到suspend/resume大致流程:

      冻结所有进程/线程(除开当前线程) → 各设备驱动进行相关的状态保存、降频等操作 → 关闭非启动CPU(仅保留CPU0) → 进入P.enter → 开启所有CPU → 各驱动设备恢复状态 → 解冻进程/线程。

      其中P.enter是最关键的操作,该函数不同的处理代表不同的standby模式。当然进入不同的standby,需要相关配套的硬件。AXP的作用是可以控制各路电源,没有AXP,就不能关闭CPU电源,相当于就不能进入Super standby。CPUS在CPU断电的情况下继续运行,在收到各种唤醒源之后,通过AXP将CPU以及其他各路电压恢复,让系统唤醒。

      Super standby的必要条件是AXP,但是有CPUS可以扩展唤醒源。

      由上面的分析可以简单的得出一个结论:休眠唤醒可以按照进程,设备,系统等分为不同的程度,而且是串行的,也就是说这条链中一旦有某个环节(如某个设备无法休眠或唤醒)出问题,那么整个系统就无法正常休眠或唤醒。

      【使用介绍】

      1.系统休眠

      休眠操作就一条命令:
      echo mem > /sys/power/state;
      系统就会进入休眠。
      现象:控制台打印“PM: Entering mem sleep”,然后控制台关闭。如下图:

      2d4b1f2cf15c474e8a9d12f6661dcd93.jfif

      2.系统唤醒

      通过触发中断的方式,唤醒系统。常用唤醒源有:

      • 电源按键唤醒
      • 其他按键唤醒
      • Wifi唤醒
      • 蓝牙唤醒
      • Usb唤醒
      • Sd卡唤醒
      • 定时唤醒
      • 自配置GPIO唤醒

      目前Tina系统普遍支持的有按键、wifi、自配置GPIO。
      现象:控制台打开,打印“PM: Finishing wakeup.”。

      637f0ec5d24d48c19e7fc3f896a53fb0.jfif

      1 Reply Last reply Reply Quote Share 0
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • 1 / 1
      • First post
        Last post

      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策