需求:
产品工作在低温环境,电池输出电流较小,期望工作启动峰值电流小于 1A 以下,最好在 500ma;
验证:
测试过程为电源键开机起到系统进入到安卓桌面
1. 开发板启动峰值电流约 1.2A 左右 (无显示屏)
2. 对于使用 SIM 和不使用 SIM 卡情况测试峰值电流约 1.2A 左右
3. 对于飞行模式和正常模式下开机测试峰值电流约 1.2A 左右
使用 SIM 卡正常模式启动电流记录:
---------------------------------------------------------------------------------------
解决思路:
测试的峰值电流主要发生在开机 10S 时间段,此时系统启动了 android init 程序,使用低频低核数启动系统,来减小峰值电流,在系统正常启动完后恢复正常的 CPU 频率和核数
步骤 1:
在 device/mediatek/mt6771/init.mt6771.rc 文件修改 CPU 频率和核数
- on early-init
- + # highly freq
- + write proc/ppm/enabled "1"
- + write proc/ppm/policy/ut_fix_core_num "1 1"
- + write proc/ppm/policy/ut_fix_freq_idx "15 15"
- on init
注意:
修改 CPU 频率和核数需要在 on init 之前,建议在写 on early-init 和 on init 之间即可;.rc 类似于.xml 文件,system/core/init/init.c 文件 main 函数会解析.rc 文件,on early-init、on init 等代表触发器,在特定的条件下会执行触发器后编写的命令。
格式 |
含义 |
on early-init |
在初始化早期阶段触发 |
on init |
在初始化阶段触发 |
on late-init |
在初始化晚期阶段触发 |
on boot/charger |
当系统启动 / 充电时触发 |
on property |
当属性值满足条件时触发 |
参考链接:Android 系统启动之 init.rc 文件解析过程
步骤 2:
在接收到系统开机广播后恢复正常的 CPU 频率和核数;在任意系统服务,系统应用源码注册开机广播接收器;
示例:
在系统设置应用代码内添加开机广播接收
路径:静态方式注册广播
- vendor/mediatek/proprietary/packages/apps/MtkSettings/AndroidManifest.xml
添加声明
- <receiver android:name="com.mediatek.settings.RestoreRotationReceiver">
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- + <action android:name="android.intent.action.BOOT_COMPLETED"/>
- </intent-filter>
- </receiver>
vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/mediatek/settings/RestoreRotationReceiver.java
- import java.io.BufferedReader;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.PrintStream;
- public class RestoreRotationReceiver extends BroadcastReceiver {
- private static final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
- private String cpuPath="proc/ppm/enabled"; // 多核控制开关
- private String cpuHz="proc/ppm/policy/ut_fix_freq_idx";//cpu 频率
- private String cpuNum="/proc/ppm/policy/ut_fix_core_num"; //cpu 核数
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(ACTION_BOOT)) {
- wirteValue(cpuNum,"-1 -1");
- wirteValue(cpuHz,"-1 1");
- wirteValue(cpuHz,"0");
- }
- }
-
- public void wirteValue(String path,String value) {
- BufferedWriter bw = null;
- try {
- bw = new BufferedWriter(new FileWriter(new File(path)));
- bw.write(value);
- } catch (IOException e) {
- e.printStackTrace();
- }finally{
- if (bw!=null) {
- try {
- bw.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
更多详细资料,可到 MTK新移科技技术论坛 - Powered by Discuz!