linux内核 频率,Linux内核中CPU主频和电压调整 (三)

news/2024/12/5 12:53:16/

如何开发一个新的CPUFreq driver

初始化

首先,在一个 __initcall level 7后者以后的函数中检查内核是否运行在正确的CPU和正确的芯片组上面。

如果正确,则通过cpufreq_register_driver() 函数, 注册一个cpufreq_driver结构体。

cpufreq_driver结构体中必须包含:

cpufreq_driver.name:      驱动名称

cpufreq_driver.owner:     THIS_MODULE

cpufreq_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->max

policy->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 调用。

target

target调用有三个参数:

struct cpufreq_policy *policy

unsigned int target_frequency

unsigned int relation

CPUFreq驱动必须在被调用的时候设置新的处理器频率。 实际频率必须根据如下规则来确定:

1) 尽量靠近 ”target_freq“频率

2)必须满足条件   policy->min   <=  new_freq  <=  policy->max

3)  如果  relation == CPUFREQ_REL_L,  尝试选择高于或等于 target_freq的新频率

4) 如果  relation== CPUFREQ_REL_H,  尝试选择低于或等于target_freq的新频率

setpolicy

setpolicy函数仅仅只有一个参数。

struct cpufreq_policy*policy

需要设置处理器低频限到 policy->min, 需要设置处理器高频限到 policy->max

Frequency Table Helpers

大多数的处理器都仅支持设置成几个特定的频率。因此,一张频率表被用来辅助驱动开发。

通过调用函数

cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,

span style="font-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);


http://www.ppmy.cn/news/517110.html

相关文章

linux 失能鼠标,Linux内核中CPU主频和电压调整 (一)

通过动态改变CPU电压&#xff0c;可以调整CPU主频。 通过改变时钟倍数可以动态改变CPU时钟频率。 一些具有CPU主频率时钟倍数可调能力的处理器&#xff0c;能够在不同的主频率和工作电压之间动态切换&#xff1b;而不需要内核或者用户介入。 术语定义 策略 (Policy) &#xff1…

多核cpu应用场景_1分钟搞懂 CPU该买多核还是高主频?

小伙伴周末的留言里有几个人一直问买什么CPU合适。如果仅仅是单纯看钱,那小编的回答肯定是在你经济承受范围内最贵的那个最合适。不过呢,因为大家的需求各不相同,CPU可真不是靠钱衡量就可以的,今天小编就针对大家选择CPU时的误区说说。 多核心还是主频? 先说说多核心和主频…

spring框架-概述(spring特性、生命周期)(一)

文章目录 什么是springspring重要特性spring生命周期知识扩展 什么是spring Spring框架是一个开放源代码的J2EE应用程序框架&#xff0c;由Rod Johnson发起&#xff0c;是针对bean的生命周期进行管理的轻量级容器 ,是为了解决企业级编程开发中的复杂性&#xff0c;实现敏捷开发…

冷暖色调

冷色系 蓝色&#xff0c;绿色&#xff0c;紫色都属于冷色系&#xff0c;冬天色系和夏天色系的人是用冷色系的颜色。 冷色&#xff1a; 色环中蓝、绿一边的颜色&#xff0c;也就是颜色里有带蓝色的都是冷色。如蓝、紫、红、绿等。 冷色系&#xff1a; 由以冷色为主的色调组成冷…

色系

色系 作者&#xff1a;陈涛 写作时间&#xff1a;2019.4.25 说到颜色&#xff0c;大家肯定不会陌生&#xff0c;而色系就是指颜色所属的系别&#xff0c;色彩可以分为两种类别&#xff1a;一种是有色系&#xff0c;一种是无色系&#xff0c;有色系就是红色、黄色、蓝色等7种色…

漂亮的CSS背景颜色

1. 红色 #D24D57 2. 橙色 #EB7347 3. 橙红色 #FC9D99 4. 绿色 #26A65B 5. 草绿色 #AEDD81 6. 暗绿色 #84AF9B 7. 蓝色 #00CCFF 8. 灰色 #D0D0D0 9. 黑色 #2C3E50

冷色调的亮度越高--越偏暖,暖色调的亮度越高--越偏冷

from:https://www.wenjiwu.com/doc/efoiii.html 篇一 : 什么叫暖色系冷色系蓝色是其中最深的颜色&#xff0c;也是唯一的冷色原色。它支配了红色及黄色&#xff0c;将它们各自转变为本身的冷身系。 红色的深浅度居中&#xff0c;属于暖色的原色。 黄色是最浅的原色&#xff0c…

css和图片主题色

这个想法是来源于「性能优化」中的骨架屏&#xff1a; 在图片居多的站点中&#xff0c;这将是非常nice的体验 —— 图片加载通常是比较让人难受的&#xff0c;好的骨架中一般占位图就是低像素的图片&#xff0c;即大体配色和变化是和实际内容一致的。 有时候比如图片不固定的&a…