栏目导航
联系我们
电话:
手机:
地址: 江苏省南京市玄武区玄武湖
当前位置:BOB-官网 > BOB新闻 > 公司动态 >
BOB嵌入式系统电源管理软件比较(下)
浏览: 发布日期:2021-11-25

  BOBLinux标准内核标准电源管理有ACPI、APM等机制。这些机制依赖于PC机的BIOS功能实现。嵌入式系统一般都没有实现BIOS支持,对其能耗管理机制需要进行其他定义。消费类电子产品联盟CELF对能耗管理作了定义,其框架如图4所示。

  CELF的能耗管理框架分为内核层和用户层。内核层又划分为体系结构无关层和体系结构相关层。体系结构相关层主要提供可管理硬件支持,例如处理器电压和运行频率调节,各种总线运行频率管理,设备的关断管理等。内核体系结构无关层在体系结构相关层的基础上为用户层提供APIs,进行各种能耗管理功能的支持。它包含一个能耗管理(PM)引擎,根据系统任务负载选择系统运行状态;提供能耗管理的挂起和恢复方法;提供VST技术,通过估计下次准确唤醒时间来确保在进入深度睡眠时,不被原来固定时间产生的定时器中断唤醒;还包含了各种外部设备关闭/开启的操作逻辑。

  用户通过编制具有一定智能的管理策略驻留程序,利用系统提供的能耗管理机制,进行有效的系统能耗管理。

  此外,在某些实现中,也可以将ACPI中的BIOS调用进行映射,在内核用软件实现回调函数,用以支持没有BIOS的电源管理。

  2.6内核提供了一个电源管理框架,在其基础之上容易实现各种电源管理规范,例如ACPI和APM规范。2.6内核中的设备驱动模型(Linux Driver Model,LDM)是内核对电源管理基础支持。Kobject基本结构嵌入到描述设备模型的组件的bus、devices、 drivers结构中。这些容器就是通过kobject连接起来形成树状结构。每个对象的属性(attribute)以文件形式输出到kobject对应的sysfs目录下。通过这种文件系统接口,可以对平台进行有效的电源管理。BOB

  Linux内核支持ON, Standby, Suspend, 和Hibernate四种电源状态。Standby指“带电挂起”,通过将CPU置于halt状态,将设备置于D1状态来达到节能的目的(ACPI规范中按能耗从高到低分D0~D3)。节能效果不明显,但是响应延迟最小。Suspend就是挂起到RAM。在该状态下,所有设备被置于D3状态,整个系统,除主存处于节电的自刷新模式(self-refresh)外,全部关闭电源。响应延迟比Standby大。Hibernate 是通过将系统状态保存到非易挥发性存储中(通常是磁盘),关闭整个系统的电源。延迟时间最长,但比一次完整启动来得短。通常情况下嵌入式设备都没有支持这种方式。

  通过sysfs文件系统接口触发系统级电源状态转化。转换管理是通过注册好的驱动来进行。例如,prepare函数确认系统能够进入所请求的状态,并且进行相应的准备工作。例如通过禁止抢占和“冷冻”所有进程来准备进入所请求的电源状态。Save函数枚举所有注册有电源管理能力的设备,保存系统和处理器的低层状态。接着PM核心禁止了中断,关闭外部设备电源,调用Sleep函数根据挂起级别进入睡眠状态。在嵌入式设备挂起过程中可以通过写入某些特殊的非易失性处理器寄存器来记录挂起的原因和挂起时的代码执行地址。系统上电后引导程序先执行,从特殊寄存器中判断系统是否从深度睡眠(Hibernation)中恢复。如果是,则负责从非易挥发性存储介质中恢复所有的硬件上下文。如果不是,系统负责从sleep()函数处返回。给所有设备上电,恢复中断。Restore函数被用来恢复系统的低层调用,恢复设备上下文。Cleanup函数从sleep状态恢复必须进行的清尾工作,例如抢占重新被允许,系统恢复正常执行。当一次完整的转换完成后,CPU执行权还给之前执行的进程。

  如图5所示,系统无任务时进入空闲,可被中断唤醒,处理完后重新进入空闲或者回到任务态。如果系统被挂起到RAM中,进入深度睡眠。可以关闭除了中断和唤醒源之外的所有设备,实现最大限度地省电。根据运行时不同的任务负载,系统应该有对应的不同电源级别。如图示中的任务、任务-、任务+等代表电源需求的状态。在完成任务的同时,进行最大化的节能。

  在Linux架构下实现动态电源管理,需要(1)用户层的管理策略;(2)内核模块需要为应用层提供的接口;(3)硬件无关的通用电源管理逻辑控制框架;(4)管理特定硬件的平台相关电源控制层。

  用户层策略通过sysfs文件系统接口(或proc文件系统接口)以及系统调用接口(APIs)来进行电源管理。内核硬件无关层提供电源管理逻辑控制,针对任务负载情况选择反映当前任务电源状态的电源操作点(相关可控的硬件参数)。内核硬件相关层主要对应系统的各种总线和设备时钟电源参数管理,并管理多种设备的参数约束。

  在某些设备闲置时可以被主动关闭,从而节电。在2.6内核中需要实现总线以及设备的电源管理支持,在驱动中需要实现设备驱动的suspend/resume函数。

  关闭一个设备,其驱动的suspend方法需要两个不同的调用,一个用来保存状,另外一个用来关闭设备电源。相反,resume方法需要一个调用用来给设备供电,另一个调用来恢复设备的状态。在关闭一个总线设备时必须关闭所有的下一级子设备。相反地,重新使能总线设备时,必须先使能根设备,然后再使能子设备。

  嵌入式系统如何做到有效的平台级能耗管理需要在内核提供的机制上实现一个智能化的管理软件,监控系统电源状态,处理相应电源事件,执行针对特定应用制定的管理策略。现有的Linux ACPI和APM的后台驻留进程,可以供嵌入式系统实现参考。商业的嵌入式linux 公司MontaVista 在其Moblinux 4.0以后的版本也提供一个用户态的电源管理策略和界面。

  嵌入式操作系统的电源管理功能实现结构中,主要可以分为核心层、接口层、应用策略管理层。核心层需要提供一个体系结构无关的电源管理框架,感知系统负载,进行系统电源状态管理。核心层还需要一个体系结构相关层,提供硬件相关的电源状态管理,例如进行电压/频率调节及相应的约束管理。核心层还需要提供一个用户编程接口,用户层通过编程来利用系统提供的电源管理机制。并且根据不同的应用需求编制智能化的管理策略。

  在电源管理功能上大致可以分为(1)系统级电源管理,(2)动态电源管理,(3)设备电源管理等三类。操作系统检查任务负载情况,如果没有需要运行的任务,则一般进入空闲等节能状态,等待唤醒。可以在空闲一段时间后进入深度睡眠,挂起到RAM中或者硬盘上。在运行任务期间,操作系统还可以利用硬件提供的电源管理功能动态调节芯片运行电压和频率,对系统进行更加细致的电源管理。操作系统还应该能够管理闲置的设备,关闭设备并提供恢复手段。

  上面我们分析的三种典型的嵌入式操作系统在电源管理方面是各有特色;TinyOS 简练小巧有基本的内核态和系统级的电源管理功能,但是相对比较简单;WindowsCE电源管理模块结构清楚,特别有提供了应用程序的接口,但是到目前看到的为止Windows CE/Mobile 开放给用户的电源管理功能还待提升;Linux 是开源代码,具有丰富的硬件电源管理支持,策略和动态的电源管理功能,但是相当实现的零散和分散,应用软件的接口不清晰和标准,需要用户作的工作比较多。

  消费类电子如近年流行的智能手机、GPS、移动电视都迫切需要高效的电源管理,传感网节点需要电源管理,以便大规模部署,全球变暖等国际性的问题也对电子产业节能和环保提出了更高的要求。现有的能源管理技术中还有许多问题有待于研究和解决,例如,(1)设计更加节能的芯片,减少系统的静态功耗,半导体制造工艺的改进,在芯片级别进行更好性能监测,通过设计优良的负载预测算法,在系统运行中对能耗级别进行更加精细调节。(2)在系统软件的设计上需要规范定义一个适合应用体系的框架结构,比如Intel 发起的PPM(power police mangment) 和APM(application power management)就是一个基于Linux 的开源项目,它推动着一个系统级和应用相关的电源管理软件系统。(3)在网络化的系统中,如何进行网络化能耗管理,在通讯过程中达到能耗最小化,例如研究能耗感知的路由算法,选择一个最节能路径,避免不必要的唤醒与睡眠。(4)电源管理的QoS,一个旨在更好的管理硬件系统,以达到性能和功耗平衡的系统。比如CPU的空闲管理,能耗高的Wi-Fi和其他网络设备管理等。(5)电源管理的测试和分析工具。总之,电源管理技术是一个结合微电子、集成电路、嵌入式系统和软件的综合学科,是一个正在快速发展的研究课题。它对电子产品的设计具有关键性影响,一个电源管理设计的好产品可以帮助产品在市场竞争中脱颖而出,克敌制胜。