ELF 1開發(fā)板選用的是主頻800MHz NXP的i.MX6ULL處理器。根據(jù)實(shí)際的應(yīng)用場景,如果需要降低CPU功耗,可以將CPU頻率固定為節(jié)能模式,下面以這款開發(fā)板為例給小伙伴們介紹一下固定CPU頻率的方法。

先來介紹一下與CPU頻率相關(guān)的命令:
1.列出/sys/devices/system/cpu/cpu0/cpufreq/目錄下的文件:

此目錄中記錄了CPU頻率等信息,這些文件的含義如下:
cpuinfo_cur_freq:
當(dāng)前CPU工作頻率,從CPU寄存器讀取到的工作頻率
cpuinfo_max_freq:
處理器所能運(yùn)行的最高工作頻率(單位:KHz)
cpuinfo_min_freq:
處理器所能運(yùn)行的最低工作頻率(單位:KHz)
cpuinfo_transition_latency:
處理器切換頻率所需要的時(shí)間(單位:ns)
scaling_available_frequencies:
處理器支持的主頻率列表(單位:KHz)
scaling_driver:
該文件保存當(dāng)前CPU所使用的調(diào)頻驅(qū)動
scaling_governor:governor(調(diào)頻)策略,Linux內(nèi)核一共有5種調(diào)頻策略:
?
①conservative:在CPU負(fù)載較低時(shí),調(diào)節(jié)CPU的工作頻率為較低的頻率,以保證能源和散熱的平衡。而當(dāng)CPU負(fù)載較高時(shí),調(diào)節(jié)CPU的工作頻率為較高的頻率,以提高計(jì)算機(jī)的性能
?
②ondemand:定時(shí)檢查負(fù)載,然后根據(jù)負(fù)載來調(diào)節(jié)頻率。負(fù)載低的時(shí)候降低CPU頻率,這樣省電,負(fù)載高的時(shí)候提高CPU頻率,增加性能
?
③userspace:可以在用戶空間手動調(diào)節(jié)頻率
?
④powersave:省電模式,通常以最低頻率運(yùn)行,系統(tǒng)性能會受影響,一般不會用這個(gè)
?
⑤performance:最高性能,直接用最高頻率,不考慮耗電
scaling_max_freq:
governor(調(diào)頻)可以調(diào)節(jié)的最高頻率
scaling_min_freq:
governor(調(diào)頻)可以調(diào)節(jié)的最低頻率
stats:
該目錄給出了CPU各種運(yùn)行頻率的統(tǒng)計(jì)情況,比如CPU在各頻率下的運(yùn)行時(shí)間以及變頻次數(shù)
2.使用如下命令查看當(dāng)前CPU頻率:
root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
792000
當(dāng)前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 //當(dāng)前頻率
792000
root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq //可調(diào)最低頻率
198000
root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor //調(diào)頻策略
performance
root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies //支持的主頻率
198000 396000 528000 792000
當(dāng)用戶有修改CPU頻率需求時(shí),ELF 1支持通過指令的方式調(diào)節(jié)CPU頻率。
(1)設(shè)置為用戶模式,修改頻率為198000:
root@ELF1:~# echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorroot@ELF1:~# echo 198000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
(2)查看當(dāng)前頻率:
root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq198000 //當(dāng)前頻率
上述修改方法僅在終端中臨時(shí)生效,如果想要斷電不丟失,可以將修改頻率的命令寫進(jìn)開機(jī)自啟腳本中:
(1)開機(jī)自啟腳本路徑/etc/rc.local:
root@ELF1:~# vi /etc/rc.local
(2)添加如下命令到開機(jī)自啟腳本:
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorecho 198000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
效果如下:

(3)保存退出并重啟開發(fā)板。
(4)查看當(dāng)前頻率:
root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq198000 //當(dāng)前頻率
可以看到CPU頻率已經(jīng)固定為198MHz了。
elf:~/work/ELF/linux-4.1.15-elf1$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabielf:~/work/ELF/linux-4.1.15-elf1$ make imx6ull_elf1_defconfig //生成.configelf:~/work/ELF/linux-4.1.15-elf1$ make menuconfig
打開Linux內(nèi)核的圖形化配置界面,進(jìn)入如下路徑:
CPU Power ManagementCPU Frequency scalingDefault CPUFreq governor

此時(shí)最新的配置會更新到.config,編譯內(nèi)核之前需要把.config文件中的配置復(fù)制到imx6ull_elf1_defconfig中,作為新的配置文件。
elf@ubuntu:~/work/ELF/linux-4.1.15-elf1$ cp .config arch/arm/configs/imx6ull_elf1_defconfigelf@ubuntu:~/work/ELF/linux-4.1.15-elf1$ make imx6ull_elf1_defconfigelf@ubuntu:~/work/ELF/linux-4.1.15-elf1$ make zImage
編譯完成以后把新的zImage拷貝到開發(fā)板替換掉舊的zImage,保存并重啟。
root@ELF1:~# cp /run/media/sda1/zImage /run/media/mmcblk1p1root@ELF1:~# syncroot@ELF1:~# reboot
啟動完成以后,查看當(dāng)前頻率:
root@ELF1:~#?cat?/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq198000
當(dāng)前CPU頻率為198MHz了。查看scaling_governor文件看一下當(dāng)前的調(diào)頻策略:
root@ELF1:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorpowersave
當(dāng)前的CPU調(diào)頻策略為powersave,也就是省電模式,該模式下系統(tǒng)運(yùn)行在最低頻率,功耗相應(yīng)降低,但系統(tǒng)性能會受影響。
到這里就完成了對CPU的固定頻率,希望本文提供的方法能夠?qū)ζ聊磺暗男』锇橛兴鶐椭?/span>
