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(动态变频)技术相关推荐

  1. Linux动态频率调节系统CPUFreq

    Linux动态频率调节系统CPUFreq之一:概述 Linux动态频率调节系统CPUFreq之二:核心(core)架构与API Linux动态频率调节系统CPUFreq之三:governor

  2. 从基本理解到深入探究 Linux动态频率调节系统cpufreq

    文章目录 概述 1. 管中窥豹--sysfs接口 2. 刨根问底--软件架构 1. cpufreq_policy 2. cpufreq_governor 3. cpufreq_driver 4. cp ...

  3. Linux动态频率调节系统CPUFreq之一:概述【转】-- 非常好的博客

    转自:http://blog.csdn.net/droidphone/article/details/9346981 目录(?)[-] sysfs接口 软件架构 cpufreq_policy cpuf ...

  4. cpufreq动态频率调节(Sofia3GR)浅析及应用层APK实现

    cpufreq动态频率调节浅析 cpufreq核心部分的代码都在:/drivers/cpufreq/cpufreq.c中,本文章是基于SOFIA3GR 6.0的代码进行解析,linux内核版本3.14 ...

  5. 【Linux kernel/cpufreq】framework ----cpufreq core

    cpufreq framework提供机制(cpufreq driver)与策略(cpufreq governor),此外提供了cpufreq core来对机制和策略进行管理. 主要代码路径: dri ...

  6. 减少 Linux 电耗,第 1 部分: CPUfreq 子系统

    关于本系列 在本系列中,学习如何调优基于 Linux 的 IBM System x 服务器 的电源效率.您将了解内核调控器和它们的设置,以及如何使用它们:您还将了解经过调优的调控器对能源性能和电子商务 ...

  7. linux 系统频率,Linux下CPU的手动频率设定

    众所周知的是,CPU的频率和它的实际性能特别是整数运算能力上有着相当强的关联性.但同时CPU的频率也跟它的功耗成正比,而功耗是有一个TDP的热功耗上限.根据当下多核CPU.多任务的趋势我们很容易就联想 ...

  8. linux动态库注册函数,Linux动态库函数的详解

    linux动态库函数的详解 加载动态库 void *dlopen(const char *filename, int flag); flag的可能值: rtld_lazy rtld_now rtld_ ...

  9. Linux下使用Google Authenticator配置SSH登录动态验证码

    说明: 1.一般ssh登录服务器,只需要输入账号和密码. 2.本教程的目的:在账号和密码之间再增加一个 验证码,只有输入正确的验证码之后,再输入 密码才能登录.这样就增强了ssh登录的安全性. 3.账 ...

  10. Linux字符驱动中动态分配设备号与动态生成设备节点

    在编写Linux内核驱动程序的时候,如果不动态生成设备号的话,需要自己手动分配设备号,有可能你分配的设备号会与已有设备号相同而产生冲突.因此推荐自动分配设备号.使用下面的函数: int alloc_c ...

最新文章

  1. 最全干货:从写简历,到面试、谈薪酬的那些技巧和防坑指南
  2. 人工智能和机器人将成为数据中心最佳“伴侣”
  3. mysql某个字段改为非unique
  4. android深度探索 HAL及驱动开发 第八章
  5. 因误推送“台风致全省人死亡”消息 腾讯视频push线团队全部被开?回应...
  6. Win32汇编——动态链接库
  7. 在django项目中使用django-ckeditor
  8. java世界杯hashmap,集合框架
  9. q-flashplus怎么使用_技嘉主板使用Q-FLASH刷BIOS详解
  10. 【Cocos Creator实战教程(6)】——镜头跟随
  11. 暂时性死区的详解(TDZ)
  12. html 名人名言源代码,基于JQuery及AJAX实现名人名言随机生成器_咋地 _前端开发者...
  13. Android脑图--Android动画
  14. 用pip安装指定版本的包遇到的坑
  15. APP启动时白屏/黑屏 或者 Activity打开时白屏/黑屏
  16. Ubuntu Intel显卡驱动安装 (Ubuntu 14.04--Ubuntu 16.10 + Intel® Graphics Update Tool)
  17. Foxmail中加入Gmail邮箱。对“:ssl连接错误, errorCode:”的修复。
  18. java编辑遗忘曲线代码_通过excel vba 实现艾宾浩斯遗忘曲线的复习提醒
  19. 【java初学】面向对象了解
  20. bitmina mysql root密码_sysbench压测自装MySQL数据库

热门文章

  1. 【B类】BI商业智能、大数据、Mysql、等系列课程集
  2. 2023-2028年中国压铸机行业发展前景与投资趋势分析报告
  3. 极客时间前端进阶特训营winter、杨村长、然叔、高少云,《精通React》大专栏,React低代码项目,前端算法实战,杨村长Vue3开源组件库实战(Vue3+Vite+VitePress+TSX+T
  4. EXCEL技术VBA一键获取SAP系统数据
  5. android通知详解
  6. android开发笔记之reflect使用
  7. spring基础内容
  8. matlab 实现disparity,Matlab里的disparity map 计算
  9. 【总结】1268- 几个前端代码部署的灵魂拷问
  10. 音视频多媒体开发基础概述之颜色空间(2)YUV YIQ YCrCb CMY颜色空间