Introduction
CPU频率调节设备驱动程序的功能。该驱动程序允许在运行过程中更改CPU的时钟频率。一旦CPU频率被更改,必要的电源供应电压也会根据设备树脚本(DTS)中定义的电压值进行变化。通过降低时钟速度,这种方法可以减少功耗(从而节省电池电量),因为CPU在时钟速度降低时使用的功率较少。
Software Operation
这段内容描述了CPUFREQ设备驱动程序的功能和工作原理。
CPUFREQ设备驱动程序被设计用于实时改变CPU的频率和电压。如果DTS(设备树结构)中没有定义频率,在这种情况下,CPUFREQ驱动程序会将CPU频率更改为最接近的更高频率。频率的变化是通过使用时钟框架API来实现的,而电压则是通过调节器API进行设置的。
CPU频率数组中的频率基于引导CPU的频率。此外,该驱动程序使用交互式CPU频率调度器(governor),该调度器不允许手动更改。如果需要手动更改CPU频率,可以使用用户空间CPU频率调度器。
在Linux中,内核的开发者定义了一套框架模型来完成CPU频率动态调整这一目的,它就是CPU Freq系统。如下为CPU的几种模式(governor参数):
ondemand:系统默认的超频模式,按需调节,内核提供的功能,不是很强大,但有效实现了动态频率调节,平时以低速方式运行,当系统负载提高时候自动提高频率。以这种模式运行不会因为降频造成性能降低,同时也能节约电能和降低温度。一般官方内核默认的方式都是ondemand。
interactive:交互模式,直接上最高频率,然后看CPU负荷慢慢降低,比较耗电。Interactive 是以 CPU 排程数量而调整频率,从而实现省电。InteractiveX 是以 CPU 负载来调整 CPU 频率,不会过度把频率调低。所以比 Interactive 反应好些,但是省电的效果一般。
conservative:保守模式,类似于ondemand,但调整相对较缓,想省电就用他吧。Google官方内核,kang内核默认模式。
smartass:聪明模式,是I和C模式的升级,该模式在比interactive 模式不差的响应的前提下会做到了更加省电。
performance:性能模式!只有最高频率,从来不考虑消耗的电量,性能没得说,但是耗电量。
powersave 省电模式,通常以最低频率运行。
userspace:用户自定义模式,系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置
Hotplug:类似于ondemand, 但是cpu会在关屏下尝试关掉一个cpu,并且带有deep sleep,比较省电。
drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq.c
是 Linux 内核中与 CPU 调频相关的驱动程序文件。CPU 调频是根据负载需求动态调整 CPU 频率的过程,以提供性能和能源效率的平衡。
该文件位于 Linux 内核的 drivers/cpufreq/
目录下,它包含了与 CPU 调频相关的函数、数据结构和算法等。
cpufreq.c
文件中的代码实现了 CPU 调频的主要功能,例如:
- 初始化 CPU 调频框架及相关数据结构。
- 支持不同的调频策略,如 performance、powersave、ondemand 等。
- 根据系统负载情况选择合适的 CPU 频率。
- 处理频率切换请求,并相应地更新 CPU 频率。
- 提供与 CPU 调频相关的接口供其他模块或用户空间程序使用。
请注意,cpufreq.c
文件中的具体实现会因为不同的内核版本而有所差异。因此,如果您想深入了解该文件的内容,最好参考特定内核版本的代码或相关文档。
修改imx8系统的cpu频率
1.查看可用的调频策略
使用以下命令查看当前可用的 CPU 调频策略:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
2.查看当前频率及调频策略
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
3.调频策略为performance
4.查看当前频率
同理设置低频
echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
设置某一特定频率
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 900000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
The following Linux kernel configuration is provided for this module:
• CONFIG_CPU_FREQ; In menuconfig, this option is located under:
– CPU Power Management > CPU Frequency scaling
• The following options can be selected:
– CPU Frequency scaling
– CPU frequency translation statistics
– Default CPU frequency governor (conservative)(interactive)
– Performance governor
– Powersave governor
– Userspace governor for userspace frequency scaling
– Interactive CPU frequency policy governor
– Conservative CPU frequency governor
– Schedutil CPU frequency governor
– CPU frequency driver for i.MX CPUs
一般使用make defconfig生成.config,使用make menuconfig加载.config 然后更新,具体可参考下面的使用
make menuconfig 与.config的关系
make menuconfig
是 Linux 内核源代码中的一个工具,用于以交互式方式配置内核选项。它允许用户在编译和构建内核之前选择和调整各种内核配置。
与之相关的是 .config
文件,它是内核配置的主要配置文件。.config
文件包含了通过 make menuconfig
或其他类似工具进行的所有配置选择,并指定了编译内核时要使用的选项和参数。
当您运行 make menuconfig
命令时,它会加载 .config
文件中的配置选项,并将其显示在交互式菜单中。您可以通过这个菜单选择、启用或禁用特定的内核功能、驱动程序和模块等等。在菜单中进行的配置更改会更新 .config
文件中的相应选项。
当您完成 make menuconfig
的配置并保存退出时,所做的修改将自动写入 .config
文件中。然后,您可以使用该 .config
文件来编译和构建内核,确保生成适合您选择的配置的内核镜像和内核模块。
总结来说,make menuconfig
是一个交互式配置工具,用于编辑 .config
文件中的内核选项。.config
文件存储了内核的配置信息,供编