我们知道调节温度的governer有五种,分别是fair_share/gov_bang_bang/step_wise/user_space/power_allocator。
在thermal_init->thermal_register_governors 中我们看到这五种governer其实默认都已经注册给kernel了
static int __init thermal_register_governors(void)
{
int result;
result = thermal_gov_step_wise_register();
if (result)
return result;
result = thermal_gov_fair_share_register();
if (result)
return result;
result = thermal_gov_bang_bang_register();
if (result)
return result;
result = thermal_gov_user_space_register();
if (result)
return result;
return thermal_gov_power_allocator_register();
}
那zone device到底是如何选择用那种governer的呢?
答案是thermal_init->of_parse_thermal_zones->thermal_zone_device_register中的下面这段code决定的
if (tz->tzp)
governor = __find_governor(tz->tzp->governor_name);
else
governor = def_governor;
由于从dts中没有包含struct thermal_zone_params *tzp。因此这里会governor = def_governor;
而def_governor是在注册governer的时候赋值的
int thermal_register_governor(struct thermal_governor *governor)
{
int err;
const char *name;
struct thermal_zone_device *pos;
if (!governor)
return -EINVAL;
mutex_lock(&thermal_governor_lock);
err = -EBUSY;
//由于是第一次注册这个governer,所以这里的__find_governor 会返回NULL
if (!__find_governor(governor->name)) {
bool match_default;
err = 0;
//将这个新注册的governer的添加到全局的thermal_governor_list中
list_add(&governor->governor_list, &thermal_governor_list);
//哈哈哈,这里是重点code,决定def_governor的赋值
match_default = !strncmp(governor->name,
DEFAULT_THERMAL_GOVERNOR,
THERMAL_NAME_LENGTH);
if (!def_governor && match_default)
def_governor = governor;
}
return err;
}
这里的DEFAULT_THERMAL_GOVERNOR定义如下:
#if defined(CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE)
#define DEFAULT_THERMAL_GOVERNOR "step_wise"
#elif defined(CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE)
#define DEFAULT_THERMAL_GOVERNOR "fair_share"
#elif defined(CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE)
#define DEFAULT_THERMAL_GOVERNOR "user_space"
#elif defined(CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR)
#define DEFAULT_THERMAL_GOVERNOR "power_allocator"
#endif
原来def_governor就是赋值的DEFAULT_THERMAL_GOVERNOR 这个字符串,而这个字符串的赋值是有上面这个五个config定义的。
到这里zone device是如何指定governer就彻底明白了
zone device是如何决定使用哪个governer的
最新推荐文章于 2025-03-19 20:13:03 发布