1、CPU定频终端手动实现
#cd /sys/devices/system/cpu/cpu0/cpufreq
查看CPU支持的调频策略:
#cat scaling_available_governors
#conservative interactive ondemand userspace powersave performance
解释以上6种策略简述:
1、performance
顾名思义只注重效率,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。
2、interactive
交互模式,直接上最高频率,然后看CPU负荷慢慢降低,比较耗电。
Interactive 是以 CPU 排程数量而调整频率,从而实现省电。
3、powersave
将CPU频率设置为最低的所谓“省电”模式,CPU会固定工作在其支持的最低运行频率上。
4、Userspace
最早的cpufreq 子系统通过userspace governor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置
5、ondemand
按需快速动态调整CPU频率, 一有cpu计算量的任务,就会立即达到最大频率运行,等执行完毕就立即回到最低频率;
6、conservative
与ondemand不同,平滑地调整CPU频率,频率的升降是渐变式的,会自动在频率上下限调整,和ondemand的区别 在于它会按需分配频率,而不是一味追求最高频率;
查看CPU支持的CPU调整频率有哪些:
#cat scaling_available_frequencies
#126000 216000 312000 408000 600000 696000 816000 1008000 1200000 .....
通过userspace策略实现用户自定义设置频率:
#echo “userspace” > scaling_governor //先设置为userspace策略
#echo “1008000” > scaling_setspeed //设置为接近1GHZ频率
验证当前频率:
#cat scaling_cur_freq
#1008000 //且不会改变,实现了定频
2、CPU定频内核驱动实现
相关文件:
android5.1_sdk/kernel/arch/arm/boot/dts/firefly-rk3288.dts
android5.1_sdk/kernel/arch/arm/mach-rockchip/dvfs.c
dvfs.c:struct cpufreq_frequency_table 有三个数组变量rk3288v[012]_arm_pvtm_table会列出CPU动态的频率,只需要屏蔽其他频率只剩下固定的频率即可,此处定频为1GHZ示范如下:
...
static struct cpufreq_frequency_table rk3288v0_arm_pvtm_table[] = {
/..other freq../
{.frequency = 1008000, .index = 14741},
{.frequency = CPUFREQ_TABLE_END, .index = 1},
};
...
firefly-rk3288.dts:也是屏蔽只剩下固定的频率即可。
...
&clk_core_dvfs_table {
support-pvtm = <0>;
pvtm-operating-points = <
/KHz uV pvtm margin/
/----other freq-----/
1008000 1050000 25000
;
status = "okay";
};
....
重新编译内核:make bootimage -j8 && ./mkimage.sh
原作者:布施