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

如何开发一个新的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.mzph.cn/news/429718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系...

CentOS版本历史 版本 CentOS版本号有两个部分&#xff0c;一个主要版本和一个次要版本&#xff0c;主要和次要版本号分别对应于RHEL的主要版本与更新包&#xff0c;CentOS采取从RHEL的源代码包来构建。例如CentOS 4.4构建在RHEL 4.0的更新第4版。 自2006年中&#xff0c;CentOS…

eclipse linux windows 乱码,Ubuntu下Eclipse打开Windows下的工程文件乱码解决办法

Eclipse在Windows下默认使用的是GBK(包括GB2312)编码&#xff0c;而在Linux系统默认使用的是UTF-8编码&#xff0c;并且eclipse编码设置下拉列表不提供GBK编码可选项。如果eclipse打开工程或者文本乱码&#xff0c;基本可以肯定(因为常用的就这两种)这个工程/文本使用的是GBK编…

logrotate

logrotate程序是一个日志文件管理工具。用于分割日志文件&#xff0c;删除旧的日志文件&#xff0c;并创建新的日志文件&#xff0c;起到“转储”作用。可以节省磁盘空间。 logrotate命令格式&#xff1a;logrotate [OPTION...] <configfile>-d, --debug &#xff1a;deb…

linux桌面旋转了180度,[多图]回顾每一款默认Ubuntu壁纸

每个默认的Ubuntu壁纸Ubuntu 4.10’Warty Warthog’当人们抱怨Ubuntu发行版中的“ 褐色 ”时&#xff0c;我经常想回到Ubuntu的第一张墙纸&#xff0c;以便他们的意见可以转变为“上下文”。事后看来&#xff0c;这只墙纸完全是一块毫无生气的带有徽标的棕色块。当然&#xff0…

【转】Apache 配置虚拟主机三种方式

Apache 配置虚拟主机三种方式 原文博客http://www.cnblogs.com/hi-bazinga/archive/2012/04/23/2466605.html一、基于IP 1. 假设服务器有个IP地址为192.168.1.10&#xff0c;使用ifconfig在同一个网络接口eth0上绑定3个IP&#xff1a; [rootlocalhost root]# ifconfig eth0:1 1…

linux weblogic 防火墙,本地访问weblogic控制台无反应,关闭linux操作系统防火墙

有时候&#xff0c;我们在Linux操作系统上成功启动了weblogic&#xff0c;也查看了7001端口的状态是开启的。但是访问weblogic控制台没有反应&#xff0c;也没有报错。使用 netstat -ano | grep 7001 查看端口的状态可是访问weblogic控制台&#xff0c;还是没有反应。我们在本地…

参考资料

GitLab Docker images https://docs.gitlab.com/omnibus/docker/转载于:https://www.cnblogs.com/windchen/p/6255332.html

linux系统运维费用,一般Linux运维学习的费用是多少?Linux学习

随着IT互联网技术的发展&#xff0c;Linux逐渐成为中高端服务器的主要操作系统&#xff0c;并且目前地位不可替代。Linux运维工程师是一位“复合型人才”&#xff0c;他集成了网络、系统、数据库、开发和安全等工作&#xff0c;主要工作是让平台稳定运行。许多人也感受着Linux的…

Maven pom.xml 元素配置说明(一)

部分来源&#xff1a; Maven中 dependencies 节点和 dependencyManagement 节点的区别dependencies与dependencyManagement的区别maven profile的使用properties 假如一种场景&#xff1a;比如说spring的jar包版本&#xff0c;由于jar包较多&#xff0c;如果要修改&#xff0c;…

fedora linux搜狗输入法,在Fedora 28系统下安装搜狗输入法

以下介绍在Fedora 28系统下安装搜狗输入法&#xff0c;也适用在Fedora 27下的安装&#xff0c;亲测可以。先声明一下&#xff0c;在Fedora 27及以后版本中出现的输入框候选词界面变形但不影响使用。第一步&#xff1a;安装fzug软件源具体方法如下&#xff1a;1.添加 FZUG 源Fed…

ArcEngine中使用上下左右键移动地图

转自愿文ArcEngine中使用上下左右键移动地图 因项目需要&#xff0c;需对mapcontrol控件响应上下左右键&#xff0c;从网上找的方法都一样&#xff0c;都值提到了需要设置axMapControl1的KeyIntercept属性为1&#xff0c;但这样做的结果是&#xff0c;除了自己在onkeydown中设…

linux reboot命 过程,IDRAC安装dell服务器操作系统(linux or windows),用到生命周期管理器...

1、首先给服务器装上idrac模块&#xff0c;然后给idrac配置一个远程IP&#xff0c;用作管理2、在web界面输入IP&#xff0c;弹出以下界面&#xff0c;输入账号密码登录3、认证成功后&#xff0c;点击虚拟控制台启动4、进入如下界面&#xff0c;点击菜单栏的《虚拟介质》&#x…

DroidPlugin插件化开发

360手机助手使用的 DroidPlugin&#xff0c;它是360手机助手团队在Android系统上实现了一种插件机制。它可以在无需安装、修改的情况下运行APK文件,此机制对改进大型APP的架构&#xff0c;实现多团队协作开发具有一定的好处。 它是一种新的插件机制&#xff0c;一种免安装的运行…

io wait linux,另辟蹊径-诊断工具之 IO wait

导读最近在做日志的实时同步&#xff0c;上线之前是做过单份线上日志压力测试的&#xff0c;消息队列和客户端、本机都没问题&#xff0c;但是没想到上了第二份日志之后&#xff0c;问题来了&#xff1a;1、问题&#xff1a;集群中的某台机器 top 看到负载巨高&#xff0c;集群…

Oracle第二天

Oracle第二天 整体安排&#xff08;3天&#xff09; 第一天&#xff1a;Oracle的安装配置&#xff08;服务端和客户端&#xff09;&#xff0c;SQL增强&#xff08;单表查询&#xff09;。 第二天&#xff1a;SQL增强&#xff08;多表查询、子查询、伪列-分页&#xff09;&…

linux搭建虚拟化平台报告,部署KVM虚拟化平台------搭建(示例代码)

一 、部署KVM虚拟化平台hyper-v是windows中的虚拟化1、KVM模块直接整合在Linux内核中&#xff0c;kvm是内核模块&#xff0c;虚拟机与kvm模块之间为管理工具2、KVM组成1.KVM Driver---虚拟机创建---虚拟机内存分配---虚拟CPU寄存器读写---虚拟CPU运行2.QEMU (经过简化与修改)--…

linux 选择文件指定的行数据类型,06练习题

1.如何删除一个非空子目录/tmp&#xff1f; BA. del /tmp/*B. rm -rf /tmpC. rm -Ra /tmp/*D. rm -rf /tmp/*2.存放linux默认系统日志文件是 BA./var/log/dmesg #系统启动时日志B./var/log/messages #系统日志C./var/log/secure #登录相关 安全3.用命令ls -l显示出来文件txt的描…

C#多线程编程

C#多线程编程 一、使用线程的理由 1、可以使用线程将代码同其他代码隔离&#xff0c;提高应用程序的可靠性。 2、可以使用线程来简化编码。 3、可以使用线程来实现并发执行。 二、基本知识 1、进程与线程&#xff1a;进程作为操作系统执行程序的基本单位&#xff0c;拥有应用程…

linux apache24 使用,科学网—linux_centos第24_2次课Apache的安装 - 郭会强的博文

第24次课Apache的安装下载apache的网址[rootghq~]# cd /usr/local/src[rootghqsrc]# lsmysql-5.1.40-linux-i686-icc-glibc23.tar.gz从网上下载&#xff0c;使用命令wget[rootghq src]# wgethttp://apache.fayea.com//httpd/httpd-2.2.31.tar.bz2--2015-08-2007:24:43-- http:/…

《DSP using MATLAB 》示例Example6.3

代码&#xff1a; C0 0; B1 [2 4; 3 1]; A1 [1 1 0.9; 1 0.4 -0.4]; B2 [0.5 0.7; 1.5 2.5; 0.8 1]; A2 [1 -1 0.8; 1 0.5 0.5; 1 0 -0.5]; [b1, a1] par2dir(C0, B1, A1)[b2, a2] par2dir(C0, B2, A2)b conv(b1, b2) % Overall direct form numerator a conv(a1…