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


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

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

    1:代码修改

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

    \kernel-4.19\drivers\misc\mediatek\include\mt-plat\mt6739\include\mach\的目录下

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

    2:保存、检查代码

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

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

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

    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
    
    • 1

    再编A13部分:

    > ./MSSI_COPY_Make AGN_2263RD_DS12848_T userdebug
    
    • 1
    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
    
    • 1
    • 2
    • 3
    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
    
    • 1
    • 2

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

     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
    • 1
    • 2
    • 3

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

                              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
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    三、测试结果与分析

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

  • 相关阅读:
    react.js 手写响应式 reactive
    1.网络空间搜素引擎
    软件测试 -- 进阶 5 软件测试用例
    D. AND, OR and square sum(二进制位+贪心)
    SpringCloud之Eureka注册中心和负载均衡
    杭电oj 2034 人见人爱A-B C语言
    如果保障服务器的安全性
    半解析快速傅里叶变换
    vue2和vue3的区别
    【提示工程】询问GPT返回Json结构数据
  • 原文地址:https://blog.csdn.net/m0_45695811/article/details/131131908