解决android系统唤醒时间偏长------healthd里的一些调用

原创 2016年05月31日 18:12:31

目前定位到healthd的调用过程耗时太长,于是去看看power相关的一些东西

healthd里一共调用了如下的节点获取数据

openat(AT_FDCWD, "/sys/class/power_supply/battery/present", 1    *******
openat(AT_FDCWD, "/sys/class/power_supply/battery/capacity",100     *****
openat(AT_FDCWD, "/sys/class/power_supply/battery/voltage_now", 4389402     ********
openat(AT_FDCWD, "/sys/class/power_supply/battery/temp", 291   ********
openat(AT_FDCWD, "/sys/class/power_supply/battery/status", Full 

到kernel里找节点

Power_supply_sysfs.c里

static struct device_attribute power_supply_attrs[] = {
/* Properties of type `int' */
POWER_SUPPLY_ATTR(status),
看看#define POWER_SUPPLY_ATTR(_name) \
{ \
.attr = { .name = #_name }, \
.show = power_supply_show_property, \
.store = power_supply_store_property, \
}

然后看static ssize_t power_supply_show_property(struct device *dev,
 struct device_attribute *attr,
 char *buf) 

这个里面调用了

if (off == POWER_SUPPLY_PROP_TYPE)
value.intval = psy->type;
else
ret = psy->get_property(psy, off, &value);

这个get_property需要在qpnp-vm-bms.c

static int qpnp_vm_bms_power_get_property(struct power_supply *psy,
enum power_supply_property psp,
union power_supply_propval *val)

{
switch (psp) {
case POWER_SUPPLY_PROP_CHARGE_NOW:
val->intval = get_remaining_usable_capacity(chip);
break;

}

这些的case都在power_supply.h

enum power_supply_property {
/* Properties of type `int' */
POWER_SUPPLY_PROP_STATUS = 0,
POWER_SUPPLY_PROP_CHARGE_TYPE,
POWER_SUPPLY_PROP_HEALTH,
POWER_SUPPLY_PROP_PRESENT,
POWER_SUPPLY_PROP_ONLINE,
POWER_SUPPLY_PROP_AUTHENTIC,
POWER_SUPPLY_PROP_CHARGING_ENABLED,
POWER_SUPPLY_PROP_TECHNOLOGY,
POWER_SUPPLY_PROP_CYCLE_COUNT,
POWER_SUPPLY_PROP_VOLTAGE_MAX,
POWER_SUPPLY_PROP_VOLTAGE_MIN,
POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
POWER_SUPPLY_PROP_VOLTAGE_NOW,
POWER_SUPPLY_PROP_VOLTAGE_AVG,
POWER_SUPPLY_PROP_VOLTAGE_OCV,
POWER_SUPPLY_PROP_INPUT_VOLTAGE_REGULATION,
POWER_SUPPLY_PROP_CURRENT_MAX,
POWER_SUPPLY_PROP_INPUT_CURRENT_MAX,
POWER_SUPPLY_PROP_INPUT_CURRENT_TRIM,
POWER_SUPPLY_PROP_INPUT_CURRENT_SETTLED,
POWER_SUPPLY_PROP_VCHG_LOOP_DBC_BYPASS,
POWER_SUPPLY_PROP_CURRENT_NOW,
POWER_SUPPLY_PROP_CURRENT_AVG,
POWER_SUPPLY_PROP_POWER_NOW,
POWER_SUPPLY_PROP_POWER_AVG,

如果找其中的一个比如POWER_SUPPLY_PROP_ONLINE

在kernel里搜索后只有在这几个文件里Qpnp-linear-charger.c  或者Smb358-charger.c 或者qpnp-vm-bms.c里找对应的

power_supply子系统笔记

现在的手机平板供电系统变得比以前的嵌入式设备复杂了,要考虑USB、AC和battery的供电,同时USB和AC还要充电,这一系列功能一般由电源管理芯片完成。android设备使用的供电系统使用的是sy...
  • sgmenghuo
  • sgmenghuo
  • 2015年03月04日 16:17
  • 4227

[RK3288][Android6.0] 电池信息守护进程 --- healthd

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 Android4.4 -> Android6.0 有点细微变化, 但是整体框架不变, 使...
  • kris_fei
  • kris_fei
  • 2016年12月22日 18:12
  • 1118

Android电源管理-Healthd

OS:Android 4.4.2 Android电源管理底层用的是Linux power supply框架。驱动部分不叙述。只看JAVA、JNI和CPP应用层。 从Android 4.4开...
  • u012296694
  • u012296694
  • 2015年05月01日 17:29
  • 2504

(原创)android6.0系统Healthd深入分析

概述 Healthd是android4.4之后提出来的一种中介模型,该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework层的BatteryService用以计算电池电量相关状态信...
  • u011311586
  • u011311586
  • 2016年04月07日 09:09
  • 3324

android6.0系统Healthd深入分析

http://blog.csdn.net/u011311586/article/details/51082685 概述 Healthd是android4.4之后提出来的...
  • thinkinwm
  • thinkinwm
  • 2016年07月22日 15:54
  • 783

解决android系统唤醒时间偏长------healthd里的epoll以及socket

在healthd中,有一个很好的例子,特地截取下来作为参考: 首先是 static int uevent_fd; static int eventct; static int epollf...
  • u013308744
  • u013308744
  • 2016年06月02日 14:43
  • 893

GT9XX触摸屏双击唤醒功能分析

一、触摸屏唤醒方式1.在屏幕上画其中26个字母中的一个来唤醒屏幕:例如:a/b/c/d…. 2. 在屏幕上画线唤醒屏幕:”上/下/左/右” 3.双击屏幕唤醒:在屏幕上双击两下。二、触摸屏唤醒的原理...
  • MENGHUANBEIKE
  • MENGHUANBEIKE
  • 2017年02月07日 16:00
  • 990

android6.0系统Healthd深入分析

概述 Healthd是android4.4之后提出来的一种中介模型,该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework层的BatteryService用以计算电池电量相关...
  • mmmccc000
  • mmmccc000
  • 2016年10月10日 20:26
  • 308

android6.0系统Healthd深入分析

概述Healthd是android4.4之后提出来的一种中介模型,该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework层的BatteryService用以计算电池电量相关状态信息...
  • sibuliaoni
  • sibuliaoni
  • 2017年04月06日 11:43
  • 110

android 休眠唤醒机制分析(一)

Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一有效的wake_lock,系统就不能进入深度休眠,但可以进行设备的浅度休眠操作。wake_lock一般在关闭lcd、tp但系统...
  • harhy
  • harhy
  • 2013年01月22日 08:50
  • 23254
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决android系统唤醒时间偏长------healthd里的一些调用
举报原因:
原因补充:

(最多只允许输入30个字)