国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

linux電源管理

發布時間:2010-9-26 14:15    發布者:eetech
關鍵詞: 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補丁來獲得這些功能。  

下面對電源管理的介紹以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功能分別可以通過下面的匯編語言實現:  

standby:

mov ax, 5307H

mov bx, 1

mov cx, 1

int 15H

suspend:

改成 mov cx,2

poweroff:

改成 mov cx,3

需要注意的一件事是在linux內核中沒有使用和實模式的一樣的方法來調用int 15H中斷,而是直接調用了bios的保護模式接口。所以我們如果修改了bios中的apm相關代碼并且沒有處理好保護模式接口的問題,可以出現這樣的情況:在實模式DOS下使用apm功能一切正常,但是在linux下調用apm功能發生內核一般保護性錯誤。  

在linux下我們可以通過對apm_bios設備的操作來完成同樣的功能。  

下面的代碼可以實現APM的suspend功能,等價于apm -s  

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <asm/fcntl.h>

#include <linux/types.h>

#include <sys/types.h>

#include "apm.h"

int main()

{

int fd, res;

fd = open("/dev/apm_bios", O_RDWR);

if (fd < 0) {

printf("open /dev/apm_bios error!\n");

exit(-1);

}

sync();

res = ioctl(fd, APM_IOC_SUSPEND, NULL);

if (res != 0) {

printf("ioctl error!\n");

close(fd);

exit(-1);

}

close(fd);

return 0;

}

如果我們把上面程序中的SUSPEND改成STANDBY,我們就同樣實現了apm -S的功能。  

在linux下POWEROFF操作有其獨特的流程,最后根據內核中apm或者ACPI的存在情況來執行相應不同的流程來關閉電源。請參見linux內核源碼,我寫的《linux關機重啟流程分析》中也有一定的介紹。

6.常見問題(FAQ)

1)我的系統不能被suspend,這是怎么回事呢?  

系統在suspend之前會向所有的驅動發消息,如果這個時候某個傲慢的驅動返回了一個-EBUSY,那么這次suspend的企圖就被這個驅動否決了,你只有過一會再試,如果這個驅動總是否決(真是蠻橫,不過它也許有自己的苦衷也說不定),你就永遠都無法suspend了。  

2)我按下系統的POWEROFF開關,在ATX的主板上,系統就會自動關機了,這個處理流程是什么樣子的呢?  

在內核APM模塊中建立了一個核心態線程不停的監測系統狀態,用戶的關機動作在這里被截獲后處理。詳細的流程可以參見本人的《linux關機重啟流程分析》。  

3)linux中電源管理的文檔在哪里?  

在linux/Documentation目錄下的pm.txt中詳細定義了linux驅動電源管理接口實現方式,并且有詳細的例子,apm和ACPI的實現流程需要參見linux源碼的實現。  

7.總結

linux中的電源管理是發展中的代碼。從目前的趨勢來看ACPI終將取代APM。現在使用APM則是較為成熟和穩妥的方案。我們如果現在編寫驅動應該嚴格遵守文檔中的pm.txt所規定的接口,這樣可以使我們的驅動有較強電源管理的適應性和穩定性。
本文地址:http://www.qingdxww.cn/thread-29350-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 你仿真過嗎?使用免費的MPLAB Mindi模擬仿真器降低設計風險
  • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
  • Cortex-M4外設 —— TC&TCC結合事件系統&DMA優化任務培訓教程
  • 想要避免發生災難,就用MPLAB SiC電源仿真器!
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品在线免费播放 | 精品久久中文网址 | 韩国免费网站成人 | 欧美日韩另类综合 | 五月天男人天堂 | 在线观看成年美女黄网色视频 | 日韩激情视频网站 | www.色99| 亚洲第一页乱 | 中文国产成人精品久久一区 | 亚洲动漫在线观看 | 狠狠的干狠狠的操 | 亚洲免费片| 青青青国产精品视频 | 久久香蕉国产精品一区二区三 | 两个人免费观看高清视频图 | 色综合五月天 | 天天摸天天舔天天操 | 2020精品极品国产色在线观看 | 第四色视频| 亚洲欧洲淘宝天堂日本 | 2021久久最新国产精品 | 免费精品视频 | 久久成人国产精品 | 亚洲午夜久久久久久噜噜噜 | 新91免费 | 日韩大片免费在线观看 | 欧美天天视频 | 狠狠色狠狠色综合网 | 国产成人在线免费 | 久久久久久久久久免费视频 | 国产综合色香蕉精品五月婷 | 爱情综合症泰剧在线观看 | 免费黄色在线观看 | 久久久综合结合狠狠狠97色 | 日本天堂网在线 | 久久久久久久久久久久久久久 | 八戒八戒在线播放免费观看5 | 国产午夜在线观看 | 美女网站视频色 | 91在线视频免费播放 |