立即注册
查看: 1868|回复: 2

[软件资料] 全志Tina功耗管理说明

已绑定手机
发表于 2020-9-14 16:00:01 | 显示全部楼层 |阅读模式 来自 广东省深圳市
1. 概述
文档主要描述 Tina 功耗管理,包含 Standby 管理、场景管理、用户层接口等内容。
1.1. 编写目的
简要介绍 Tina 功耗管理机制,
1.2. 适用范围
适用于 Tina SDK

2. nativepower 全局描述
实时监控电源状态,包括电池充放电、电源状态变化,利用消息通知机制,从底层上报给应用,保护系统用电安全以及监控电源状态变化。

2.1. 代码文件
关键代码路径:
/tina/package/Allwinner/nativepower/deamon/main.c
/tina/package/allwinner/nativepower/libpower
/tina/package/allwinner/nativepower/lIBSuspend

2.2. nativepower package tree
/tina/ackage/allwinner/nativepower
---daemon 场景管理,服务端监控和处理客户端发来的 dbus 消息
---demo 使用说明
---files 不同功耗场景的配置
---include 具体场景的宏定义和函数定义
---libnativepower 应用层接口,具体场景函数的实现以及客户端的处理
---libpower wake_lock 的请求,释放,计数,获取等
---libsuspend 监测 wake_lock 的状态,使系统进入不同状态
---Makefile 编译规则

2.3. 框架流程
在 daemon 的 main.cpp 的 main 函数里:
首先会申请一个 NATIVE_POWER_DISPLAY_LOCK 的锁 , 让系统不能进入休眠。
然后通过 autosuspend_enable 启动 libsuspend 中的线程去监测 wake_lock 的状态, 当状态为无锁时,系统自动进入休眠。具体启动的线程与内核支持的 suspend 方式有关。有 earlysuspend_thread_func 和suspend_thread_func 两种。
接着会启动 ubus_server_thread_func , 去响应客户端的请求。
完成这些初始化的动作之后, 会进入 while 循环,循环监测自动休眠时间是否到了, 到了的话就释放NATIVE_POWER_DISPLAY_LOCK 锁, 让系统进入休眠。
具体框架示意图如下:
框架.png

2.4. 场景管理
系统启动后,会自动设置一个 boot complete 的场景。其他场景的设置,则由用户程序根据自己的需求去调用应用层接口,通过 bus 来设置。不同的场景,通过配置文件去配置, 详见 3.4 节。
具体到守护进程内,这是调用了 np_scene_change, 然后根据场景名称, 读取/etc/config/nativepower下的对应配置, 设置到/sys 文件系统的对应节点中。
具体流程示意图如下:
场景管理.png

3. 应用层接口
3.1. 代码文件
关键代码路径:
package/allwinner/nativepower/include
package/allwinner/nativepower/libnativepower
3.2. 总体框架
Libnativepower 封装了通过 dbus 发送请求的接口,这些请求会调用守护进程 nativepower_daemon 的功能函数。


文件下载, 请回复
游客,如果您要查看本帖隐藏内容请回复


已绑定手机
发表于 2020-9-15 03:06:27 | 显示全部楼层 来自 四川省成都市
看看,学习一下
已绑定手机
发表于 2021-7-23 14:15:56 | 显示全部楼层 来自 浙江省嘉兴市嘉善县
正在寻找,休眠功耗太难了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表