Thermal engine调试
一、调试thermal-engine的温控策略
1.找到当前的thermal engine配置
adb shell cat /vendor/etc/thermal-engine > thermal-engine.conf
2.修改该文件后推送到设备上
3.将”debug“放到thermal-engine.conf的首行,然后重新启动thermal-engine服务
adb root
adb stop thermal-engine //停止thermal-engine 服务
adb mount -o rw, remount /vendor //解决文件系统只读问题
adb push thermal-engine.conf /vendor/etc/thermal-engine.conf //将新修改的温控数据push到系统上
adb shell sync . //同步
adb shell start thermal-engine --debug & //启动thermal-engine服务
此时新的thermal-engine 温控策略就会生效
thermal-core的温控如果要修改温控数据,需要修改关于thermal的设备树文件。
4.logcat查看系统温度log
adb logcat –v time –s ThermalEngine
5、调试每个sendor的温度,看温控策略是否生效
在内核中配置CONFIG_THERMAL_EMULATION这个宏,在thermal_zone目录下就会生成emul_temp节点,通过给这个节点写温度,去测试sensor的温控策略是否触发
6、温控策略讲解
降频的范围是0~3,代表 频率的范围在 1305600khz~960000kHz.
按照图片上的数据,如果读到sensor的温度大于等于95度就会降频。具体是怎么降频的。是按照step_wise算法进行降的。
(1)step_wise算法
step_wise governor 对于 cooling_state 选择的策略:
a. 当 throttle 发生且温升趋势为上升,使用更高一级的 cooling state;
b. 当 throttle 发生且温升趋势为下降,不改变 cooling state;
c. 当 throttle 解除且温升趋势为下降,不改变 cooling state;
d. 当 throttle 解除且温升趋势为上升,使用更低一级的 cooling state;
step_wise governor 是每个轮询周期逐级提高冷却状态,是一种相对温和的温控策略。
根据上面的算法:
- 如果此时我们cpu的频率为13056000khz(0级),此时如果我们将温度升到95度,95度触发就会降频到1248000kHZ(1级).
- 在2级的基础上如果温度将温度升为96度,那么就会降频到2级,这就印证了上面算法的a点,温升趋势为上升。那么就会使用更高一级降频
- 如果此时我们从96度降到95度,那么2级保持不变,就印证了上面算法的b点,在温控已经触发时且温升趋势为下降,则保持不变。
- 如果我们从96降到94度,那么已经清除触发温度,频率就会从2级升到1级。
- 如果再降到93度就会升到0级
因为上面的降频范围是0~3级,所以我们只能在0~3级之间进行频率的切换。如果想触发后直接降到3级,可以将upper_limit和lower_limit都设为3.
(2)low_limit
移动设备在温度比较低的情况下同样会存在诸如无法充电等问题,所以low_limitgovernor应运而生,这个特殊的温控算法用于低温环境下的设备加热。
它的温控策略基本上就是反向的step_wise,在这里就不进一步展开叙述了,感兴趣的同学可以自行查看kernel源码。
(3) user_space
user_spacegovernor是通过uevent将温区当前温度,温控触发点等信息上报到用户空间,由用户空间软件制定温控的策略。
7、thermal-engine和thermal-core控制时间线
8、disable-thermal-zone属性说明
设备树中thermal中的 disable-thermal-zone;属性代表改sensor不会再进行温度的读取,但是通过emul_temp去写温度值还是能触发相应的动作。