android 电池驱动下载,Android电池驱动电池服务(自用)

1. 系统服务的启动方式

2. Android之BatteryService

3. android 2.3电量管理

android下面也是调用相同的battrey_leds.sh文件 不过android的uevent触发事件已经在系统自带的电池服务里有了,我们只需在其中执行脚本battrey_leds.sh即可 从上图可以看到, 只需在JNI更新电流值之后,执行sh即可 0818b9ca8b590ca3270a3433284dd417.png

=====对上图做一个简要说明========

1. android系统服务

V2.0_A20\android\frameworks\base\services\java\com\android\server\SystemServer.java

battery = new BatteryService(context, lights); //电池服务

2. android电池服务

V2.0_A20\android\frameworks\base\services\java\com\android\server\BatteryService.java

mPowerSupplyObserver.startObserving("SUBSYSTEM=power_supply");//注册Uevent,监听power_supply

//UEvent与内核socket通讯,一个死循环,内核有事件上报,就触发onUEvent

public void onUEvent(UEventObserver.UEvent event) {

synchronized (mLock) {

updateLocked(); //看309L

}

}

native_update(); //刷新电量,调用电池服务JNI层的函数

processValuesLocked();//发布电量更新的广播

3. android电池服务JNI

V2.0_A20\android\frameworks\base\services\jni\com_android_server_BatteryService.cpp

//这个JNI与java层共享变量

//电量等参数在java层定义,即在BatteryService.java中定义,在这里使用

android_server_BatteryService_update //刷新电量等参数

4. android UEvent

V2.0_A20\android\\frameworks\base\core\java\android\os\UEventObserver.java

while(true) // 线程里的一个死循环,一直等待内核上报事件

observer.onUEvent(event);//回调观察者注册的 onUEvent函数 ,最终调用BatteryService.java里的onUEvent

====具体实施步骤==== 1. 在电池服务的JNI层com_android_server_BatteryService.cpp里增加脚本执行函数

static int exeCmd(const char* cmd)

{

if (!cmd)

return -1;

int ret = system(cmd);

if(ret < 0){

ALOGE("==========exeCmd error '%s'", cmd);

}

return 0;

}

暴露给BatteryService.java 的接口native_setBatLeds

//设置电池灯

static void android_server_BatteryService_setBatLeds(){

ALOGE("==========android_server_BatteryService_setBatLeds");

exeCmd("sh /system/bin/battrey_leds.sh");

}

//增加设置电池灯native_setBatLeds

static JNINativeMethod sMethods[] = {

/* name, signature, funcPtr */

{"native_update", "()V", (void*)android_server_BatteryService_update},

{"native_shutdown","()V",(void*)android_server_BatteryService_shutDownNotFromPMS},

{"native_setBatLeds","()V",(void*)android_server_BatteryService_setBatLeds},

};

2. 在电池服务BatteryService.java里 声明JNI接口

private native void native_setBatLeds();

在updateLocked()里调用即可

private void updateLocked() {

if (!mUpdatesStopped) {

// Update the values of mAcOnline, et. all.

native_update();

//JNI层设置电池灯

native_setBatLeds();

// Process the new values.

processValuesLocked();

}

}

3. 不过需要注意文件节点的权限 在android/device/softwinner/sugar-cubietruck/init.sun7i.rc

chown system system /sys/class/leds/xxx/brightness

chown system system /sys/class/leds/xxx/trigger

chomd 0777 /sys/class/leds/XXX/brightness

chomd 0777 /sys/class/leds/XXX/trigger

xxx替换成你想操作的led灯即可 5. 把battrey_leds.sh放到 android/out/target/product/sugar-cubietruck/system/bin chmod +x 这里还可以用另外的方法 把battrey_leds.sh文件copy进文件系统 可以参考 android\device\softwinner\sugar-cubietruck\sugar_cubietruck.mk android/device/softwinner/wing-common/ProductCommon.mk 里的PRODUCT_COPY_FILES字段 ===================================================== 最后奉上我的android编译步骤总结

---------------install JDK--------------  $ wget dl.cubieboard.org/software/tools/android/jdk1.6.0_45.tar.gz  $ sudo vim ~/.bashrc  Add :  JAVA_HOME=/work/tools/jdk1.6.0_45  export JRE_HOME=/work/tools/jdk1.6.0_45/jre  export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH  $ source ~/.bashrc  ---------------install tools--------------  $ sudo apt-get install git gnupg flex bison gperf build-essential \  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \  libx11-dev:i386 libreadline6-dev:i386 mingw32 tofrodos \  python-markdown libxml2-utils xsltproc zlib1g-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev  $ sudo apt-get install xsltproc  $ sudo apt-get install bison  $ sudo apt-get install flex  $ sudo apt-get install gperf  $ sudo apt-get install g++  $ sudo apt-get install gcc-multilib  $ sudo apt-get install libxml2-utils  ---------------download source code--------------  $ mkdir /home/box/work/android_build  $ wget http://dl.cubieboard.org/softwar ... droid_source.tar.gz  $ tar -zxvf v2.0_A20_android_source.tar.gz  ---------------build kernel--------------  $ cd lichee/linux-3.4  $ make clean  $ cp arch/arm/configs/cubietruck_config .config     $ cd ..  $ ./build.sh -p sun7i_android  ---------------build android--------------  $ cd ../android  $ source build/envsetup.sh  $ lunch    $ 16     //note:select sugar_cubietruck-eng  //有针对性的查看一下,后缀eng 表示工程机    userdebug开发调试机   user最终用户机  $ extract-bsp   //它的作用就是将内核中生成的驱动等拷贝到产品中  拷贝内核生成的module 和  *.image  $ make -j8  //第一次这里最好不要加j8,否则内存不够会出错,如果出错,尝试用j2, j4 试试  $ pack

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值