rk818电池计量计无充电检测问题

博客内容涉及RK3399芯片在Android 7.1系统下遇到的一个故障:设备在关机状态下充电会无限重启。问题根源在于开机和进入kernel时无法检测到充电状态。作者通过分析代码,尤其是与初始化充电状态相关的函数,发现可能的解决方案是欺骗设备以为始终处于USBAC充电状态,从而规避充电检测问题。通过修改相关设置,成功让设备在关机充电时避免重启。

rk3399 android 7.1
我这边出现的问题是开机充电没问题。但是关机充电的话会无线重启。log现象是开机检测到充电,但是进入kernel的前面一段时间没有检测到,一段时间没有检测到机器就关机了。充电状态下进行重启,发现也有这个现象,进入kernel前面的一段时间检测不到充电信息。所以,想通过欺骗机器,上电的kernel前面是有充电的,即使没有充电,也默认是适配器充电。研究代码,估摸大概是在下面的部分
在这里插入图片描述
绿色两个函数看得出是设置初始化充电状态是usb充电或者dc充电(其实细分的话就是有充电,没充电,有充电的话,分两类,dc或者usb,usb中又分几种)。所以,要欺骗机器就从前面的两个跟init相关函数着手
在这里插入图片描述
其中一个函数的具体定义就是这样的,通过查阅rk818datasheet可以知道这边是在获取当前充电的各种状态信息并且设置。
在这里插入图片描述
这个函数没看懂。
所以只能猜往后面的两个函数可能可以欺骗机器。

在这里插入图片描述
在这里插入图片描述
这个设置相关的函数是通过switch来做判断做进入哪个状态的。通过追踪相关宏,知道这个枚举结构体的成员,从名字就能知道含义了。
在这里插入图片描述
加log后打印两次,没错,上面的初始化充电状态函数有两次调用这个函数,一次是检测dc,一次是检测usb。(其实也可以理解dc优先级别高些。)这边看log,这两次调用的结果都是没有相关充电设备。所以,我就在这欺骗机器了。
在这里插入图片描述
充电初始化状态默认是usb ac充电 然后就可以骗过去了,进行充电了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值