包括两个部分kernel thermal monitor(KTM)和thermal engine。
Thermal 管理包括的内容如下:
硅片结温
内存温度限制
外表面温度限制
当thermal engine完全初始化后,KTM确保所有环境条件下的结温处于限定的范围之内。
Thermal engine monitor监控系统的温度限制范围。
机械结构设计模拟是获得最佳性能的必要步骤
Thermal management软件控制thermal响应。
DCVS:Dynamic Cloclk Frequency and Voltage Scaling.
下图包括了thermal 管理框架的四个部分:thermal engine, sensor driver以及其它温度管理设备。
在安卓用户空间thermal engine作为一个超级用户运行,thermal engine是温度管理的核心。启动时thermal engine初始化系统。threshold,set point以及管理的设备配置缺省情况从代码读取。参数用于设置温度传感器的中断门限。
为了在温度规范内获得最佳性能,这些参数在每一个设计中都要调优。温度传感器有:
嵌入芯片硅结的温度传感器,这些是被称之为TSENS
thermal management 设备是软件抽象的设备,用于控制硬件,如GPU,CPU等
除了上述thermal架构,还有两个温度管理算法用于thermal engine完全启动前的设备启动和linux内核初始化阶段的温度管理。
Android温度限制和特点
KTM
内核启动时保护系统
设置110°为CPU热插拔的门限
将控制移交给thermal engine
Thermal engine
完整的温度保护策略
对特定对象必须调节
Thermal reset
异常情况
TM移交时间线
KTM
KTM函数和相关的调试
循环查询指定TSENS的温度,并根据得到的温度有如下的行为:
check_temp()--位于drivers/thermal/msm_thermal.c;每一个采样周期(msm_thermal_info.poll_ms)将被调用
do_therm_reset()---如果任意一个温度传感器的温度超过critical门限,这将导致看门狗(其参数由设备树的qcom,therm-reset-temp指定)喂狗,
msm_thermal:msm_thermal_bite: TSENS:α reached temperature:β. System reset
msm_thermal:msm_thermal_bite: TSENS:α reached temperature:β. System reset
therm_get_temp()--获得设备树字段指定sensor的温度,在调试时需要将该温度打印出来。
do_core_control()--到CPU温度超过门限时将cpu unplug,其打印的信息如下:
msm_thermal:do_core_control: Set Offline: CPU$ Temp: β
msm_thermal:do_core_control: Allow Online CPU$ Temp: β msm_thermal:do_core_control: Set Offline: CPU$ Temp: β
msm_thermal:do_core_control: Allow Online CPU$ Temp: β
do_vdd_mx()--对linux设备,KTM管理所有的温度传感器,如果温度掉于某个门限,其提升内存供电电压,在收到内存门限后KTM打印如下信息:
msm_thermal: vdd_mx_notify: Sensorα trigger received for type
msm_thermal: vdd_mx_notify: Sens