arm linux内核 电源,arm linux内核中实现电源管理方法

arm linux内核中实现电源管理方法

ARM Linux内核中实现电源管理的方法

■ 苏州大学  祝伟恩 吕强

随着全球信息化的迅猛发展,以个人信息处理为主要应用目标的各种掌上设备成为了市场的新焦点,出现了一大批功能强大的嵌入式信息处理设备,受到了广大用户的青睐。一台成功的掌上信息处理设备不仅要求体积小巧,功能强大,而且其待机时间也应达到一定的标准,因此掌上设备的电源管理就成为很重要的一个部分内容。笔者在GPL许可协议下,利用开源组织提供的项目源码,在已成功运行了Linux的Intel DBPXA250 Lub-bock实验开发板上对电源管理做了探索,并实现了简单的电源管理功能。

[1]

2.1PC平台的实现方法

Linux在PC平台的电源管理主要是由三个层次所组

成的,分别是BIOS、Kernel和apmd。 BIOS为电源管理提供最底层的支持,是电源管理行为的具体实施者。Kernel提供了BIOS电源管理功能的驱动,接收各种电源管理消息,最终将其交由BIOS来完成。apmd是内核提供给用户空间的一个接口,使用户能够在用户空间里对电源管理进行配置与操作。这三个层次中最为重要的就是Kernel层面,如果没有Kernel对电源管理提供基本驱动,即使有了BIOS底层的支持也不可能实现电源管理功能,所以内核的支持是实现电源管理的重要一环。 PC平台上对电源管理的支持主要是由Linux源代码下arch/i386/kernel/的apm.h和apm.c提供的。在这两个文件里实现了相应BIOS电源管理功能的内核调用,并且实现了一个内核守护线程。该内核线程在系统运行过程中不断检查由BIOS产生的各种电源管理事件,并调用相应的处理程序,最终实现电源管理功能。

1硬件与软件系统概述

系统的硬件平台采用Intel的Lubbock实验开发板,它

基于Intel新一代为无线手持式应用产品开发的XScale[2]微处理器架构。与前几代产品相比,XScale架构具有更好的性能、更低的功耗和更高的可靠性,其处理器芯片PXA250的最高主频可达400MHZ,支持基本的电源管理功能。可以在run、turbo、idle、sleep和deepsleep几个状态之间切换。

整个软件系统包括如下几个部分:①引导装载程序(BootLoader)ARMBoot[3],存储于Flash中,它在实验板加电后首先被执行,对各主要资源进行初始化后,完成内核映像文件的装载和引导;②Linux内核,包括了开发板外围设备的驱动和嵌入式文件系统的建立,从Russell King主持的开源项目ARM Linux[4] 获得,通过针对ARM[5]平台的交叉编译生成。

2.2基本的设计思路

上文已经说了,由于平台之间的差异,PC平台上的

电源管理实现不能完全照搬到实验平台上,所以必须在实现方式和功能上做出很大的修改。从实现方式上来说,由于ARM平台上没有类似PC平台上BIOS的强大底层支持,也就没有现成的BIOS调用,所以电源管理功能的代码只能通过调用ARM CPU的汇编代码来实现。从功能上来说,手持设备的电池供电时间是有限的,所以必须最大可能的节省电力,尽量延长电池的使用时间。而PC上的电源管理功能相对PDA来说过于粗放,能起到一定的节能效果,但面对PDA的需求还远远不够。通过对PDA实际工作状况的分析可以得出这样的结论,PDA主要存在两种工作状态——用户使用状态和系统空闲状态。相对应的,电源管理状态就是全速工作状态与消耗电力最低的休眠状态。所以电源管理的主要任务就是适时的在全速工作状态和休眠状态间切换,从而达到节省电力的目的。具体的设计思路是这样的,在系统初始化时生成一个内核守护线程,该线程每隔一定

2设计思路

基本的设计思路是参考PC平台的实现方法(主要是

i386上APM的实现方法),在Lubbock实验板上达到电源管理的目的。但由于PC、PDA面向的应用不同,完全照搬PC上的电源管理,显然是不能满足PDA对电源管理的特殊需求的,所以必须针对PDA的应用需求扩展PC上的电源管理,从而使其能够满足PDA上的苛刻要求。这些目的的实现是通过修改Linux内核加入相应代码来完成的。

Microcontrol

lers & Embedded Systems

65

你可能感兴趣的:(arm,linux内核,电源)