解决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里找对应的

相关文章推荐

Android drivers/switch驱动详解(用于通过GPIO状态检测耳机、HDMI等的插拔状态)

相关文件: /drivers/switch/switch_gpio.c /drivers/switch/switch_class.c 节点创建流程: 1、在/sys/class/目录下创建“s...

QPNP 8909 8916 充电相关

最近一直在搞电源管理相关内容,之前是8610的bms,现在8916的bms,发现两者还是有点区别的,8916把对last_ocv_uv的估值算法分装成执行文件,作为服务一直运行。 电源管理方面,...

高通8X16电池BMS算法(一)

最近一直在搞电源管理相关内容,之前是8610的bms,现在8916的bms,发现两者还是有点区别的,8916把对last_ocv_uv的估值算法分装成执行文件,作为服务一直运行。 电源管理方面,应该是...

解决android系统唤醒时间偏长------如何在android的linux kernel中获取系统时间

如果想要优化一些唤醒系统的时间,就必须知道某段程序花了多少时间,今天我就找到了一些获取时间的函数以及应用 struct timespec ts; ts=current_kernel_time();...

解决android系统唤醒时间偏长------看log找可疑的地方

最近发现我们的手机的双击唤醒时间偏长,那么就需要去看是什么导致的。于是首先看唤醒的log [  252.830937] [ASDF] enter do_write_event_worker    ...

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

在healthd中,有一个很好的例子,特地截取下来作为参考: 首先是 static int uevent_fd; static int eventct; static int epollf...

Android系统当前时间日期的获取

  • 2015年11月17日 18:04
  • 1.41MB
  • 下载

android6.0系统Healthd深入分析

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

获取Android系统时间的小时制

  • 2013年06月27日 11:39
  • 859KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决android系统唤醒时间偏长------healthd里的一些调用
举报原因:
原因补充:

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