Android7.1非标充电修改

本文介绍了Android 7.1系统中针对非标准充电的修改,涉及kernel和设备树配置,如添加qcom,detect-dpdm-floating属性和qcom,override-usb-current属性。详细解析了USB设备插入后的中断处理,充电类型识别及电流限制处理流程,包括dwc3_otg_sm_work函数中的状态切换和dwc3_check_float_lines函数的浮点检测,确保非标充电时设置正确电流。" 132821779,19687622,OpenCL编程:创建测试程序,"['编程', 'OpenCL', '并行计算', '服务器', 'Linux']
一、代码修改
diff --git a/kernel/msm-3.18/arch/arm/boot/dts/qcom/msm8953-qrd-sku3.dtsi b/kernel/msm-3.18/arch/arm/boot/dts/qcom/msm8953-qrd-sku3.dtsi
index 8de5830..94a517c 100755
--- a/kernel/msm-3.18/arch/arm/boot/dts/qcom/msm8953-qrd-sku3.dtsi
+++ b/kernel/msm-3.18/arch/arm/boot/dts/qcom/msm8953-qrd-sku3.dtsi
@@ -209,3 +209,7 @@
&wcd_rst_gpio {
     status = "disabled";
};
+
+&usb3 {
+   qcom,detect-dpdm-floating;
+};
diff --git a/kernel/msm-3.18/arch/arm/boot/dts/qcom/msm8953-qrd.dtsi b/kernel/msm-3.18/arch/arm/boot/dts/qcom/msm8953-qrd.dtsi
index 12b9502..676b124 100755
--- a/kernel/msm-3.18/arch/arm/boot/dts/qcom/msm8953-qrd.dtsi
+++ b/kernel/msm-3.18/arch/arm/boot/dts/qcom/msm8953-qrd.dtsi
@@ -174,6 +174,7 @@
     qcom,chg-led-support;
     qcom,external-typec;
     qcom,typec-psy-name = "typec";
+    qcom,override-usb-current;
     qcom,thermal-mitigation = <3000 2500 2000 1500 1000 500 0>;
     status = "okay";
};
diff --git a/kernel/msm-3.18/drivers/usb/dwc3/dwc3-msm.c b/kernel/msm-3.18/drivers/usb/dwc3/dwc3-msm.c
index d0520b9..67c5f94 100755
--- a/kernel/msm-3.18/drivers/usb/dwc3/dwc3-msm.c
+++ b/kernel/msm-3.18/drivers/usb/dwc3/dwc3-msm.c
@@ -3471,6 +3471,7 @@ static void dwc3_check_float_lines(struct dwc3_msm *mdwc)
         mdwc->chg_type = DWC3_PROPRIETARY_CHARGER;
         mdwc->otg_state = OTG_STATE_B_IDLE;
         pm_runtime_put_sync(mdwc->dev);
+        dwc3_msm_gadget_vbus_draw(mdwc, 2000);
         dbg_event(0xFF, "FLT psync",
                 atomic_read(&mdwc->dev->power.usage_count));
   
<think>我们正在处理一个关于修改Android 7.1设备在关机充电时的电池阈值数值的问题。首先,我们需要理解这个阈值是什么以及它在Android系统中的位置。 在Android系统中,关机充电模式(通常显示为一个电池充电图标)是由一个特殊的进程或守护进程处理的,这个进程通常称为`charger`。它独立于Android主系统运行,因此修改这个阈值可能涉及到修改内核参数、系统文件或`charger`进程的代码。 在Android 7.1(Nougat)中,充电阈值可能由以下几个地方控制: 1. **内核驱动**:电池驱动可能有一个文件在`/sys/class/power_supply/battery/`目录下,比如`charge_stop_threshold`或类似名称的文件。但是,在标准的Linux内核中,这个阈值通常由硬件或驱动决定,并且可能不支持动态修改。 2. **charger进程**:在Android源代码中,charger进程的代码位于`system/core/charger`目录。在这个进程中,可能会读取一个配置文件或使用硬编码的阈值来决定何时停止充电(例如,当电池达到100%时停止)。 然而,需要注意的是,关机充电模式通常使用一个简单的动画,并且充电控制逻辑可能在内核中实现,而用户空间(charger)只负责显示。因此,修改这个阈值可能需要修改内核代码或驱动。 ### 步骤分析 1. **确定当前阈值**:首先需要知道当前设备使用的阈值是多少,以及它是否可配置。我们可以通过以下方式查看: - 在正常开机状态下,通过ADB连接到设备,检查`/sys/class/power_supply/battery/`目录下的文件,特别是与充电控制相关的文件,如`charge_control_limit`、`charge_stop_threshold`等(注意:这些文件可能因设备而异)。 - 如果设备支持,我们可以读取这些文件来获取当前阈值。 2. **修改阈值**: - 如果存在可写的sysfs文件(如`/sys/class/power_supply/battery/charge_stop_threshold`),那么我们可以通过写入新的值来修改阈值。但是,在关机充电模式下,系统处于最小运行状态,通常无法执行脚本或命令。因此,我们需要在系统正常运行时设置,并确保设置的值在关机后仍然有效(可能需要修改启动脚本)。 - 如果不存在这样的文件,那么可能需要修改内核或charger的源代码。这需要重新编译内核或charger二进制文件。 3. **修改charger源代码**: - 在Android源代码中,charger进程的代码位于`system/core/charger`。在该目录下,`charger.c`是主文件。我们可以查找与充电控制相关的逻辑。例如,在charger中,它可能会读取电池状态,然后根据电池状态决定是否停止充电。我们可以修改这个逻辑中的阈值(例如,将100%改为90%)。 - 修改后,需要重新编译charger模块,并将其替换到设备的`/sbin`目录(因为关机充电模式使用ramdisk,其中包含charger二进制文件)。 4. **重新编译和刷机**:修改源代码后,需要重新编译整个Android系统或至少charger模块,然后将新的ramdisk刷入设备。这需要设备解锁bootloader,并且有相应的编译环境。 ### 具体操作(以修改charger源代码为例) 1. **获取Android源代码**:需要下载对应设备版本的Android 7.1源代码。 2. **修改charger代码**: - 在`system/core/charger/charger.c`中,查找电池状态检查的代码。例如,可能会有一个循环定期检查电池状态,并判断是否达到满电。 - 找到类似以下代码: ```c if (battery_capacity >= 100) { // 停止充电或执行其他操作 } ``` 将`100`改为期望的阈值(例如90)。 3. **编译charger**: - 在源代码根目录执行: ```bash source build/envsetup.sh lunch <your_device_target> make charger ``` 编译生成的二进制文件位于`out/target/product/<device>/root/sbin/charger`。 4. **替换设备上的charger**: - 将新的charger二进制文件打包进boot.img(即ramdisk),然后刷入设备。 ### 注意事项 - **设备差异**:不同设备的内核和充电管理方式可能不同,因此上述方法可能不适用于所有设备。 - **风险**:修改系统核心组件有风险,可能导致设备无法充电或无法开机。 - **测试**:务必在测试设备上进行,并确保有恢复方法。 ### 替代方案 如果设备制造商提供了修改充电阈值的接口(如某些笔记本电脑的电池管理),则优先使用官方方法。另外,有些自定义恢复(如TWRP)或内核可能支持此功能。 ### 相关问题 1. 如何在不修改系统的情况下延长Android设备的电池寿命? 2. Android设备的内核编译步骤是什么? 3. 如何解锁Android设备的bootloader? 4. 如何备份和恢复Android设备的boot分区? 5.Android系统中,还有哪些方法可以控制电池充电行为? 请注意,修改系统文件或内核需要一定的技术背景,并且可能导致设备失去保修或变砖。操作前请充分了解风险。 [^1]: 引用内容与当前问题无关,故不采用。 [^2]: 引用内容与当前问题无关,故不采用。</think>### 修改Android 7.1关机充电阈值的方法 修改Android 7.1设备的关机充电阈值需要底层系统权限和硬件支持,以下是具体步骤和注意事项: #### 1. **确认硬件/内核支持** - 通过ADB检查内核是否暴露充电控制接口: ```bash adb shell ls /sys/class/power_supply/battery/ ``` 查找如 `charge_control_limit`、`charge_stop_threshold` 或 `charging_limit` 等文件。若存在类似文件,说明硬件支持阈值修改。 #### 2. **修改阈值(需root权限)** ```bash adb root # 获取root权限 adb remount # 挂载系统分区可写 adb shell # 示例:将停止充电阈值设为90% echo 90 > /sys/class/power_supply/battery/charge_stop_threshold ``` #### 3. **永久生效方案** - **方法1:init脚本** 在`/system/etc/init/`下创建`.rc`文件: ```rc on charger write /sys/class/power_supply/battery/charge_stop_threshold 90 ``` - **方法2:内核补丁** 修改内核电池驱动代码(需重新编译内核): ```c // drivers/power/supply/battery_core.c static int default_stop_threshold = 90; // 修改默认阈值 ``` #### 4. **验证修改** ```bash adb shell cat /sys/class/power_supply/battery/charge_stop_threshold # 输出应为设定值 ``` #### ⚠️ 关键注意事项 1. **硬件依赖** 90%的设备需特定电源管理芯片(如TI BQ系列)支持阈值修改[^1]。 2. **系统签名** 修改`/system`分区需解锁bootloader并刷入已签名的修改版系统镜像。 3. **安全风险** 错误阈值可能导致: - 电池过充损坏(阈值过高) - 无法充满(阈值过低) - 充电电路故障(极端值) > 📌 **厂商限制**:多数厂商锁定该功能,需深度定制系统。如设备使用高通PMIC,可能需要QPST工具修改EFS分区参数[^2]。 --- ### 相关问题 1. 如何检查Android设备的电池健康状态? 2. 无root权限下如何延长Android电池寿命? 3. Android系统级省电优化有哪些技术方案? 4. 修改内核参数导致设备无法充电如何恢复? 5. 主流快充协议(如QC/PD)如何影响电池阈值控制? [^1]: 硬件支持是实现充电阈值修改的基础,特定电源管理芯片才能响应软件指令。 [^2]: 高通设备修改EFS分区需专用工具,操作不当可能导致基带故障。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值