以下根据A311D的降温策略理解Linux Thermal架构
Linux Thermal驱动架构
Thermal框架分为四部分:
- Thermal Driver
负责将获取温度的设备,注册成struct thermal_zone_device,比如Temp Sensor、NTC等; - Thermal Governor
负责如何控制温度,注册成struct thermal_governor,比如Step Wise、Bang Bang等; - Thermal Cooling
负责将控制温度设备,注册成struct thermal_cooling_device,比如风扇、CPU、DDR、GPU等; - Thermal Core
核心使Thermal Driver、Thermal Governor、Thermal Governor相互绑定,同时提供了用户空间sysfs节点等通用功能;
所以Thermal的工作流程是通过Thermal Driver获取温度,然后经过Thermal Governor决策,最后通过Thermal Cooling执行降温。
A311D温度控制
-
Thermal Driver (获取温度设备 thermal_zone)
- A311d有两个温度传感器
- 一个是soc温度传感器,另一个是ddr温度传感器
- A311d有两个温度传感器
-
Thermal Cooling (执行降温设备 cooling_device)
- A311d有5个降温设备
- 这几个降温方式分别是GPU降频、GPU掉核、CPU降频、CPU掉核
- A311d有5个降温设备
-
Thermal Governor(降温策略)
- A311D thermal_zone 支持多种降温算法
- 这里介绍下内核中的几种温度控制策略:
- A311D thermal_zone 支持多种降温算法
接下来分析A311D CPU降温行为:
- 传感器温度达到设置的温度触发点后 -> 执行降温算法 -> 降温算法调用底层降温设备提供的状态切换接口进行状态切换
- 上面看到A311D注册了5个降温设备,其中我们重点分析cpufreq_cool和cpucore_cool,它们分别是降频降温和掉核降温
- 注册cpufreq_cool的驱动文件为:drivers/thermal/cpu_cooling.c
- 注册cpucore_cool的驱动文件为:drivers/amlogic/thermal/cpucore_cooling.c
- 根据文件中的代码行为可判断它们分别为CPU频率变化和CPU核个数变化
- 其中两个cpufreq_cool设备对应两个cluster:cluster0包括两个小核,cluster1包括4个大核
- cpucore_cool没有cluster,所以它包含6个核
- DTS 中cooling device:
- DTS中设置的温度触发节点