爱板网论坛

查看: 118|回复: 1

[原创] TI AM335x CPUfreq子系统(Linux3.14)定制手册!

[复制链接]

5

主题

1

好友

230

积分

秀才

Rank: 3Rank: 3

该用户从未签到

发表于 2017-12-27 10:49:48 |显示全部楼层
   嵌入式产品的速度越来越快,功耗逐渐成为人们较为关注的话题,比如AM335X这个CPU,速度最高可以达到1GHZ,那如何能够让系统做到更优化,更加节约能源呢?LINUX作者提出了CPUfreq这个子系统。利用CPUfreq子系统的电源管理策略,从而使得CPU工作在不同的频率,CPU在不同频率下其功耗不同。本手册简要讲述,是基于深圳盈鹏飞嵌入式EVB-T335(AM335x系列CPU)的电源管理的Linux内核定制及CPUFreq子系统的功能测试。采用的是盈鹏飞嵌入式的CoM-T335核心模块设计产品的用户,针对不同的应用类型,在定制Linux内核根据自身的特点选取不同的CPUFreq调控器。以三个应用为例,介绍如何选择合适的CPUFreq调控器。

例一:手持设备(电池供电设备)在户外使用时,应考虑电源续航能力,选取电能节省调控器。
例二:对处理器性能要求较高的应用(如,数据采集、视频解码),应当首先考虑性能,选取性能调控器。
例三:同时考虑性能和电能的应用(如,手机),当待机时CPU以一个低频率运行,当有程序运行时自动升频,此时应当选取随需应变调控器。

       另外,盈鹏飞嵌入式发布的EVB-T335(基于AM335x系列的开发板)的LINUX3.14系统中,经常会出现如下错误,导致系统工作频率偏低:


终端信息如下:
[ 62.246381] remoteproc0: failedto load am335x-pm-firmware.elf
[ 62.252680] remoteproc0: powering up wkup_m3
[ 62.272740] wkup_m3 44d00000.wkup_m3: rproc_boot failed

     我们本次也是为了解决该问题,经过一段时间的调试和验证,把问题得以解决并总结出如下文档。文挡错误之处再所难免,希各位大牛提出宝贵的建议!

更多关于CPUFreq调控器的内容,请阅读下文。

Linux指令提示符,作如下说明:
[root@EVB335X/]      以此提示符开头的指令,在EVB-T335开发板中执行(目标板上测试所用)
$                                 以此提示符开头的指令,在宿主机中执行(交叉编译所用)

先来简介下 Linux CPUfreq子系统简介

  随着技术的发展,我们对CPU的处理能力提出了越来越高的需求,芯片厂家也对制造工艺不断地提升。现在的主流PC处理器的主频已经在3GHz左右,就算是智能手机的处理器也已经可以工作在1.5GHz以上,可是我们并不是时时刻刻都需要让CPU工作在最高的主频上,尤其是移动设备和笔记本电脑,大部分时间里,CPU其实工作在轻负载状态下,我们知道:主频越高,功耗也越高。为了节省CPU的功耗和减少发热,我们有必要根据当前CPU的负载状态,动态地提供刚好足够的主频给CPU。在Linux中,内核的开发者定义了一套框架模型来完成这一目的,它就是CPUFreq系统。

  从 2.6.0 Linux 内核开始,您可以通过 CPUfreq 子系统动态调整处理器频率。当处理器以较低的时钟速度运行时,它们消耗的电能和产生的热量也相对较少。时钟速度的这种缩放可以控制系统在未全力运行时消耗较少电能。

      CPUfreq 结构利用调控器和守护程序来为系统设置静态或动态电源策略。动态调控器(详见下文)可以根据 CPU 利用率来调整 CPU 频率,从而有助于节省电能,而不会牺牲性能。这些调控器还允许一些用户调优,因此您可以自定义并轻松地更改变频系数。

       在使用 CPUfreq 子系统之前,先检查 CPUfreq 是否已经启用的一种快捷方法是查看 /sys 文件系统。如果在 /sys/devices/system/cpu/cpu0/cpufreq/中看到了 cpufreq 目录,则表示您的系统当前已经启用了 CPUfreq。EVB-T335已经支持CPUfreq子系统。

1.1 CPUfreq调控器简介

    CPUfreq 子系统可以使用 5 种内核调控器(governor),分别是Performance、Powersave、Userspace、Ondemand、Conservative。这些调控器根据特定标准设置处理器频率;其中一些根据系统或用户对输入的更改而动态更改频率。

1.1.1性能调控器:最高的频率(Performance)

       性能调控器会静态将处理器设置为可用的最高频率。您可以调整此调控器可用的频率范围。顾名思义,此调控器的目标的通过将处理器时钟速度设置为最大级别而实现最大的系统性能。此调控器默认不会尝试提供任何电能节省,但您可以通过调优调控器来更改它所选的频率。

1.1.2电能节省调控器:最低的频率(Powersave)

       另一方面,电能节省调控器会静态将处理器设置为可用的最低频率。您仍然可以调整此调控器可用的频率范围。此调控器的作用是始终以最低的速度运行。显然,这有时会影响性能,因为无论处理器多么繁忙,系统都不会提高频率。

1.1.3用户空间调控器:手动频率(Userspace

       接下来介绍用户空间调控器,它允许您手动选择和设置频率。此调控器还可以与在用户空间中运行的处理器频率守护程序结合使用来控制频率。此调控器可用于设置唯一的电源策略(不可预设,也不可从其他调控器获取);您还可以使用它来试验策略。
注意:用户空间调控器本身并不会动态更改频率;而是允许您或用户空间程序动态选择处理器频率。
1.1.4随需应变调控器:基于处理器的频率变更(Ondemand

       随需应变调控器将检查处理器利用率,如果发现其超过阀值,则会将频率设置为可用的最高值。如果调控器发现利用率小于阀值,则会继续降低频率,直到它达到可用的最低值。您可以控制可用频率的范围,调控器检查系统利用率的频率以及利用率阀值。

1.1.5保守调控器:更具渐进性的随需应变方式(Conservative

       基于随需应变调控器的保守调控器也是根据处理器利用率来调整频率;但是,保守调控器稍有不同,它允许电能更加渐进性地增加。保守调控器将检查处理器利用率,并比较其与阀值的大小,适当地增加或减少频率,而不是直接使用最高或最低的频率。您可以控制可用频率的范围、调控器检查系统利用率的频率、利用率阀值以及频率渐进率。

定制开发板linux内核


通过上述对CPUfreq调控器的了解,接下来为EVB-T335定制Linux系统内核。步骤如下:
1、将evbt335_defconfig作为内核配置,在内核源码根目录执行以下命令
       $ cp evbt335_defconfig.config

注意:配置文件“evbt335_defconfig”为出厂默认配置,包含了CPU的电源管理固件的相关配置,建议您用该文件作为编译内核的配置。电源管理的固件已经保存在内核源码的指定路径中:

2、配置内核,$make ARCH=arm menuconfig
       依次选择内核配置菜单中的                          
       CPU Power Management  --->
              CPU Frequencyscaling  --->              //built-in,最终如下图所示
WeChat 圖片_20171227101443.png


如需设置默认的调控器,选择Default CPUFreq governor (ondemand) ---> 进入下一级菜单,入下图所示:
WeChat 圖片_20171227101539.png


退出,并保存。
3、编译内核
       $make ARCH=armCROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x80008000 uImage -j32
注:“-jn”表示CPU的n线程同时执行编译,-j32表示32线程。您可根据电脑CPU的实际情况来指定线程数,获取CPU的线程数量,在终端(Terminal)下输入以下指令:$ cat /proc/cpuinfo| grep "processor"| wc -l
       将编译好的内核烧写到EVBT-335的Flash(或eMMC)中,以便后续在主板上使用。

3、CPUfreq调控器的使用
        本章简单介绍CPUfreq 调控器在Linux环境下,EVB-T335主板的使用情况,不列举每种调调控器的详细操作过程。


查看可用可用的调控器
[root@EVB335X /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governorsconservative userspace powersave ondemand performance

查看当前调控器[root@EVB335X /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorondemand

设置调控器,以performance为例[root@EVB335X /]# echo performance>
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

查看当前频率(OOP ,Operating Performance Points),频率为单位KHz[root@EVB335X /]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq800000

查看可用的频率
[root@EVB335X /] cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies300000 600000 720000 800000

更改频率,仅userspace有效。如果调控器设为ondemand,频率随系统资源的增减而自动改变。
[root@EVB335X /]# echo 7200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed

查看当前CPU的电压
[root@EVB335X /]# cat /sys/class/regulator/regulator.3/microvolts
1200000

说明:CPU的电压与频率成正相关关系,即频率升高时电压升高、频率下降是电压降低。利用此特性,从而达到节能的目的。
      用户根据产品应用领域的不同,设置合适的调控器,对性能和功耗进行合理配置,这样做是非常有意义的。正如前言部分的三个例子,在产品设计初期就应当考虑性能与功耗的问题,在产品成型后利用CPUfreq子系统优化其性能。COM-T335X充分考虑以上两个因素,利用PMIC管理整个系统,使功耗得到最佳优化。

回复

使用道具 举报

5

主题

1

好友

230

积分

秀才

Rank: 3Rank: 3

该用户从未签到

发表于 2017-12-28 09:30:17 |显示全部楼层
AM335x开发板手册.pdf (1.85 MB, 下载次数: 0)
AM335x开发板
功能框图.png

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /2 下一条

手机版|爱板网 |网站地图  

GMT+8, 2018-1-22 18:28 , Processed in 0.227691 second(s), 14 queries , Memcache On.

苏公网安备 32059002001056号

Powered by Discuz!

回顶部