网站开发建设项目服务清单,网站备案制度,单页关键字优化,全国网站直播平台被摧毁如何开发一个新的CPUFreq driver初始化首先#xff0c;在一个 __initcall level 7后者以后的函数中检查内核是否运行在正确的CPU和正确的芯片组上面。如果正确#xff0c;则通过cpufreq_register_driver() 函数#xff0c; 注册一个cpufreq_driver结构体。cpufreq_driver结构…如何开发一个新的CPUFreq driver初始化首先在一个 __initcall level 7后者以后的函数中检查内核是否运行在正确的CPU和正确的芯片组上面。如果正确则通过cpufreq_register_driver() 函数 注册一个cpufreq_driver结构体。cpufreq_driver结构体中必须包含cpufreq_driver.name: 驱动名称cpufreq_driver.owner: THIS_MODULEcpufreq_driver.init: 指向per-CPU初始化函数的指针cpufreq_driver.verify: 指向”verification“函数的指针cpufreq_driver.setpolicy / cpufreq_driver.target: 详见后面差异性介绍还可以选择性包含cpufreq_driver.exit: 指向per-CPU清理函数的指针cpufreq_driver.resume 指向per-CPU resume函数的指针。此函数在中断失能的情况下被调用。并且在 pre-suspend 主频率或policy被恢复成-target 或者-setpolicy前调用。cpufreq_driver.attr: 指向一个以NULL结尾的列表指针该列表中的成员类型为 freq_attr结构体。通过此参数允许用户导出属性到sysfs中。Per-CPU初始化当一个新的CPU无论何时被注册到设备模型中时或者在cpufreq驱动注册自己后 per-CPU初始化函数 cpufreq_driver.init被调用。该函数接受一个cpufreq_policy结构体作为参数。如果必要针对用户CPU类型使能 CPUfreq支持。policy-cpuinfo.min_freq / policy-cpuinfo.max_freq: CPU所支持的最小/最大频率。(单位 千赫兹)policy-cpuinfo.transition_latency CPU在不同频率之间切换时所需要的时间。(单位纳秒)policy-cur: CPU的当前工作频率policy-min / policy-maxpolicy-policy / policy-governor: 必须包含针对该CPU的”缺省policy“。随后cpufreq_driver.verify/cpufreq_driver.setpolicy或cpufreq_driver.target函数被调用时将使用这些定义值。Verify / 验证当用户决定使用一个新的policy(包含了policy, governor, min,max等值)时 该policy必须被验证。如此不合适的值将被更正。为了验证这些定义值 一个频率表辅助函数被使用。必须确保至少有一个有效的工作频率(该频率位于policy-min 和 policy-max 之间)。如果必要首先增大policy-max 如果没有其他办法才能选择降低 policy-min。target 或 setpolicy绝大多数cpufreq驱动甚至大多数cpu倍频算法仅仅允许处理器被设置在一个频率上。此种情况下需要使用 -target 调用。某些具有处理器调频能力的处理器能够在一定的频率范围内切换频率。此种情况下需要使用-setpolicy 调用。targettarget调用有三个参数struct cpufreq_policy *policyunsigned int target_frequencyunsigned int relationCPUFreq驱动必须在被调用的时候设置新的处理器频率。 实际频率必须根据如下规则来确定1) 尽量靠近 ”target_freq“频率2)必须满足条件 policy-min new_freq policy-max3) 如果 relation CPUFREQ_REL_L, 尝试选择高于或等于 target_freq的新频率4) 如果 relation CPUFREQ_REL_H, 尝试选择低于或等于target_freq的新频率setpolicysetpolicy函数仅仅只有一个参数。struct cpufreq_policy*policy需要设置处理器低频限到 policy-min 需要设置处理器高频限到 policy-maxFrequency Table Helpers大多数的处理器都仅支持设置成几个特定的频率。因此一张频率表被用来辅助驱动开发。通过调用函数cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,span stylefont-size:14px; struct cpufreq_frequency_table *table);cpuinfo-min_freq 被设置为 policy-min, cpuinfo-max_freq 被设置成 policy-max。下述函数用来验证处理器频率设定。int cpufreq_frequency_table_verify(struct cpufreq_policy *policy,struct cpufreq_frequency_table *table);针对 -target 情况 对应的函数为int cpufreq_frequency_table_target(struct cpufreq_policy *policy,struct cpufreq_frequency_table *table,unsigned int target_freq,unsigned int relation,unsigned int *index);