linux动态频率调节系统cpufreq,Linux的cpufreq(动态变频)技术
3.如何实现?
首先需要干一些杂活,修改kconfig makefile把系统屏蔽的cpufreq打开,对于我们来说主要的核心有两部分:
系统相关:主要有cpu,timer(变了频率一定要更新系统timer,否则系统时间就不准了),sdram等。
主要就是实现下面这个结构体:
static struct cpufreq_driver sep4020_driver =
{
.flags = CPUFREQ_STICKY,
.verify = sep4020_verify_speed,
.target = sep4020_target,
.get = sep4020_getspeed,
.init = sep4020_cpu_init,
.name = "SEP4020 Freq",
};
代码还是很简陋,很多细节都没考虑,所以具体的暂时先不讲了,大家可以先参考pxa和sa1100的实现。
然后就是收频率影响的驱动:
简单的来说就是:系统在变化cpu主频的时候会调用cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);函数,响挂载在这个cpu上所有的驱动发出一个信号,驱动接收到这个信号则调用相应的处理函数。
这里把串口部分的实现简化,如下:
#ifdef CONFIG_CPU_FREQ
static int sep4020_serial_cpufreq_transition(struct notifier_block *nb, unsigned long val, void *data)
{
// printk("in the serial cpufreq_transition\n");
int pmcr_pre;
unsigned long cpu_clk,baud,baudh,baudl;
pmcr_pre = *(volatile unsigned long*)PMU_PMCR_V;
if(pmcr_pre > 0x4000)
cpu_clk = (pmcr_pre-0x4000)*8000000;
else
cpu_clk = (pmcr_pre)*4000000;
baud = cpu_clk/16/115200;
baudh = baud >>8;
baudl = baud&0xff;
*(volatile unsigned char*)UART0_LCR_V |= (0x80);
*(volatile unsigned char*)UART0_DLBL_V = baudl;
*(volatile unsigned char*)UART0_DLBH_V = baudh;
*(volatile unsigned char*)UART0_LCR_V &= ~(0x80);
printk("in the serial cpufreq_transition\n");
return 0;
}
static inline int sep4020_serial_cpufreq_register(void)
{
sep4020_serial_freq_transition.notifier_call = sep4020_serial_cpufreq_transition;
return cpufreq_register_notifier(&sep4020_serial_freq_transition,
CPUFREQ_TRANSITION_NOTIFIER);
}
static inline void sep4020_serial_cpufreq_deregister(void)
{
cpufreq_unregister_notifier(&sep4020_serial_freq_transition,
CPUFREQ_TRANSITION_NOTIFIER);
}
#else
#endif
4.效果
在sys下开启ondeman模式,串上电流表:
1. 板级电流从220mA调至160mA(因为此时内核检测系统无负载,降频)
2. 执行一个nandflash的拷贝命令,拷贝一个5M左右的文件到其他文件夹,
3. 在拷贝执行时间在3秒时(我给内核设的扫描周期为2.5秒)系统发现有负载,升频,电流从160mA变为220mA(可见已是系统最高主频)
4. 此后的拷贝的整个过程中电流保持为220mA
5. 在拷贝结束后不久(2-3s内),系统电流又跳变至160mA。
linux动态频率调节系统cpufreq,Linux的cpufreq(动态变频)技术相关推荐
- Linux动态频率调节系统CPUFreq
Linux动态频率调节系统CPUFreq之一:概述 Linux动态频率调节系统CPUFreq之二:核心(core)架构与API Linux动态频率调节系统CPUFreq之三:governor
- 从基本理解到深入探究 Linux动态频率调节系统cpufreq
文章目录 概述 1. 管中窥豹--sysfs接口 2. 刨根问底--软件架构 1. cpufreq_policy 2. cpufreq_governor 3. cpufreq_driver 4. cp ...
- Linux动态频率调节系统CPUFreq之一:概述【转】-- 非常好的博客
转自:http://blog.csdn.net/droidphone/article/details/9346981 目录(?)[-] sysfs接口 软件架构 cpufreq_policy cpuf ...
- cpufreq动态频率调节(Sofia3GR)浅析及应用层APK实现
cpufreq动态频率调节浅析 cpufreq核心部分的代码都在:/drivers/cpufreq/cpufreq.c中,本文章是基于SOFIA3GR 6.0的代码进行解析,linux内核版本3.14 ...
- 【Linux kernel/cpufreq】framework ----cpufreq core
cpufreq framework提供机制(cpufreq driver)与策略(cpufreq governor),此外提供了cpufreq core来对机制和策略进行管理. 主要代码路径: dri ...
- 减少 Linux 电耗,第 1 部分: CPUfreq 子系统
关于本系列 在本系列中,学习如何调优基于 Linux 的 IBM System x 服务器 的电源效率.您将了解内核调控器和它们的设置,以及如何使用它们:您还将了解经过调优的调控器对能源性能和电子商务 ...
- linux 系统频率,Linux下CPU的手动频率设定
众所周知的是,CPU的频率和它的实际性能特别是整数运算能力上有着相当强的关联性.但同时CPU的频率也跟它的功耗成正比,而功耗是有一个TDP的热功耗上限.根据当下多核CPU.多任务的趋势我们很容易就联想 ...
- linux动态库注册函数,Linux动态库函数的详解
linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: rtld_lazy rtld_now rtld_ ...
- Linux下使用Google Authenticator配置SSH登录动态验证码
说明: 1.一般ssh登录服务器,只需要输入账号和密码. 2.本教程的目的:在账号和密码之间再增加一个 验证码,只有输入正确的验证码之后,再输入 密码才能登录.这样就增强了ssh登录的安全性. 3.账 ...
- Linux字符驱动中动态分配设备号与动态生成设备节点
在编写Linux内核驱动程序的时候,如果不动态生成设备号的话,需要自己手动分配设备号,有可能你分配的设备号会与已有设备号相同而产生冲突.因此推荐自动分配设备号.使用下面的函数: int alloc_c ...
最新文章
- 最全干货:从写简历,到面试、谈薪酬的那些技巧和防坑指南
- 人工智能和机器人将成为数据中心最佳“伴侣”
- mysql某个字段改为非unique
- android深度探索 HAL及驱动开发 第八章
- 因误推送“台风致全省人死亡”消息 腾讯视频push线团队全部被开?回应...
- Win32汇编——动态链接库
- 在django项目中使用django-ckeditor
- java世界杯hashmap,集合框架
- q-flashplus怎么使用_技嘉主板使用Q-FLASH刷BIOS详解
- 【Cocos Creator实战教程(6)】——镜头跟随
- 暂时性死区的详解(TDZ)
- html 名人名言源代码,基于JQuery及AJAX实现名人名言随机生成器_咋地 _前端开发者...
- Android脑图--Android动画
- 用pip安装指定版本的包遇到的坑
- APP启动时白屏/黑屏 或者 Activity打开时白屏/黑屏
- Ubuntu Intel显卡驱动安装 (Ubuntu 14.04--Ubuntu 16.10 + Intel® Graphics Update Tool)
- Foxmail中加入Gmail邮箱。对“:ssl连接错误, errorCode:”的修复。
- java编辑遗忘曲线代码_通过excel vba 实现艾宾浩斯遗忘曲线的复习提醒
- 【java初学】面向对象了解
- bitmina mysql root密码_sysbench压测自装MySQL数据库
热门文章
- 【B类】BI商业智能、大数据、Mysql、等系列课程集
- 2023-2028年中国压铸机行业发展前景与投资趋势分析报告
- 极客时间前端进阶特训营winter、杨村长、然叔、高少云,《精通React》大专栏,React低代码项目,前端算法实战,杨村长Vue3开源组件库实战(Vue3+Vite+VitePress+TSX+T
- EXCEL技术VBA一键获取SAP系统数据
- android通知详解
- android开发笔记之reflect使用
- spring基础内容
- matlab 实现disparity,Matlab里的disparity map 计算
- 【总结】1268- 几个前端代码部署的灵魂拷问
- 音视频多媒体开发基础概述之颜色空间(2)YUV YIQ YCrCb CMY颜色空间