基本概念

参阅下面两篇文章,就可以大概了解一些概念的内容了

https://source.android.com/devices/architecture/hidl/thermal-mitigation

https://blog.csdn.net/feelabclihu/article/details/107873407

功能实现

这里我们不做讲解,直接给参考例子,基本拿来可以用

》Thermal HAL 2.0的实现

https://github.com/LineageOS/android_hardware_google_pixel/tree/lineage-18.1/thermal

》sepolicy相关设置

https://github.com/LineageOS/android_hardware_google_pixel-sepolicy/tree/lineage-19.0/thermal

》thermal_info_config配置文件,根据自身系统配置

https://github.com/LineageOS/android_device_google_taimen/blob/lineage-17.1/thermal_info_config.json

测试

技巧一:

执行 adb shell dumpsys thermalservice 可以查看温度的信息,例如:

技巧二:

Linux kernel中有模拟温度的方式,编内核时打开选项开关CONFIG_THERMAL_EMULATION=y,这样就会看到如下这个值:

/sys/class/thermal/thermal_zone0/emul_temp

之后测试可以:

echo  100000 > /sys/class/thermal/thermal_zone0/emul_temp

然后使用dumpsys thermalservice 查看这个模拟的温度值

VTS/CTS测试

几个相关的测试项

run vts -m VtsHalThermalV2_0TargetTest

run vts -m VtsHalThermalV1_0TargetTest

run vts -m VtsHalThermalV1_1TargetTest

run cts -m CtsOsTestCases -t android.os.cts.PowerManager_ThermalTest

补充

/frameworks/base/services/core/java/com/android/server/power/ThermalManagerService.java

Android framework中有去注册监听器,检测Thermal HAL 的回调事件,高温时可能出发shutdown

private void shutdownIfNeeded(Temperature temperature) {
if (temperature.getStatus() != Temperature.THROTTLING_SHUTDOWN) {
return;
} final PowerManager powerManager = getContext().getSystemService(PowerManager.class);
switch (temperature.getType()) {
case Temperature.TYPE_CPU:
// Fall through
case Temperature.TYPE_GPU:
// Fall through
case Temperature.TYPE_NPU:
// Fall through
case Temperature.TYPE_SKIN:
powerManager.shutdown(false, PowerManager.SHUTDOWN_THERMAL_STATE, false);
break;
case Temperature.TYPE_BATTERY:
powerManager.shutdown(false, PowerManager.SHUTDOWN_BATTERY_THERMAL_STATE, false);
break;
}
}

关于温度的几个等级可以参考 https://source.android.com/devices/architecture/hidl/thermal-mitigation

触发这些事件的温度就是我们在thermal_info_config.json配置的, 如果不需要触发回调事件可以设置 "Monitor":false

    "Sensors":[
{
"Name":"cpu-thermal",
"Type":"CPU",
"HotThreshold":[
"NAN",
"NAN",
"NAN",
95.0,
"NAN",
"NAN",
125.0
],
"VrThreshold":"NAN",
"Multiplier":0.001,
"Monitor":false
}
]

最新文章

  1. 删除mysql binlog日志
  2. ROS下创建第一个节点工程
  3. Python:进程
  4. android TextView加载html内容并加载图片
  5. 通知(Toast+Notification)
  6. java调用dll文件中的类型转换
  7. ASCII 码表对照
  8. leetcode_question_114 Flatten Binary Tree to Linked List
  9. RemoteViews的理解和使用
  10. C++结构体中sizeof(1)
  11. opencv 中cvZero()的使用
  12. PAT乙级1001. 害死人不偿命的(3n+1)猜想 (15)
  13. 使用PHP开发一个简单的后台接口(响应移动端的get请求和post请求)
  14. Delphi的Hint介绍以及用其重写气泡提示以达到好看的效果
  15. latex 导入pdf
  16. Switch 选择结构
  17. Mac下的Docker及Kubernetes(k8s)本地环境搭建与应用部署、管理界面kubernetes-dashboard
  18. IOS指纹识别调用
  19. yum卸载
  20. NodeJS设置Header解决跨域问题

热门文章

  1. WPF进阶技巧和实战06-控件模板
  2. Java——this关键字总结
  3. CentOS7 Docker容器无法ping通宿主机ip问题解决记录
  4. JuiceFS v0.17 发布,通过 1270 项 LTP 测试!
  5. 【SpringBoot技术专题】「权限校验专区」Shiro整合JWT授权和认证实现
  6. Java - 你的 Java 代码有这些坏味道吗?
  7. 5.java内存模型详细解析
  8. C语言日记① 初识C
  9. JVM堆内存泄露分析
  10. python pip使用国内镜像安装第三方库:命令行或PyCharm