本文所在的平台是安卓10
thermal engine是高通做的一个温度管理守护进程。在4.9后thermal engine不再被维护,推荐用于调试。从ktm+thermal engine 变成 thermal core来监控温度。可是市面上还是有很多手机继续沿用thermal engine去控制温度,而thermal core用于保守控制。可是,仍然有很多手机会继续使用thermal engine作为过温保护的工具。
目录
最后,希望可以帮到大家,如果有用的就收藏一下,白嫖的就点个赞。
一.thermal engine 框架

sensor:传感器,获取温度。
device:设备,一些调频的设备。比如当cpu sensor检测到温度过高时,会调用cpu device降频操作。通常就是对cpu的设备节点进行操作。(或者cpu 的cooling device)。
thermal_setting:控温的配置,根据soc型号获取,或者从thermal-engine.conf获取。如今,更多选择后者。作用是配置温控策略。记录温度阈值等。
算法:ss算法,pid算法,monitor等。
源码位置:/vendor/qcom/proprietary/thermal-engine
二. sensor 初始化
....
sensors_init(minimum_mode);/*传感器初始化*/
...
如果还是ktm + thermal engine管理模式(老kernel)会在init_sensor_alias添加好sensor。
int sensors_init(int minimum_mode)
{
int ret_val = 0;
min_mode = minimum_mode;
#ifdef ENABLE_BW_SENSOR
struct sensor_info *bw_sensor_list = NULL;
#endif /* ENABLE_BW_SENSOR */
if (!min_mode)
modem_ts_qmi_init();
//ktm+thermal engine管理模式则进入init_sensor_alias
init_sensor_alias();
parse_thermal_zones();
......
}
进入parse_thermal_zones
static void parse_thermal_zones(void)
{
DIR *tdir = NULL;
struct dirent *tdirent = NULL;
char name[MAX_PATH] = {0};
char cwd[MAX_PATH] = {0};
int cnt = 0, ret = 0;
if (!getcwd(cwd, sizeof(cwd)))
return;
if (sensor_cnt <= 0){
//如果没有ktm,进入init_space_sensors进行注册sensor
return init_user_space_sensors();
}
ret = chdir(THERMAL_SYSFS); /* Change dir to read the entries. Doesnt work
otherwise */
tdir = opendir(THERMAL_SYSFS);
if (!tdir || re

最低0.47元/天 解锁文章

506





