|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
注册cpufreq_governor
# y8 m% |' ^, ~2 I" k
! m+ t( i+ Z7 q% [& v" Q5 S! V7 y8 A/ U8 _
系统中可以同时存在多个governor策略,一个policy通过cpufreq_policy结构中的governor指针和某个governor相关联。要想一个governor被policy使用,首先要把该governor注册到cpufreq的核心中,我们可以通过核心层提供的API来完成注册:! [9 S @! Z" k, M3 W E Z
3 d6 O. n3 B2 f1 Z5 R1 ]! d* |
) F; o+ n, g0 W- int cpufreq_register_governor(struct cpufreq_governor *governor)
- {
- int err;
- ......
-
- governor->initialized = 0;
- err = -EBUSY;
- if (__find_governor(governor->name) == NULL) {
- err = 0;
- list_add(&governor->governor_list, &cpufreq_governor_list);
- }
-
- ......
- return err;
- }* |+ h$ M% f. |0 k D
) Y' t# Z3 X6 O) C% B# E5 n* {% D u/ _% O j
; ~7 E8 H# `( ~7 M& t
" a8 I7 u4 y, n5 @# l' X
8 P# M* Y& Y/ `9 _3 U+ Q核心层定义了一个全局链表变量:cpufreq_governor_list,注册函数首先根据governor的名称,通过__find_governor()函数查找该governor是否已經被注册过,如果没有被注册过,则把代表该governor的结构体添加到cpufreq_governor_list链表中。在上一篇中我们提到,目前的内核版本提供了5种governor供我们使用,我们可以通过内核的配置項来选择需要编译的governor,同时需要指定一个默认的governor。在cpufreq.h中,将会根据配置項的选择,把CPUFREQ_DEFAULT_GOVERNOR宏指向默认governor结构体变量的地址,在注册cpufreq_driver的阶段需要使用这个宏来设定系统默认使用的governor。
; F! Z1 t- D0 b+ C
3 b# G+ |; h# m/ C8 d; \0 {- P0 G0 X" v4 j4 b+ |
) l/ t& C3 j: P0 F4 u9 I# d# h5 {. @
! N% ?7 @+ @7 x r( a
1 }: Y4 P+ X9 h* m% a4 {; u0 t' J' k% l
|
|