您现在的位置是:首页 >学无止境 >Android-源码分析-MTK平台BUG解决:客户电池NTC功能(移植高低温报警,关机报警功能)---第二天分析与解决网站首页学无止境

Android-源码分析-MTK平台BUG解决:客户电池NTC功能(移植高低温报警,关机报警功能)---第二天分析与解决

Qiqy 2024-09-30 12:01:05
简介Android-源码分析-MTK平台BUG解决:客户电池NTC功能(移植高低温报警,关机报警功能)---第二天分析与解决

一、进一步修改代码内容-过程

今日了解到,昨日所修改的kernel层的mtk_charger.h文件位于A13部分,然6769平台A13部分的kernel层不参与编译,那么修改后再编译等等后续操作验证结果自然无效,参与编译kernel层是A12部分的kernel-4.19,

1:代码修改

所以取消昨日的①修改,重新改在kernel-4.19目录文件下,具体修改文件位于:

kernel-4.19driversmiscmediatekincludemt-platmt6739includemach的目录下

修改内容同昨日的①修改一样,只是说,今日换了一个修改地址。

2:保存、检查代码

我使用的主要是git status 与git diff 这两个命令:

>git status -查看状态,检查本地代码修改情况
>git diff      -查看修改具体内容

二、编译、打包、刷机测试-过程

1:编译

注意一下编译的规范,除了确定编译命令外,还要注意编译顺序:
先编A12部分:

>python vendor/mediatek/proprietary/scripts/releasetools/split_build_helper.py --run full_AGN_2263RD_DS12848_T-userdebug --layers vnd 2>&1 |tee total_build1.log

再编A13部分:

> ./MSSI_COPY_Make AGN_2263RD_DS12848_T userdebug

2:打包

打包路径位于A13部分:

> python out_sys/target/product/mssi_64_cn/images/split_build.py
> --system-dir out_sys/target/product/mssi_64_cn/images --vendor-dir ../S/out/target/product/AGN_2263RD_DS12848_T/images --output-dir
> output_load

3:刷机

不同平台刷机工具不同,针对MTK平台使用的工具为:FlashToolSelector
刷机步骤:

start— — —
1-打开FlashToolSelector
2-选择打包完成后生成的软件版本路径,
3-点击绿色按钮下载
4-将测试手机关机后,
5-手机USB线连接到电脑, 工具界面进度条开始刷新,
6-刷机中途发生了报错:—解决方案为把下拉选框中的<下载>选项切换为<全部格式化和下载> 断开手机USB连接,再次点击绿色按钮下载
7-再次用USB线将手机连接到电脑
8-刷机完成,手机自动开机
— — —end

4:测试(模拟测试)

BUG需求功能是在60度65度这种高温环境,申请让硬件部门使用专门的工具测试,在此之前要提前模拟测试有效后再说。
模拟测试是在测试手机连接电脑的情况下,使用终端命令进行模拟,
测试:adb模拟电池信息

> adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei
> level 100 --ei plugged 1 --ei temperature 600

上面这句命令的具体解释如下:

 adb shell am broadcast -发送广播通知
 adb shell am broadcast -a android.intent.action.BATTERY_CHANGED -发送一个电池状态改变的广播
 adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei level 100 --ei plugged 1 --ei temperature 600  -设置电池电量为 100%,设置电池充电状态为充电中,设置电池温度为 60

以下是模拟测试相关命令:

                          adb -查看是否安装有adb
                          adb root -获取系统root权限
                          adb devices -查看设备连接状态
                          adb shell setenforce 0 -临时关闭权限
                          adb shell getprop -输出所有能查询到的参数信息
                          adb shell getprop xxx.xxx.xxxxxx -查询某某属性
                          adb shell am broadcast -发送广播通知
                          adb shell am broadcast -a android.intent.action.BATTERY_CHANGED -发送一个电池状态改变的广播
                          adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei level 100 --ei plugged 1 --ei temperature 600 -设置电池电量为 100%,设置电池充电状态为充电中,设置电池温度为 60

三、测试结果与分析

测试结果:电池电量发生变化,充电器状态改变也有效,但是不同级别的温度并没有引起提示框
继续分析:
前面的分析发送提示广播后并没显示提示的逻辑,回到framework层分析PowerNotificationWarnings.java
该源码编写了电池提示警告的各种方法,其中包括解除高温提示,解除关机提示,显示高温提示,显示关机提示等等,
其中onReceive中条件判断语句中如果ACTION_CLICKED_TEMP_WARNING.equals(action)为真,执行两个方法,第一个是解除高温提示,第二个是显示高温提示。
所以注释第一个执行的方法,同理,在显示高温提示方法中只有在mHighTempWarning为false时才执行显示语句,所以注释这个条件,使方法只要被调用就执行显示语句。
再次验证结果无变化。。。
目前而言,直接改动的是kernel层自定义温度数值与app层的相关温度值,
但对温度发生变化达到高温的判断逻辑,判断完成后执行提示语的逻辑,以及调用的提示语资源等没有清晰了解。。。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。