Android设备功耗调试简述

高通MSM8909芯片参考资料免费下载 高通MSM8909芯片参考资料免费下载 MSM8909,高通MSM8909的 原理图及PCB,PCBlayout指南,绝对的干货,不是干货都不分享给你们,资料比较难找,自行下载吧,都放在闯客网技术论坛,还有一个高通芯片资料交流群:813238832,也可以在群上下载资料,群上的大牛比较多,可以讨论交流问题 资料链接:https://bbs.usoftchina.com/thread-199461-... 阅读详情

###Android设备功耗调试简述
重点内容
本文记录了调试Android小型设备功耗的全过程,并且成功降低设备功耗,转载请注明出处。

一 Android设备功耗概述
二 功耗调节

.
###一:Android设备功耗概述
所有便携式的Android设备都会对设备的功耗提出要求,尽量在最快的运行速度的情况下,降低电池的消耗,降低设备温度。 本文所描述的设备功耗具体是包含Android智能手机,Android智能手表等小型便携式Android设备。 根据行业内部默认水准,我列出如下几条功耗要求:

1 设备整机(插SIM卡,拔除USB线)待机功耗的最小电流调节之3mA左右
2 设备连接后台数据的情况下待机每小时平均功耗 < 10mA(严格的说是 7mA)
3 依据设备电池容量限制设备充电功耗
4 设备通话10分钟~20分钟后的温度一般限制在45度以下

###二:功耗调节
本人调试的是 Android智能手表,Android智能手机情况类似,根据调试要求,我分为以下四个方向调节设备功耗

1 设备整机(插SIM卡,拔除USB线)待机功耗的最小电流调节之3mA左右
2 设备连接后台数据的情况下待机每小时平均功耗 < 10mA(严格的说是 7mA)
3 依据设备电池容量限制设备充电功耗
4 设备通话10分钟~20分钟后的温度一般限制在45度以下

#####2.1 设备整机待机最小功耗调节
确认设备整机(有sim卡的插上卡),测量待机最小电流,如果发现待机最小电流 大于3mA很多,就要逐步排查问题所在了,以下是我总结的两个方向:

1 硬件方向:逐步拔出外设,比如 TP LCD Camera等基本外设,这种方式简单粗暴,很容易定位功耗消耗源所在,比如我遇到的问题就是TP在待机的时候消耗电池,是某个引脚漏电。

2 软件方向:

第一部分:抓取Android电池消耗记录,查看CPU唤醒源。此处要介绍一个工具Battery Historian,这是一款由Google提供的Android系统电量分析工具. 在网页中展示手机的电量消耗过程, 输入电量分析文件, 显示消耗情况. 最后提供一些电量优化的方法,关于此工具的安装方式,网上或者我在另一个博客中有详细说明,需要的话请挪步查看。此处会介绍此工具的使用方式以及功能。

第二部分:关核降频

第一步:插上usb线,先断开adb服务,然后开启adb服务

(1)adb kill-server
(2)adb start-server

第二步:重置电池数据、收集数据

(3)adb shell dumpsys batterystats --enable full-wake-history
(4)adb shell dumpsys batterystats --reset

第三步:拔出usb线,避免其他不必要的影响,等待Android系统内部工具记录设备电池消耗过程,等待时间根据个人情况而定,我一般等待1小时,中间确保设备没有亮屏操作。

第四步:插上usb线,收集设备电池消耗情况,并且将文档转化为html文件。

(5)adb bugreport > bugreport.txt 
(6)python historian.py -a bugreport.txt > battery.html

第五步:翻墙,用google浏览器打开battery.html,表格类似如下:
这里写图片描述

第六步:根据自己的图表信息,分析cpu被唤醒原因,如果一直被唤醒,就无法进入休眠,肯定会耗电的,关闭其中可关闭的不重要的唤醒源。

第七步:
如果以上步骤还没有有效的降低你的设备功耗,那只有关核降频了,根据自己的平台,关闭锁屏默认开启的cpu数量以及降低ddr频率,我使用的是高通平台msm8909,msm8909默认开启2个CPU。此处就要说明关核降频的方式了,刚开始我用网上的方式通过adb shell 命令关核调频,但是没效果,具体原因不详,所以只好选择在代码里写死开启CPU的数量了,如下:

######7.1
此处CPU数量最少只能关闭至剩下2个核:“Maximum number of CPUs (2-32)”
kernel/arch/arm/Kconfig
config NR_CPUS
int “Maximum number of CPUs (2-32)”
range 2 32
depends on SMP
default “4”

如果想关闭只剩下一个核,我是这样改的:
kernel/kernel/cpu.c

int __cpuinit cpu_up(unsigned int cpu)
{
	在开始处加:
	if(cpu > 0)
	{
	return -EINVAL;
	}

}

######7.2
如果关闭到只剩下2个核或者一个核还是没有改变功耗过高的状况,可是尝试修改cpu的频率,此处介绍关于 adb shell 调节cpu频率的方式:

1 查看当前cpu cpu0频率的选择范围
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

2 查看当前cpu cpu0的当前最大频率 
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq

3 查看当前cpu cpu0的当前最小频率 
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq

4 查看当前cpu cpu0的运行频率
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 

6 关闭/打开 cpu0, 查看cpu0状态
echo 0 > /sys/devices/system/cpu/cpu0/online
echo 1 > /sys/devices/system/cpu/cpu0/online
cat  /sys/devices/system/cpu/cpu0/online

7 写cpu cpu0的频率
echo 1094400 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 


如果想在代码中写死 cpu频率可以在设备树中写死,高通平台的位置如下:

kernel/arch/arm/boot/dts/qcom/msm8909.dtsi
	qcom,msm-cpufreq {
		reg = <0 4>;
		compatible = "qcom,msm-cpufreq";
		clocks = <&clock_cpu  clk_a7ssmux>,
			 <&clock_cpu  clk_a7ssmux>,
			 <&clock_cpu  clk_a7ssmux>,
			 <&clock_cpu  clk_a7ssmux>;
		clock-names = "cpu0_clk", "cpu1_clk",
				"cpu2_clk", "cpu3_clk";
		qcom,cpufreq-table =
			// <  200000 >,
			// <  400000 >,
			// <  533330 >;
			   <  800000 >;
			// <  998400 >;
			// < 1094400 >;
			// < 1190400 >,
			// < 1248000 >,
			// < 1267200 >;
	};

#####2.2 设备连接后台数据的情况下待机每小时平均功耗 < 10mA(严格的说是 7mA)
和2.1一样,待机功耗降下来之后,一般情况下,平均功耗也会降下来。

#####2.3 依据设备电池容量限制设备充电功耗

2.3 依据设备电池容量限制设备充电功耗
限制充电电流,在代码中可以限制,高通msm8909平台修改两处即可:

kernel/arch/arm/boot/dts/qcom/msm-pm8909.dtsi
kernel/arch/arm/boot/dts/qcom/msm8909-pm8909-mtp.dtsi

kernel/arch/arm/boot/dts/qcom/msm8909-pm8909-mtp.dtsi
&pm8909_chg {
	qcom,vddmax-mv = <4350>;
	qcom,vddsafe-mv = <4380>;
	qcom,vinmin-mv = <4470>;
	qcom,ibatmax-ma = <250>;//充电电流限制250mA
	qcom,batt-hot-percentage = <25>;
	qcom,batt-cold-percentage = <80>;
	qcom,tchg-mins = <360>;
	qcom,chgr-led-support;
	status = "okay";
};


kernel/arch/arm/boot/dts/qcom/msm-pm8909.dtsi
pm8909_chg: qcom,charger {
			spmi-dev-container;
			compatible = "qcom,qpnp-linear-charger";
			#address-cells = <1>;
			#size-cells = <1>;

			qcom,vddmax-mv = <4200>;
			qcom,vddsafe-mv = <4200>;
			qcom,vinmin-mv = <4308>;
			qcom,ibatsafe-ma = <250>;//充电电流限制250mA
...
...
}

#####2.4 设备通话10分钟~20分钟后的温度一般限制在45度以下
这一项主要的温度来源于射频,在调节测试的时候不要连接usb线,会增强信号;

注意:本文没有说明 ddr的修改,因为我改了上面之后功耗就降了不少,所以此处不贴

后期遇到 后台进程唤醒cpu 后,需要25s才能睡眠的问题,过长的休眠时间导致功耗无法降到需求标准。
了解一下 android 休眠机制 weak_lock

相关命令 :
cat /sys/kernel/debug/wakeup_sources
dumpsys power

相关开关:

1
将CONFIG_PM_DEBUG=y
CONFIG_PM_SLEEP_DEBUG=y
这个两个宏定义在你们的kernel config文件中打开

2
DeviceIdleController.java updateConstants这个方法中的一些默认值的调整

3
确认config_enableAutoPowerModes这个值是否打开
config_enableAutoPowerModes

针对MSM8909w可穿戴设备的网络相关功耗优化 【需求】 针对部分可穿戴项目,如智能手表,电池相对较小对功耗要求较高,所以要求modem尽可能的降低搜网功耗 【优化场景】 1.网络弱覆盖场景 2.无网络覆盖场景 【优化思路】 减少网络搜索频率,以降低功耗 1. 关闭 OOS ACQ DB scan 2. 延长OOS下Power save时长 3. 减小Full RAT Mode Search频率 【适用平台】 MSM... 阅读详情

相关推荐

Android功耗调试汇总

(1)runtime PM机制 系统在非睡眠状态时,设备在空闲时可以进入runtime suspend状态同时不依赖系统wake_lock机制;非空闲时执行runtime resume使得设备进入正常工作状态。 主要代码放在Runtime.c (drivers\base\power)中,同时附带的Runtime_pm.txt (documentation\power)有详细说明。要使得设备可以进入runtime_idle与runtime_suspend必须满足device的2个参数usage_count与c

cornerstone1的博客 3900

高通android开发摘要

一部分是开源的,可以从codeaurora.org上下载,还有一部分是高通产权的,需要从高通的网站上下载。 将高通产权的代码放到:vendor/qcom/proprietary 1. 设置bms一些参数 @msm-pm8226.dtsi中  pm8226_bms: qcom,bms{ qcom,low-soc-calculate-soc-threshold = <...

LoongEmbedded的专栏 1万+

网络调试助手:安卓APP集成TCP、UDP、经典蓝牙、低功耗蓝牙的调试demo

1.前言 我终于不需要调试一个硬件设备装一个APP了,在应用商店下载别人的网络调试助手,又有广告,还不如直接写一个比较完整的网络调试助手。目前支持的功能有tcp客户端和服务端,udp,低功耗蓝牙客户端和服务端,经典蓝牙客户端和服务端。低功耗蓝牙可以动态获取服务端的UUID。 2.实现的方法 我是怎么实现一个个调试助手的呢?其实就是先下载别人的APP来测试,例如我先做的是tcp客户端,那我就会用我的客户端去和下载的APP开的服务端进行测试,测试成功了就写下一个,以此类推。我记得大三的时候,有个师兄说过,我们班

一粒程序米 1万+

[日更-2019.3.29]Android系统(MT6797)CPU频率工作模式以及调整频率的方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34365417的博客 2167

Android 功耗分析(底层篇)

最近在网上发现关于功耗分析系列的文章很少,介绍详细的更少,于是便想记录总结一下功耗分析的相关知识,有不对的地方希望大家多指出,互相学习。本系列分为底层篇和上层篇。大概从基础知识,测试手法,以及案例分析三个方面着手。

weixin_41872439的博客 4006

各种“挤牙膏式” 优化android 功耗

文章目录1、底电流调试(Rock Bottom Current Optimization)1.1校准RF1.2飞行模式1.3使用perf_defconfig1.4移除debugging APKs1.5把应用尽量删除1.6去掉CPU占用高的进程1.7手动移除所有可以移除的外设1.8移除驱动模块1.9配置不用的GPIO1.10检查power相关的NV items1.11排查GPIO、LDO、总线对于L...

Wu_Being 的优快云 博客 2411

安卓BLE蓝牙串口调试助手:轻松调试BLE设备的利器

安卓BLE蓝牙串口调试助手:轻松调试BLE设备的利器 【下载地址】安卓BLE蓝牙串口调试助手 安卓BLE蓝牙串口调试助手是一款专为开发者设计的轻量级工具,仅175K大小,无广告且无需高级权限。它支持BLE蓝牙通信,提供HEX和文本格式的数据发送与接收功能,界面简洁易用。无论是调试还是数据传输,这款应用都能高效完成任务,确...

gitblog_06731的博客 865

从零上手nRF Connect:安卓平台低功耗蓝牙设备调试全攻略

本文详细介绍了如何使用nRF Connect在安卓平台上进行低功耗蓝牙设备调试。从安装配置到设备扫描、连接建立,再到数据交互和协议分析,全面解析了这款强大的蓝牙调试工具的核心功能和使用技巧,帮助开发者快速定位和解决蓝牙通信问题。

weixin_29161785的博客 500

android蓝牙的调试(博通蓝牙工作 and 低功耗模式)

首先结合项目从整体上去把握这部分: 蓝牙模块中一个比较核心的文件是bluetooth.c, 在我们上电的时候, 会调用这个文件中bt_enable()这个函数, 在这个函数里面先调用set_bluetooth_power()上电,然后调用property_set("ctl.start", "hciattach"), 去启动hciattach这个服务,从而运行brcm_patchram_plus这

视频拼接器 1万+

Android BLE串口调试助手:轻松调试BLE设备

BLE串口通信调试应用的开发流程大致包括:设备扫描、连接、服务发现、数据交换等步骤。首先,通过扫描周边的BLE设备获取到目标设备的蓝牙地址,然后发起连接请求,并在成功连接后进行服务发现,最终实现数据的收发。整个开发过程需要对每一个步骤进行细致的测试与调试,确保通信的稳定性与数据的准确性。在安卓环境下开发BLE(Bluetooth Low Energy)应用时,数据接收机制是保证通信质量的核心部分。BLE通信不同于传统的蓝牙通信,它专为低功耗设计,因此,对数据包的接收与处理有着不同的要求和限制。

weixin_28931449的博客 1912

Python 映射函数map()详解

Python 映射函数map()详解

分享我的点点滴滴,在成长路上与你同行! 2140

Android蓝牙功能开发(低功耗与经典)

Android 蓝牙开发,很多项目会使用到,自己去摸索封装或者引用其他框架,也能解决部分问题。为何说是部分问题,Android蓝牙分为低功耗版与经典版,经典版是可以直接选择即可实现链接,低功耗版是需要配置uuid。故推荐一个框架,下面来分享使用教程。分两部分第一部分是直接使用框架,第二部分是修改框架源码,使用哪一种方式可以结合自己的需要。Android开发建议使用Android蓝牙调试工具app初步调试使用,这里推荐BLE调试助手app,各大应用市场都可以下载。BLE调试助手首页展示。

shi450561200的博客 7180

TI CC2642R蓝牙5.2模块实战:从零搭建智能门锁原型(附电路图)

本文详细介绍了如何基于TI CC2642R蓝牙5.2模块从零搭建智能门锁原型,涵盖硬件选型、低功耗配置、蓝牙安全交互等关键环节。通过CC2642R的高性能MCU和蓝牙5.2技术,开发者可实现低功耗、高安全性的智能门锁设计,并提供实用的电路图和PCB布局建议。

o5p6q的博客 110

Android功耗分析

Andorid功耗分析(0)功耗基础 Android功耗分析(1)功耗分析方法和优化 Andorid功耗分析(2)高通平台功耗优化基础 Android功耗分析(3)高通功耗问题分析 Android功耗分析(4)MTK平台待机功耗分析流程 Android功耗分析(5)功耗调试方法 Android功耗分析(6)整机功耗测试 Android功耗分析(7)思维导图 Android功耗分析(8)Camera...

StevenDuan17 2677

不只是抓取:用五指灵巧手(ROH-A001/RH56)玩转ROS2下的力控与混合控制

本文深入探讨了在ROS2环境下使用五指灵巧手(ROH-A001/RH56)实现力控与混合控制的实战技巧。从硬件通信协议解析到ROS2节点开发,详细介绍了力感知架构、实时数据处理和混合控制策略,帮助开发者在Ubuntu系统中高效实现精密操作。通过鸡蛋抓取等实例,展示了力控技术在机器人灵巧操作中的关键作用。

weixin_28221501的博客 287

告别密码本!用Windows NPS给华为/华三交换机做Radius认证,SSH登录更安全

本文详细介绍了如何利用Windows NPS实现华为/华三交换机的Radius认证,提升SSH登录安全性。通过集中化管理、精细化控制和完整审计追踪,企业可告别传统密码本,大幅提升网络设备管理效率。文章包含NPS服务部署指南、交换机配置详解及调试技巧,助力企业构建安全高效的统一认证体系。

weixin_42549723的博客 419

安卓版LightBlue 低功耗蓝牙BLE设备调试

安卓版LightBlue调试工具 https://www.lanzous.com/i3w8jif

PandaJack的博客 1万+

【VMware篇】7-通过ISO镜像升级VMware Esxi

本文主要介绍Dell服务器上安装的ESXi升级的方法之一(采用ISO升级)。

chen_yunan的博客 5515

【原创】Android 5.0 BLE低功耗蓝牙从设备应用

如果各位觉得有用,转载+个出处。 现如今安卓的低功耗蓝牙应用十分普遍了,智能手环、手表遍地都是,基本都是利用BLE通信来交互数据。BLE基本在安卓、IOS两大终端设备上都有很好支持,所以有很好发展前景。 现市面上各种手环、手表的智能设备中基本都充当"从设备"这样的角色,基本由智能设备完成蓝牙广播,由手机进行连接,然后交互数据。 根据上述方式的应用在安卓4.3、IOS 7.0的版本上就得到了支...

weixin_30826761的博客 533

# 多用户 JupyterHub 配置教程(通用 Linux 服务器版)

以上即是通用 Linux 服务器上的多用户 JupyterHub 实战配置。从安装认证与 Spawner 选择自动创建系统用户到反代与运维,覆盖了小团队到中等规模的主流场景。根据团队增长与合规要求,你可以进一步引入、统一身份源(LDAP/OAuth2/Keycloak)与资源配额治理,平滑演进到企业级部署。

数字化老司机 1289

三种1:4传输线变压器巴伦的分析

满足多模多馈天线系统匹配要求的传输线变压器巴仑有:双线传输线变压器( 见图1) 、三线传输线变压器( 见图4) 和四线传输线变压器( 见图5) 。尽管3 者的结构不同, 但都可实现1∶4 阻抗变换和不平衡-平衡转换。下面就应用电报方程对它们的阻抗变换特性和输出平衡特性进行分析。

weixin_42407808的博客 8047

Qt for Android 安卓低功耗蓝牙(BLE)开发环境搭建

因为涉及到低功耗蓝牙(BLE),搭建能自动弹框获取定位权限的Qt6 for Android开发环境。

abc6781的专栏 2129

《Python等级认证CCF-GESP真题解析》专栏总目录

❤️ 专栏名称:《🌸 专栏介绍:中国计算机学会GESP《CCF编程能力等级谁》Python编程(1~8级)历届真题解析。🚀 订阅专栏:订阅后可阅读专栏内所有真题解析,真题持续更新中,限时9.9元,欢迎订阅!

人生就是一个不断学习的过程 1878

Android蓝牙开发实战:用nRF Connect调试低功耗设备的5个隐藏技巧

本文深入探讨了Android蓝牙开发中nRF Connect工具的5个隐藏技巧,包括RSSI图表解析、多设备并行连接、自定义UUID配置、广告间隔优化和自动化测试脚本应用。这些高级功能能显著提升低功耗蓝牙设备的调试效率,适用于智能硬件开发、物联网设备测试等场景。

weixin_30897233的博客 394

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: ALSA-ASOC音频驱动框架简述
下一篇: Android编译简述
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值