Linux电源管理详解.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux电源管理详解

Linux电源管理详解1.概述 ? 虽然Linux可以在任何一台386以上的PC上运行,目前大多数人使用的都是新型的,带有各种外设的桌面PC或者笔记本电脑,这样,电源管理功能 (PM)就逐渐变得越来越重要。在笔记本电脑上电源管理可以节能,延长电池寿命,而在桌面PC上它可以降低幅射,降温,延长外设使用寿命。现在的操作系统 大都内置了电源管理支持,例如 Windows 和 Linux。 2.PC机实现电源管理的方法 ? 要实现电源管理,最重要的有两点:第一是需要设备本身支持节电功能,比如硬盘,可以通过指令暂时关闭;第二是需要操作系统支持电源管理,这样就可以在空闲一段时间之后调用驱动的电源管理功能关闭设备。 两种电源管理标准:APM和ACPI ? 传统的APM(Advanced Power Management)是一种基于bios的电源管理标准,目前的最新版本是1.2,它提供了CPU和设备电源管理的功能,但是由于这种电源管理方式主要 是由bios实现,所以有些缺陷,比如对bios的过度依赖,新老bios之间的不兼容性,以及无法判断电源管理命令是由用户发起的还是由bios发起 的,对某些新硬件如USB和1394的不支持性。 ? 为了弥补APM的缺陷,新的电源管理ACPI应运而生,这就是ACPI(Advanced Configuration and Power Interface),它主要是将电源管理的主要执行者由bios转换成为操作系统,这样可以提供更大的灵活性以及可扩展性。 ? 目前的PC机主板一般同时支持APM和ACPI两种标准。 3.Linux对电源管理的支持 内核模块 ? 针对APM和ACPI两种不同的标准,Linux内核提供了两个不同的模块来实现电源管理功能,这就是apm和acpi。需要注意,apm和acpi是互 相冲突的两个模块,用户在同一时间内只能加载其中之一,如果当他们在加载的时候发现二者之一已经加载,就会自动退出。 ? 在官方发布的内核中APM是较为成熟的电源管理方式,可以完成在Windows下ACPI所能完成的大部分功能。由于官方内核中ACPI的功能比较有限, 目前还处于开发版状态。所以当前的大多数distribution,如红帽子默认就使用了apm作为电源管理方式。但是值得注意的是Linux中的 ACPI实际上是由一个单独的项目小组模块进行维护的,当前内核ACPI的版本实际上已经远远落后于最新的版本。由于Linux稳定版中对任何新特性的加 入都非常谨慎小心,所以我们也许只能等到2.6.x版本的Linux诞生后才能看到ACPI的稳定全功能版了。不过我们也可以自己对内核打最新的ACPI 补丁来获得这些功能。 ? 这里是ACPI的主页:/projects/acpi/? 下面对电源管理的介绍以APM为主。 用户态Daemon ? 为了让Linux内核中的电源管理功能够更好的被利用,我们还需要用户态daemon程序的配合。针对APM和ACPI,分别有apmd和acpid两个 不同软件。他们实现的功能比较类似,都是允许用户预先定义某些策略,然后跟踪电源状态,执行特定的操作。在apmd软件包中还有一个工具apm,用户可以 用它使机器主动进入standby和suspend状态,还可以查询bios的apm版本号。在使用acpi时直接对proc文件系统进行操作即可完成同 样的功能。 4.Linux下驱动的电源管理机制 ? 在Linux下不必为驱动分别编写与APM和ACPI相对应的代码,Linux与Windows类似,为驱动提供了统一的电源管理接口。驱动只要实现了这些接口,就可以实现电源管理的功能。操作系统在它认为合适的时候就会通知驱动完成这些操作。 ? 实现设备电源管理接口主要需要实现以下5点: ? 1.使用pm_register对设备的每个实例(instance)进行注册; ? 2.在对硬件进行操作之前调用pm_access(这样会保证设备已被唤醒并且处于ready状态); ? 3.用户自己的pm_callback函数在系统进入suspend状态(ACPI D1-D3),或者从suspend状态恢复(ACPI D0)的时候会被调用; ? 4.当设备不在被使用的时候调用pm_dev_idle函数,这个操作是可选的,可以增强设备idle状态的监测能力; ? 5.当被unload的时候,使用pm_unregister来取消设备的注册。 5.对APM进行编程 ? 下面介绍在实模式中和在Linux下使用APM功能的编程方法: ? 由于APM是由bios提供的,我们可以直接在实模式(如DOS下)调用int 15软中断来进行电源管理操作。 ? 在实模式下APM的standby、suspend和poweroff功能分别可以通过下面的汇编语言实现:

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档