已阅读5页,还剩63页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于SEP4020的嵌入式Linux低功耗管理,1.嵌入式系统低功耗的必要性,是sep4020的需要是整个嵌入式系统发展的趋势更是整个大环境的趋势,2.嵌入式系统功耗来源分析,cpuSdramLcd背光Lcd音频,网卡等设备,嵌入式系统的低功耗策略,前提:认为硬件的设计和选型已经确定,不考虑硬件设计上的低功耗策略;此时功耗水平在极大程度上取决于软件的设计;本课题的研究方向主要是从系统软件的角度来实现低功耗。,总体方针1:,充分利用sep4020的硬件特性:因为最终耗能的是硬件,所以在考虑采用软件方法降低功耗的时候,要充分考虑硬件的功能和性能,即在保障系统实现的基础上怎样组织硬件运作而使功耗降低。全速执行、待机和睡眠等行为都是利用CPU的固有能力。,处理器功耗策略,总体方针2:,充分提高平台设备的使用效率正如我们在之前如提到的,所谓一个嵌入式统,真正耗电的部分不仅仅是集中在cpu,一些外围设备更是主要的耗电大户,比如我们之前讲到的lcd和背光,如何让这些设备高效的使用也成为系统能够低功耗而需要改进的方面之一。,外围设备功耗策略,总体方针3:,充分利用Linux的低功耗特性:系统级低功耗设计一般是在操作系统层实现。因为操作系统管理系统所有软硬件资源,并获取系统的各种状态信息,控制硬件设备的状态。因此,在操作系统中实现全局功耗控制是最佳选择。而Linux作为一种优秀的操作系统,自身所带的电源管理及低功耗特性更是我们所需要好好加以利用的。,系统功耗策略,SEP4020微处理的硬件特性:,拥有独立的时钟和功耗管理模块pmc;支持动态变换工作电压;支持多种工作模式:NormalSlowIdleSleep支持动态地控制各子模块的时钟源,降低系统的整体功耗,对策1:,处理器负荷较轻时,降低处理器的时钟速度;在处理器没有负载的时候,自动进入idle模式;在处理器长时间不用时,进入sleep模式;将处理器所不需要的的模块关闭;,对策1需要研究的工作:,如何判断系统负载?相应的策略由于sleep模式是将外部所有模块关闭,进入SDRAM的数据自刷新,如何在模块关闭前保存外设状态以便能在wakeup之后仍然能够正常运行?动态改变系统时钟时,PLL有一定的稳定时间,在这段时间内系统会怎么样?Linux暂不支持fiq,但是sleep的wakeup的一种最重要的方式就是通过fiq,如何让linux支持这一点?,充分提高平台设备的使用效率,设备驱动程序在处理器和外设之间进行通信,直接对硬件进行操作,可以充分利用硬件的特性。在功耗管理的软件系统中,它也是软件的底层,是以上各层软件的基础。驱动层向上面各层提供函数调用接口,这些函数充分利用外设的功耗模式来降低外设的功耗。,对策2:,利用linux驱动系统层面的共同特性,补充电源管理函数,实现暂停,继续等功能。利用各个驱动所独有的特性进行优化(例:热敏打印,lcd屏的用户层面的策略)关于耗电大户LCD和背光:LCD:(1)降低LCD的刷新率。降低LCD刷新率后,可以减少SDRAM,总线的使用和减少功耗;(2)在不使用屏幕的时候关闭LCD控制器。背光:在必要的时候降低背光亮度,甚至关闭背光;,对策2所需要的工作:,系统接口低功耗部分的支持;驱动自身低功耗的支持;外设硬件的支持(比如背光亮度可调节);,Linux的低功耗特性:,Linux支持两种电源管理标准:APM(AdvancedPowerManagememt)和ACPI(AdvancedConfigurationandPowerInterface)。APM是传统的高级电源管理方案,目前仍然使用在许多基于Linux便携式设备中;而ACPI则提供了更为灵活的电脑和设备管理接口。这两个标准不能同时运行。缺省情况下,Linux运行ACPI。但是无论是APM还是ACPI都是基于pc平台的技术,特别是acpi技术暂无用到arm架构上的解决方案。,Arm架构能支持的linux电源方案只有apm其实本质上来说apm也不适用于arm架构,因为APM技术是基于bios的,嵌入式设备没有bios。为了适应这个标准,所以内核为arm系统创建一个虚拟的字符设备与用户空间进行通讯.这就是/arch/arm/kernel/amp.c,Linux的低功耗特性2:,对策3:,通过利用Linux内核的apm机制,实现系统的挂起(类似pc的睡眠状态),但是也是最能节省系统功耗的一步;这一部分是整个低功耗中最最复杂的一部分,可以参考一下三星这部分实现的流程:linux内核对S3C2410睡眠模式的支持.mht,对策3需要的工作:,这一部分是整个低功耗中最最复杂的一部分,可以参考一下三星这部分实现的流程:linux内核对S3C2410睡眠模式的支持.mht,总结:,充分利用sep4020的硬件特性,充分提高平台设备的使用效率,充分利用Linux的低功耗特性这三个部分是紧密结合不可分割的。在每一个功能的实现都会涉及到其他几个部分的内容,预期的目标就是解决所设想的技术点,并将所有的分散的技术组合成一套行之有效的完整的低功耗解决方案。通过一套完整的测试方案将低功耗的效果实实在在的用数字展示出来。,低功耗是一个硬件和软件相结合的综合课题,需要通过非常深入的了解你的硬件平台,并将所有可能的低功耗策略通过软件(驱动,内核,上层应用程序,乃至bootloader的整合)来实现。,2009.9.3后总结,2.关于apm,Apm机制的实现分为两个大部分:电源管理部分和设备驱动部分设备驱动部分:在调用电源管理部分前先会调用驱动使驱动进入suspend,也就是我们要为每个驱动实现suspend和resume函数电源管理部分:主要要实现一个结构体:staticstructpm_opspxa_pm_ops=.pm_disk_mode=PM_DISK_FIRMWARE,.prepare=sep4020_pm_prepare,.enter=sep4020_pm_enter,.finish=sep4020_pm_finish,;,Apm(2),驱动设备部分:(以nandflash为例,需添加以下功能)staticintsep4020_nand_suspend(structplatform_device*dev,pm_message_tpm)切断时钟staticintsep4020_nand_resume(structplatform_device*dev)重新供给时钟,并初始化硬件,系统低功耗的实现,目标在于管理较大的、非常见的重大电源状态改变,用于减少产品设备在长时间的空闲之后,减少电源消耗。主要实现方式:apm技术,系统的挂起/恢复(sleep),cpu级,设备驱动级,系统平台级,通过系统监测将闲置的设备置于省电模式。主要实现方式:可以从用户态对sys文件目录动态进行单个驱动设备的管理(模块时钟),通过用户态应用程序对cpu,设备,以及整个系统统一管理,以取得最好的优化策略实现方式:借鉴apmd实现自己的策略,cpu的动态管理,目标在于频繁发生、更高粒度的电源状态改变范围之内的管理主要实现方式:idle,动态主频,cpu级:,已实现任务idle时让cpu进入idle模式:Idle的深化:由于在linux中,任务间的调度依靠10ms一次的硬件时钟滴答完成,也就是说每10ms就会产生一次timer的硬件中断。同时idle进程会被中断唤醒,因此即使系统没有任何负载,处理器还是会以1秒钟100次的频率频繁进出idle模式,这样会大大降低系统在idle模式下的时间,而频繁的处理器工作模式切换也将导致功耗上升。因此可以修改内核源码,通过牺牲任务的响应速度(将硬件滴答改为100ms)来增大系统处于idle模式的时间,减小系统的功耗。主频动态管理暂未动,设备驱动级,已完成系统与设备驱动接口,能够从用户态(shell终端下就可操作)来单独管理驱动驱动的管理只使用与平台架构设备,即platform驱动,因此需对一些驱动进行改造(如smc),否则无法实现驱动的电源管理一些特殊驱动的suspend和resume函数需要仔细商榷,如uart等,系统平台级,按照linux电源管理技术中的apm来实现通过对mini2440开发板的使用已基本摸清系统挂起的整个流程在sep4020上实现了简单的挂起,成功验证了芯片在操作系统中sleep,并唤醒的功能,至2009.10.19进展:,总的来说前阶段的工作主要是走通硬件,基本实现了机制部分的所有功能,包括SEP4020各种工作模式在Linux下的实现,Linux电源管理的接口实现(APM技术)。,下一阶段的重心:精细机制部分,现在对机制部分的实现还是比较粗,更多是为了走通硬件,证明能实现,比如在很多驱动部分的suspend,resume中我直接填空的。对设备驱动层的功耗优化可以再做深层次研究,很多设备芯片支持低功耗模式例:SDRAM拥有powerdown模式,DM9161也有相应的powerreduce模式。,再论cpu_idle,configNO_IDLE_HZboolDynamicticktimerhelpSelectthisoptionifyouwanttodisablecontinuoustimerticksandhavethemprogrammedtooccurasrequired.Thisoptionsavespowerasthesystemcanremaininidlestateforlonger.Bydefaultdynamictickisdisabledduringtheboot,andcanbemanuallyenabledwith:echo1/sys/devices/system/timer/timer0/dyn_tickAlternatively,ifyouwantdynamictickautomaticallyenabledduringboot,passdyntick=enableviathekernelcommandstring.Pleasenotethatdynamictickmayaffecttheaccuracyoftimekeepingonsomeplatformsdependingontheimplementation.CurrentlyatleastOMAP,PXA2xxandSA11x0platformsareknowntohaveaccuratetimekeepingwithdynamictick.,增加suspend的范围:,不仅是plartform类型的device可以使用电源管理,系统的sys_timer也可以。没什么大作用,因为sleep本身就是将所有模块时钟关闭的,系统低功耗的实现,目标在于管理较大的、非常见的重大电源状态改变,用于减少产品设备在长时间的空闲之后,减少电源消耗。主要实现方式:apm技术,系统的挂起/恢复(sleep),cpu级,设备驱动级,系统平台级,通过系统监测将闲置的设备置于省电模式。主要实现方式:可以从用户态对sys文件目录动态进行单个驱动设备的管理(模块时钟),通过用户态应用程序对cpu,设备,以及整个系统统一管理,以取得最好的优化策略实现方式:借鉴apmd实现自己的策略,cpu的动态管理,目标在于频繁发生、更高粒度的电源状态改变范围之内的管理主要实现方式:idle,动态主频,至2009.12.15进展总结,完成了系统级休眠唤醒机制:睡眠时板级电流从270mA锐减至100mA(evb1.5,不开启lcd等耗电模块)完成了设备驱动级的电源管理的摸索和实现,可通过用户程序或sys目录单独管理设备驱动的开启和关闭。加入了lcd背光关闭的支持(系统从490mA降为270mA)新增对cpu变频的支持。,Linux动态变频技术,为什么要实现内核所提供的技术内核部分需要的工作cpufreq的客户端程序cpufreqd,为什么要实现变频?,虽然cpu在板级中已不是主要的耗电源,但是仍然占着举足轻重的位置细化功耗管理的颗粒度,为应用程序提供更多的功耗节省机制可行性论证没有问题:armkiller的nand驱动代码中有变频的实现,自己也实现了变频(cpu,timer,uart),sdram接口已留好,为什么要实现变频2?,对普通的应用,系统可以运行在维持平台运作的最低频率,在有处理任务时,变频机制会自动切换到合适的高主频,并且在任务结束时重回省电的低主频。在打开所有模块时:SEP4020在运行在88M时板级功耗为:250mASEP4020在运行在56M时板级功耗为:215mASEP4020在运行在32M时板级功耗为:180mA,为什么要实现变频3?,实现的一些工作是我们一直需要去做但是一直没有动力做的变频会涉及到大量模块的参数的重新配置,作为cpu原厂,我们需要把这些参数彻底掌握对这些参数的充分理解,能对现有系统进行优化,提升整体系统的效率使用发现一些参数还是太过保守(sdram,nand),我们的通用配置在系统降为32M时仍能正常工作。,Linux动态变频技术,为什么要实现内核所提供的技术内核部分需要的工作cpufreq的客户端程序cpufreqd,内核所提供的技术1:,目的:变频技术是指CPU硬件本身支持在不同的频率下运行,系统在运行过程中可以根据随时可能发生变化的系统负载情况动态在这些不同的运行频率之间进行切换,从而达到对性能和功耗做到二者兼顾的目的。来源:虽然多个处理器生产厂家都提供了对变频技术的支持,但是其硬件实现和使用方法必然存在着细微甚至巨大的差别。这就使得每个处理器生产厂家都需要按照其特殊的硬件实现和使用方法向内核中添加代码,从而让自己产品中的变频技术在Linux中得到支持和使用。然而,这种内核开发模式所导致的后果是各个厂家的实现代码散落在Linux内核代码树的各个角落里,各种不同的实现之间没有任何代码是共享的,这给内核的维护以及将来添加对新的产品的支持都带来了巨大的开销,并直接导致了cpufreq内核子系统的诞生。,内核所提供的技术2:,SEP4020,power_saved,cpu_speed,cpufreqd,内核所提供的技术3:,Linux内部共有五种对频率的管理策略userspace,conservative,ondemand,powersave和performance1.performance:CPU会固定工作在其支持的最高运行频率上;2.powersave:CPU会固定工作在其支持的最低运行频率上。因此这两种governors都属于静态governor,即在使用它们时CPU的运行频率不会根据系统运行时负载的变化动态作出调整。这两种governors对应的是两种极端的应用场景,使用performancegovernor体现的是对系统高性能的最大追求,而使用powersavegovernor则是对系统低功耗的最大追求。,3.Userspace:最早的cpufreq子系统通过userspacegovernor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU运行频率使用。(可以使用Dominik等人开发了cpufrequtils工具包)4.ondemand:userspace是内核态的检测,效率低。而ondemand正是人们长期以来希望看到的一个完全在内核态下工作并且能够以更加细粒度的时间间隔对系统负载情况进行采样分析的governor。,5.conservative:ondemandgovernor的最初实现是在可选的频率范围内调低至下一个可用频率。这种降频策略的主导思想是尽量减小对系统性能的负面影响,从而不会使得系统性能在短时间内迅速降低以影响用户体验。但是在ondemandgovernor的这种最初实现版本在社区发布后,大量用户的使用结果表明这种担心实际上是多余的,ondemandgovernor在降频时对于目标频率的选择完全可以更加激进。因此最新的ondemandgovernor在降频时会在所有可选频率中一次性选择出可以保证CPU工作在80%以上负荷的频率,当然如果没有任何一个可选频率满足要求的话则会选择CPU支持的最低运行频率。大量用户的测试结果表明这种新的算法可以在不影响系统性能的前提下做到更高效的节能。在算法改进后,ondemandgovernor的名字并没有改变,而ondemandgovernor最初的实现也保存了下来,并且由于其算法的保守性而得名conservative。Ondemand降频更加激进,conservative降频比较缓慢保守,内核所提供的技术4:,cpufreq技术在用户态所呈现的接口:cpuinfo_max_freqcpuinfo_min_freq:分别给出了CPU硬件所支持的最高运行频率及最低运行频率,cpuinfo_cur_freq则会从CPU硬件寄存器中读取CPU当前所处的运行频率。Governor在选择合适的运行频率时只会在scaling_max_freq和scaling_min_freq所确定的频率范围内进行选择scaling_cur_freq返回的是cpufreq模块缓存的CPU当前运行频率,而不会对CPU硬件寄存器进行检查。scaling_available_governors会告诉用户当前有哪些governors可供用户使用scaling_driver则会显示该CPU所使用的变频驱动程序Scaling_governor则会显示当前的管理策略,往这个上echo其他类型会有相应的转变。scaling_setspeed:需将governor类型切换为userspace,才会出现,往这个文件echo数值,会切换主频,以下是将governor切换为ondemand后生成的ondemand文件夹下出现的配置文件。sampling_rate:当前使用的采样间隔,单位:微秒sampling_rate_min:允许使用的最短采样间隔sampling_rate_max:允许使用的最长采样间隔up_threshold:表明了系统负载超过什么百分比时ondemandgovernor会自动提高CPU的运行频率ignore_nice_load:ignore_nice_load文件可以设置为0或1(0是默认设置)。当这个参数设置为1时,任何具有“nice”值的处理器不计入总处理器利用率。在设置为0时,所有处理器都计入利用率。sampling_down_factor:,使用方法:,cdsys/devices/system/cpu/cpu0/cpufreq/目录#echouserspacescaling_governor切换工作方式为userspaceecho32000scaling_min_freq设置最小工作频率(khz,3200088000)echo64000scaling_setspeed设置成想要的工作频率(khz),Linux动态变频技术,为什么要实现内核所提供的技术内核部分需要的工作cpufreq的客户端程序cpufreqd,需要的工作:,开启cpu变频技术,完成与操作系统的接口。为和变频相关的所有驱动模块添加相应的变频处理。,开启cpu变频技术:,1.在arch/arm/mach-sep4020/cpufreq.c2.实现核心结构体cpufreq_driver:staticstructcpufreq_driversep4020_driver=.flags=CPUFREQ_STICKY,.verify=sep4020_verify_speed,.target=sep4020_target,.get=sep4020_getspeed,.init=sep4020_cpu_init,.name=SEP4020Freq,;3.注册变频驱动结构体:cpufreq_register_driver(sep4020_freq_reconfig(freqs.new);sep4020_systimer_reconfig(freqs.new);if(freqs.newcur)sep4020_update_sdram_timings(cur,freqs.new);cpufreq_notify_transition(,驱动的变频实现模板:,structnotifier_blocksep4020_serial_freq_transition;staticintsep4020_serial_cpufreq_transition(structnotifier_block*nb,unsignedlongval,void*data)和该驱动相关的变频操作;staticinlineintsep4020_serial_cpufreq_register(void)sep4020_serial_freq_transition.notifier_call=sep4020_serial_cpufreq_transition;returncpufreq_register_notifier(,驱动的变频实现模板续:,staticinlinevoidsep4020_serial_cpufreq_deregister(void)cpufreq_unregister_notifier(,Linux动态变频技术,为什么要实现内核所提供的技术内核部分需要的工作cpufreq的客户端程序cpufreqd,cpufreqd概述:,Linux动态变频管理cpufreq提供了操作系统级别的变频功能,同时需要用户层来制定和执行策略。cpufreq后台进程cpufreqd就是用来监测系统的运行状况,并根据不同的状况设定CPU的工作频率的。,cpufreqd交叉编译过程:,编译sysfsutils-2.1.0编译cpufrequtils-002编译cpufreqd-2.2.1,cpufreqd使用:,首先根据系统需要来修改cpufreqd的配置文件cpufreqd.conf,该配置文件决定了cpufreqd的行为。Cpufreqd及内核中的cpufreq驱动是针对桌面电脑开发的,其中很多和桌面相关的接口比如acpi、apm等我们没有用到(apm我暂时还没打开,在内核中针对4020已实现),下面针对我们使用到的功能来介绍cpufreqd.conf的写法。它的完整介绍可参看/share/man/man5/cpufreqd.conf.5。cpufreqd.conf分三个部分:General、Profile和Rule。,General部分,Generalpidfile=/var/run/cpufreqd.pid/因为cpufreq是后台执行,kill的时候需要这个id号poll_interval=2/poll_interval(单位是秒,可以设为小数)是cpufreqd读取系统状态的时间间隔,每一次读取状态后,都会根据当前状态来给各个Rule打分得分最高的Rule对应的Profile将被执行,关于rule下面会详细谈suspend_interval=10/名为PowersaveLow的Profile的执行时间长达suspend_interval(单位是秒,应该设为整数)时,系统将自动进入睡眠状态verbosity=0/verbosity指示syslogd后台进程记录cpufreqd进程的运行信息等级#enable_remote=1/如果想手动选择cpufreqd执行的Profile,需要在cpufreqd.conf的General栏中设置enable_remote=1并在cpufreqd命令后加上-m选项,即可。这样就可以通过命令cpufreqd-get打印出cpufreqd.conf中所有可用的Profile,通过命令cpufreqd-setn,来选择执行第n条profile/General,profile部分,Profile可以有多个profilename=PerformanceHighminfreq=100%/minfreq和maxfreq定义了该Profile允许的频率范围,可以用绝对频率
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年心理护理中的运动治疗
- 医院创文办工作制度
- 医院视光部工作制度
- 午晚托教师工作制度
- 单位财务科工作制度
- 卫浴店员工工作制度
- 卫生连药房工作制度
- 县水利扶贫工作制度
- 县防汛抗旱工作制度
- 汕头市2026国家开放大学法学-期末考试提分复习题(含答案)
- GA 1817.1-2026学校反恐怖防范要求第1部分:普通高等学校
- 2026云南临沧市文化旅游产业发展集团有限公司招聘26人笔试备考试题及答案解析
- 2025年体育教师专业知识考试试题及答案
- 自治区审读工作制度
- 2026湖南省博物馆编外工作人员公开招聘笔试模拟试题及答案解析
- 2026年潍坊市招商发展集团有限公司公开招聘(12名)考试参考试题及答案解析
- DB44-T 2814-2026 城镇燃气用户端设施安全技术标准
- 河南省高职单招职业适应性测试考试试题及答案解析
- 水电管线集成暗槽明装施工工法
- 2026清远鸡行业分析报告
- 四川乐山峨边彝族自治县县属国企招聘笔试题库2026
评论
0/150
提交评论