ELF 1开发板选用的是主频800MHz NXP的i.MX6ULL处理器。根据实际的应用场景,如果需要降低CPU功耗,其中一种方法可以将CPU频率固定为节能模式,下面以这款开发板为例给小伙伴们介绍一下固定CPU频率的方法。 先来介绍一下与CPU频率相关的命令: 1.列出/sys/devices/system/cpu/cpu0/cpufreq/目录下的文件: 此目录中记录了CPU频率等信息,这些文件的含义如下: cpuinfo_cur_freq:当前CPU工作频率,从CPU寄存器读取到的工作频率。 cpuinfo_max_freq:处理器所能运行的最高工作频率(单位:KHz)。 cpuinfo_min_freq:处理器所能运行的最低工作频率(单位:KHz)。 cpuinfo_transition_latency:处理器切换频率所需要的时间(单位:ns)。 scaling_available_frequencies:处理器支持的主频率列表(单位:KHz)。 scaling_available_governors:当前内核中支持的所有governor(调频)类型。 scaling_cur_freq:保存着cpufreq模块缓存的当前CPU频率,不会对CPU硬件寄存器进行检查。 scaling_driver:该文件保存当前CPU所使用的调频驱动。 scaling_governor:governor(调频)策略,Linux内核一共有5种调频策略: ①conservative:在CPU负载较低时,调节CPU的工作频率为较低的频率,以保证能源和散热的平衡。而当CPU负载较高时,调节CPU的工作频率为较高的频率,以提高计算机的性能。 ②ondemand:定时检查负载,然后根据负载来调节频率。负载低的时候降低CPU频率,这样省电,负载高的时候提高CPU频率,增加性能。 ③userspace:可以在用户空间手动调节频率。 ④powersave:省电模式,通常以最低频率运行,系统性能会受影响,一般不会用这个。 ⑤performance:最高性能,直接用最高频率,不考虑耗电。 scaling_max_freq:governor(调频)可以调节的最高频率。 scaling_min_freq:governor(调频)可以调节的最低频率。 stats:该目录给出了CPU各种运行频率的统计情况,比如CPU在各频率下的运行时间以及变频次数。 2.使用如下命令查看当前CPU频率: root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 792000 当前CPU频率为792MHz,工作频率是最高的,其他的值如下: root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq //最高工作频率 792000 root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq //最低工作频率 198000 root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq //当前频率 792000 root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq //可调最低频率 198000 root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor //调频策略 performance root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies //支持的主频率 198000 396000 528000 792000 可以看出,当前CPU支持198MHz、396MHz、528Mhz和792MHz四种频率切换,其中调频策略为performance,也就是最高性能,直接用最高频率,不考虑耗电。 例如固定CPU频率为198MHz,具体修改方法有两种 1.修改文件系统 当用户有修改CPU频率需求时,ELF 1支持通过指令的方式调节CPU频率。 (1)设置为用户模式,修改频率为198000: root@ELF1:~# echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor root@ELF1:~# echo 198000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed (2)查看当前频率: root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 198000 //当前频率 上述修改方法仅在终端中临时生效,如果想要断电不丢失,可以将修改频率的命令写进开机自启脚本中: (1)开机自启脚本路径/etc/rc.local: root@ELF1:~# vi /etc/rc.local (2)添加如下命令到开机自启脚本: echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor echo 198000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed 效果如下: (3)保存退出并重启开发板。 (4)查看当前频率: root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 198000 //当前频率 可以看到CPU频率已经固定为198MHz了。 2.修改内核: 通过图形化界面配置Linux内核的CPU调频策略: 需要先执行“make imx6ull_elf1_defconfig”命令生成.config,然后再使用图形界面进行配置,因为“make menuconfig”进行图形配置时,是从.config中读取出来的。 elf@ubuntu:~/work/ELF/linux-4.1.15-elf1$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi elf@ubuntu:~/work/ELF/linux-4.1.15-elf1$ make imx6ull_elf1_defconfig //生成.config elf@ubuntu:~/work/ELF/linux-4.1.15-elf1$ make menuconfig 打开Linux内核的图形化配置界面,进入如下路径: CPU Power Management -> CPU Frequency scaling -> Default CPUFreq governor 打开默认调频策略选择界面,选择“powersave”,选择以后保存退出图形化配置界面。 此时最新的配置会更新到.config,编译内核之前需要把.config文件中的配置复制到imx6ull_elf1_defconfig中,作为新的配置文件。 elf@ubuntu:~/work/ELF/linux-4.1.15-elf1$ cp .config arch/arm/configs/imx6ull_elf1_defconfig elf@ubuntu:~/work/ELF/linux-4.1.15-elf1$ make imx6ull_elf1_defconfig elf@ubuntu:~/work/ELF/linux-4.1.15-elf1$ make zImage 编译完成以后把新的zImage拷贝到开发板替换掉旧的zImage,保存并重启。 root@ELF1:~# cp /run/media/sda1/zImage /run/media/mmcblk1p1 root@ELF1:~# sync root@ELF1:~# reboot 启动完成以后,查看当前频率: root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 198000 当前CPU频率为198MHz了。查看scaling_governor文件看一下当前的调频策略: root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor powersave 当前的CPU调频策略为powersave,也就是省电模式,该模式下系统运行在最低频率,功耗相应降低,但系统性能会受影响。 好啦,以上就是修改CPU固定频率的方法啦,希望对小伙伴们学习有所帮助哦! |