在Linux中用软件降低CPU的频率

前段时间预研用的实验板的配置为,CPU500MPXA270,内存64M。为了考查软件在不同硬件配置是的性能问题,我们需要降低CPU的频率和内存的大小。

 

调整内存的大小很容易,在linux的起始参数中加上mem=32M之类的参数就行了。例如下面的参数:root=/dev/mtdblock2 rootfstype=jffs2 console=ttyS0,115200 mem=32M

 

看了一下PXA270DataSheet,在电源管理的一章里有描述,可以通过修改CCCRCLKCFG两个寄存器的值达到调整CPU的频率的目的。

 

但是在哪里去修改呢?在bootloader还是在linux kernel里?这方面的资料还比较少,猜想kernel的电源管理中是否已经有了这方面的支持呢?阅读了一些代码,发现有两个地方可以修改CPU的频率。

 

一个是arch/arm/mach-pxa/ipmc.c里为用户提供了一个接口,用ioctl控制/dev/ipmc文件,用命令IPMC_IOCTL_GET_DPM_CONFIG可以获取CPU的频率,用命令IPMC_IOCTL_SET_DPM_CONFIG 可以设置CPU的频率。试了一下,获取没有问题,但设置之后kernel就死菜了。

 

另外一个是drivers/cpufreq/cpufreq.c里也为用户提供了一个接口,通过读写/proc/cpufreq才可以获取和设置CPU的频率。试了一下,获取没有问题,但设置之后没有任何效果。

 

只好从bootloader着手,bootloader采用的是blob。花了一些时间研究,最终发现可以修改文件blob-xscale/src/blob/xlli/xlli_LowLev_Init.s中的函数xlli_setClocks,来设置CPU的频率,具体设置可以按datasheet中的说明。

 

终于成功了,不过还是有些疑惑。难道不能在运行时,动态修改CPU的频率吗?在空闲时降低CPU的频率可以省不少电呢,这对于移动设备很重要啊,为什么都工作不正常呢?

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值