Thermal engine 解析

本文所在的平台是安卓10

thermal engine是高通做的一个温度管理守护进程。在4.9后thermal engine不再被维护,推荐用于调试。从ktm+thermal engine 变成 thermal core来监控温度。可是市面上还是有很多手机继续沿用thermal engine去控制温度,而thermal core用于保守控制。可是,仍然有很多手机会继续使用thermal engine作为过温保护的工具。

目录

本文所在的平台是安卓10

一.thermal engine 框架

二. sensor 初始化

三. device初始化

四. thermal_settings配置

五. 持续监控

最后,希望可以帮到大家,如果有用的就收藏一下,白嫖的就点个赞。


一.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
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值