|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
注册cpufreq_governor% e% ~& Q6 k% B; w3 |2 f
. s1 r1 U5 | Q- z
. p: A+ J6 v( q! S% _系统中可以同时存在多个governor策略,一个policy通过cpufreq_policy结构中的governor指针和某个governor相关联。要想一个governor被policy使用,首先要把该governor注册到cpufreq的核心中,我们可以通过核心层提供的API来完成注册:" g/ u' e% u& m) Q! I& V3 n2 h
[. W' V& u* e! c6 W) L
$ T L5 X' @0 S. t( ~+ G$ Y- 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;
- }1 ?/ }8 }" l8 l- ^+ X
5 @3 Z2 Q" J- l" Q7 U. ^
1 W1 w6 |& j4 [( y, W8 l5 |7 M: ]: N" p# i
! x2 E0 y; o; `* W* s8 f
# r, h5 P2 w8 D. k% `) D( J核心层定义了一个全局链表变量:cpufreq_governor_list,注册函数首先根据governor的名称,通过__find_governor()函数查找该governor是否已經被注册过,如果没有被注册过,则把代表该governor的结构体添加到cpufreq_governor_list链表中。在上一篇中我们提到,目前的内核版本提供了5种governor供我们使用,我们可以通过内核的配置項来选择需要编译的governor,同时需要指定一个默认的governor。在cpufreq.h中,将会根据配置項的选择,把CPUFREQ_DEFAULT_GOVERNOR宏指向默认governor结构体变量的地址,在注册cpufreq_driver的阶段需要使用这个宏来设定系统默认使用的governor。- Z4 u' [. }+ q9 P- ?
5 Q8 l0 H- S! q3 C- m
5 K9 p( t: z) p5 R# n: t6 q. u4 t0 z3 i$ E2 p4 b" g$ W, I& l0 F: M
9 s7 Y" \5 o7 l+ ~$ \1 {: _
; f- p8 }+ E6 Q K* p
7 B. c- R A! f' b6 P |
|