解决usb otg线系统重启的问题

探讨了在Android系统中,当miniusb用于供电,而mircousb作为OTG使用时,系统误判充电状态导致关机的问题。深入分析了电池管理框架,并提出在kernel层修改检测逻辑的解决方案。

硬件环境:板子上有两个usb口,一个是mini usb,用作系统供电,一个是mirco usb,用作调试口,该usb口的电由mini usb提供,且该usb口不能主动给系统供电。
软件逻辑:应用服务检测到系统充电器拔出的时候会关闭系统
问题:在mini口插入充电器的情况下,往mirco usb口插入usb otg设备的时候,系统也会关机

经研究,导致该问题出现的原因,android系统默认硬件只有一个usb口,你把该usb当做otg口用的时候,系统就认为当前不是处于插入充电器状态,所以会把/sys/class/power_supply/ac/online的值清零,导致上报广播ACTION_POWER_DISCONNECTED给系统,最后导致系统关机

解决办法是,更改kernel层插入usb设备时候的检测逻辑。具体分析思路和解决过程及方案如下:

1.首先要大致了解下android的电池管理框架
Android系统中对电池的管理驱动层继承了linux下的power supply class,而在用户层则是在BatteryService.java中通过广播的方式将电池相关的属性上报给上层app使用。这些属性都是在java中声明,在jni中调用更新的。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值