Android模拟器学framework和driver之battery & backlight-----1.battery in linux

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 15:04 我要评论(0)

linux中battery驱动主要是去处理供电方面的东西,大家看下driver在bsp中的路径就可以知道,android模拟器使用的goldfish内核中battery驱动的位置是:

android/common/drivers/power/goldfish_battery.c

目前手机,平板电脑日益普及,在嵌入式领域battery的续航能力也一直制约着手机等嵌入式设备的发展,iphoneandroid手机做的好多了,希望android可以再处理上下功夫,赶超apple,废话不多说,这里battery主要是处理,电池供电、插上充电器充电、USB供电等事情的发生,还有就是一些电池的信息管理,比如说电量、温度等状态可以使用户知道。

OK,这边我们主要是使用goldfish中的battery驱动来分析一下linux中的power模块是如何工作的。

在这之前我们首先要来看一下power_supply这个device driver 子系统是如何建立的,这边我们涉及到的代码都在/common/drivers/power/下:

power_supply_core.c

power_supply_sysfs.c

goldfish_battery.c

power_supply_core.c是power_supple subsystem的核心函数,在power_supply子系统在linux启动的时候会先调用到里面的饿init函数:

[cpp]

static int __init power_supply_class_init(void)

{

power_supply_class = class_create(THIS_MODULE, "power_supply");

if (IS_ERR(power_supply_class))

return PTR_ERR(power_supply_class);

power_supply_class->dev_uevent = power_supply_uevent;

return 0;

}

subsys_initcall(power_supply_class_init);

这个函数比较简单首先是在class中创建了一个power_supply的class,启动模拟器后可以看到在sys/class/下会有一个power_supply文件夹生成,然后是

power_supply_class->dev_uevent = power_supply_uevent;这句话把power_supply_uevent挂到power_supply_class的dev_uevent上,这里说明下,就是说power_supply子系统都是使用uevent机制把信息传到user space的,当battery的状态发生改变的时候会向用户空间上报一个uevent,这样的话用户空间就可以知道什么时候去抓信息。

这个power_supply_uevent是个回调函数,被定义在power_supply_sysfs.c中:

[cpp]

int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)

{

struct power_supply *psy = dev_get_drvdata(dev);

int ret = 0, j;

char *prop_buf;

char *attrname;

dev_dbg(dev, "uevent\n");

if (!psy || !psy->dev) {

dev_dbg(dev, "No power supply yet\n");

return ret;

}

dev_dbg(dev, "POWER_SUPPLY_NAME=%s\n", psy->name);

ret = add_uevent_var(env, "POWER_SUPPLY_NAME=%s", psy->name);

if (ret)

return ret;

prop_buf = (char *)get_zeroed_page(GFP_KERNEL);

if (!prop_buf)

return -ENOMEM;

for (j = 0; j < ARRAY_SIZE(power_supply_static_attrs); j++) {

struct device_attribute *attr;

char *line;

attr = &power_supply_static_attrs[j];

ret = power_supply_show_static_attrs(dev, attr, prop_buf);

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...