Battery驱动及framework架构分析(android4.2)

Battery驱动及上层数据流程分析


软件环境:android4.2/Linux3.0
硬件环境:freescale

       电池这个模块很久以前看过,近来觉得生疏了,结合代码做了一遍回顾,特此记录,加深印象,方便回顾:

一, 基本流程
1,驱动层面,battery设备首先向power_supply_core注册,后者对所有向其注册的设备维护了一个工作队列,工作函数会获取电池基本信息(电压,电量,温度,模式等),如果有哪项信息changed,则power_supply_core会向上汇报uevent。

2,BatterService层面,service在创建的时候,启动了一个UEventObserver来监听驱动层的uevent事件,调用jni层接口native_update()来读取变化后的sys节点数据信息,再通过broadcast的方式将事件(ACTION_BATTRY_CHANGED)广播给监听该事件的service,service在与app通信呈现到界面,比如电池的电量,模式等信息。

二,代码结构
1,驱动层面:drivers/power目录


以及相应的battery驱动文件:**_battery.c
   2,jni层面:frameworks/base/services/jni/com_android_server_BatteryService.cpp
此文件封装BatteryService调用的native_update()接口。

3,Service层:frameworks/base/services/java/com/android/server/BatteryService.java
frameworks/base/core/java/com/android/internal/os: 和Battery 相关的内部部分 BatteryService.java 通过调用, BatteryService JNI来实现com.android.server包中的 BatteryService类。BatteryManager.java中定义了一些 JAVA 应用程序层可以使用的常量。
frameworks/base/core/java/android/os:  包中和Battery 相关的部分。

三,结合点分析
1,sysfs
驱动程序注册时,创建的一系列的属性信息节点,jni层可以通过readFromFile接口直接获取相应的信息,返回给Service层。

2,native_update
Service层收到驱动层上报的uevent之后, mUEventObserver调用update()函数,update()会调用native_update()接口。

3, mUEventObserver
BatteryService实现了一个UevenObserver mUEventObserver。uevent是Linux 内核用来向用户空间主动上报事件的机制,对于JAVA程序来说,只实现 UEventObserver的虚函数 onUEvent,然后注册即可。 BatteryService只关注 power_supply 的事件,所以在构造函数注册。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值