Android14 OTA升级速度过慢问题解决方案

软件版本:Android14

硬件平台:QCS6115

问题:OTA整包升级接近20min,太长无法忍受。

    该问题为Android高版本的虚拟AB分区压缩技术所致,其实就是时间换空间,个人推测AB分区压缩会节约硬件存储空间,但是升级过程中会涉及解压缩再升级的耗时过程,取舍之间,我们计划关闭该配置,还有一个就是升级服务的进程用户组配置,这个大概提升五六分钟左右,两者结合起来,升级时长从20min缩减到五六分钟,达标!

    改动如下:

1、分区压缩选项关闭:

diff --git a/target/product/virtual_ab_ota/android_t_baseline.mk b/target/product/virtual_ab_ota/android_t_baseline.mk
index 18e08e4e8e..2225a1dfbc 100644
--- a/target/product/virtual_ab_ota/android_t_baseline.mk
+++ b/target/product/virtual_ab_ota/android_t_baseline.mk
@@ -28,12 +28,12 @@ PRODUCT_VIRTUAL_AB_OTA := true
 
 PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.enabled=true
 
-PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.compression.enabled=true
+PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.compression.enabled=false
 PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.userspace.snapshots.enabled=true
 PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.io_uring.enabled=true
-PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.compression.xor.enabled=true
+PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.compression.xor.enabled=false
 
-PRODUCT_VIRTUAL_AB_COMPRESSION := true
+PRODUCT_VIRTUAL_AB_COMPRESSION := false
 PRODUCT_VIRTUAL_AB_COMPRESSION_METHOD ?= none
 PRODUCT_PACKAGES += \
     snapuserd \

2、配置进程用户组:

diff --git a/update_engine.rc b/update_engine.rc
index bc6447b2..d7a376d1 100644
--- a/update_engine.rc
+++ b/update_engine.rc
@@ -2,7 +2,7 @@ service update_engine /system/bin/update_engine --logtostderr --logtofile --fore
     class late_start
     user root
     group root system wakelock inet cache media_rw
-    task_profiles OtaProfiles
+    task_profiles CPUSET_SP_FOREGROUND
     disabled
 
 on property:ro.boot.slot_suffix=*

Mark it.

<think>好的,我现在需要帮助用户解决在MTK平台上充电图标消失问题,特别是如何通过修改软件代码来解决。首先,我要回忆一下之前的对话内容,用户之前询问过这个问题的原因,涉及硬件检测延迟、软件处理流程、电池管理策略等。现在用户想了解具体的代码修改方法。 首先,我需要确定用户可能的背景。用户可能是开发者或有一定技术背景的人,想要自己调整代码解决问题,或者是想了解内部机制。不过,考虑到修改系统底层代码需要特定的权限和知识,用户可能是在进行定制开发或调试。 接下来,我需要整理之前在软件部分提到的可能原因,比如低功耗模式下的资源限制、事件传递延迟、动画效果等。解决方案需要针对这些点,提出具体的代码修改方向。 我需要考虑MTK平台的具体架构,比如内核层、HAL层、框架层和应用层。可能的修改点包括充电检测的去抖时间、中断处理、事件上报速度、动画效果时长,以及电源管理模块的优化。 要注意代码修改需要访问系统源代码,通常只有厂商或拥有系统源码的开发者才能进行。因此,在回答时需要提醒用户这一点,避免他们误以为普通用户能自行修改。 另外,需要分步骤说明每个修改方向的具体方法,比如调整去抖时间debounce_time,优化中断处理函数,缩短动画持续时间,调整电源管理中的唤醒锁等。同时,提供示例代码或配置路径,如内核驱动中的charger检测模块,HAL层的参数设置,或者框架层的动画资源文件。 还要考虑可能的测试和验证方法,比如通过日志查看事件传递时间,使用工程模式检查参数变化后的效果。同时,提醒用户修改这些参数可能带来的风险,比如过度缩短去抖时间导致误触发,或者动画太快影响用户体验。 最后,需要总结建议,指出如果用户没有系统源码权限,应联系厂商或等待OTA更新。如果用户是开发者,建议逐步调试和验证每个修改点,确保系统稳定性。</think>在MTK平台的软件层面优化充电图标消失延迟问题,通常需要从**充电状态检测逻辑**、**事件传递机制**和**UI响应流程**三个层面修改代码。以下是具体方向和示例: --- ### 一、缩短充电状态检测的响应时间 #### 1. **调整充电IC的检测去抖时间(Debounce Time)** - **修改文件**:内核驱动层(如`drivers/power/supply/mtk_charger.c`) - **关键代码**:减少`debounce_time`值(单位:毫秒) ```c // 原始值可能为200ms,可尝试改为100ms #define VBUS_DEBOUNCE_TIME 100 ``` - **风险**:过小的值可能导致误判(如接触不良时误认为断开) #### 2. **优化中断处理函数** - **修改文件**:充电芯片驱动(如`mtk_chg_det_irq_handler()`) - **关键修改**: - 确保中断触发后立即更新VBUS状态 - 减少不必要的延迟操作(如`msleep()`调用) ```c static irqreturn_t mtk_chg_det_irq_handler(int irq, void *data) { struct charger_device *chg_dev = data; bool vbus_attach = mtk_is_vbus_online(); // 立即读取VBUS状态 power_supply_changed(chg_dev->psy); // 快速通知电源子系统 return IRQ_HANDLED; } ``` --- ### 二、加速事件传递流程 #### 1. **提高充电状态事件优先级** - **修改文件**:HAL层(如`hardware/libhardware/modules/charger/charger.c`) - **关键修改**:通过`uevent`快速上报事件 ```c // 在检测到VBUS断开时,立即发送uevent char *uevent_str = "SUBSYSTEM=power_supply;ACTION=change;POWER_SUPPLY_ONLINE=0"; kobject_uevent_env(&dev->kobj, KOBJ_CHANGE, uevent_str); ``` #### 2. **绕过低功耗模式限制** - **修改文件**:电源管理模块(如`frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java`) - **关键修改**:在充电拔出事件中临时唤醒系统 ```java // 当检测到充电断开时,强制唤醒CPU mWakeLock.acquire(50); // 保持50ms唤醒时间 ``` --- ### 三、优化UI响应逻辑 #### 1. **缩短充电图标动画时长** - **修改文件**:充电界面资源(如`frameworks/base/core/res/res/anim/charge_animation.xml`) - **关键修改**:减少`android:duration`值 ```xml <alpha android:duration="100" <!-- 原值可能为300ms --> android:fromAlpha="1.0" android:toAlpha="0.0" /> ``` #### 2. **强制刷新显示层** - **修改文件**:LCD驱动或SurfaceFlinger(如`hardware/mediatek/surfaceflinger/DisplayHardware/HWC.cpp`) - **关键修改**:在充电状态变化时触发立即刷新 ```cpp void handleChargingStatusChange(bool is_charging) { if (!is_charging) { requestDisplayRefresh(0); // 立即刷新显示 } } ``` --- ### 四、调试与验证方法 1. **查看内核日志**:通过`dmesg | grep "charger"`确认VBUS检测延迟 2. **监测事件传递**:使用`getevent`命令观察`/dev/input/eventX`上报时间 3. **工程模式验证**:在MTK工程模式中测试充电参数(路径:`Hardware Testing -> Power -> Battery`) --- ### 注意事项 - **代码兼容性**:不同MTK平台版本(如MT6762/MT6785)的驱动实现可能不同 - **系统签名**:修改系统级代码需重新编译并签名刷机包 - **厂商限制**:部分厂商会锁定充电管理模块,需解BL锁才能修改 如果无系统源码权限,可尝试通过**ADB命令**临时调整(需ROOT): ```bash # 调整充电检测灵敏度(示例路径) echo 100 > /sys/class/power_supply/battery/debounce_time ``` 建议优先联系设备厂商获取官方优化方案,或等待系统更新推送。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值