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

linux電源管理

發(fā)布時(shí)間:2010-9-26 14:15    發(fā)布者:eetech
關(guān)鍵詞: linux , 電源管理
1.概述  

雖然 linux 可以在任何一臺 386 以上的 PC 上運(yùn)行,目前大多數(shù)人使用的都是新型的,帶有各種外設(shè)的桌面PC或者筆記本電腦,這樣,電源管理功能(PM)就逐漸變得越來越重要。在筆記本電腦上電源管理可以節(jié)能,延長電池壽命,而在桌面PC上它可以降低幅射,降溫,延長外設(shè)使用壽命。現(xiàn)在的操作系統(tǒng)大都內(nèi)置了電源管理支持,例如 Windows 和 Linux。  

2.PC機(jī)實(shí)現(xiàn)電源管理的方法  

要實(shí)現(xiàn)電源管理,最重要的有兩點(diǎn):第一是需要設(shè)備本身支持節(jié)電功能,比如硬盤,可以通過指令暫時(shí)關(guān)閉;第二是需要操作系統(tǒng)支持電源管理,這樣就可以在空閑一段時(shí)間之后調(diào)用驅(qū)動的電源管理功能關(guān)閉設(shè)備。  

兩種電源管理標(biāo)準(zhǔn):APM和ACPI  

傳統(tǒng)的APM(Advanced Power Management)是一種基于bios的電源管理標(biāo)準(zhǔn),目前的最新版本是1.2,它提供了CPU和設(shè)備電源管理的功能,但是由于這種電源管理方式主要是由bios實(shí)現(xiàn),所以有些缺陷,比如對bios的過度依賴,新老bios之間的不兼容性,以及無法判斷電源管理命令是由用戶發(fā)起的還是由bios發(fā)起的,對某些新硬件如USB和1394的不支持性。  

為了彌補(bǔ)APM的缺陷,新的電源管理ACPI應(yīng)運(yùn)而生,這就是ACPI(Advanced Configuration and Power Interface),它主要是將電源管理的主要執(zhí)行者由bios轉(zhuǎn)換成為操作系統(tǒng),這樣可以提供更大的靈活性以及可擴(kuò)展性。  

目前的PC機(jī)主板一般同時(shí)支持APM和ACPI兩種標(biāo)準(zhǔn)。  

3.linux對電源管理的支持

內(nèi)核模塊

針對APM和ACPI兩種不同的標(biāo)準(zhǔn),linux內(nèi)核提供了兩個不同的模塊來實(shí)現(xiàn)電源管理功能,這就是apm和acpi。需要注意,apm和acpi是互相沖突的兩個模塊,用戶在同一時(shí)間內(nèi)只能加載其中之一,如果當(dāng)他們在加載的時(shí)候發(fā)現(xiàn)二者之一已經(jīng)加載,就會自動退出。  

在官方發(fā)布的內(nèi)核中APM是較為成熟的電源管理方式,可以完成在Windows下ACPI所能完成的大部分功能。由于官方內(nèi)核中ACPI的功能比較有限,目前還處于開發(fā)版狀態(tài)。所以當(dāng)前的大多數(shù)distribution,如紅帽子默認(rèn)就使用了apm作為電源管理方式。但是值得注意的是linux中的ACPI實(shí)際上是由一個單獨(dú)的項(xiàng)目小組模塊進(jìn)行維護(hù)的,當(dāng)前內(nèi)核ACPI的版本實(shí)際上已經(jīng)遠(yuǎn)遠(yuǎn)落后于最新的版本。由于linux穩(wěn)定版中對任何新特性的加入都非常謹(jǐn)慎小心,所以我們也許只能等到2.6.x版本的linux誕生后才能看到ACPI的穩(wěn)定全功能版了。不過我們也可以自己對內(nèi)核打最新的ACPI補(bǔ)丁來獲得這些功能。  

下面對電源管理的介紹以APM為主。  

用戶態(tài)Daemon  

為了讓linux內(nèi)核中的電源管理功能夠更好的被利用,我們還需要用戶態(tài)daemon程序的配合。針對APM和ACPI,分別有apmd和acpid兩個不同軟件。他們實(shí)現(xiàn)的功能比較類似,都是允許用戶預(yù)先定義某些策略,然后跟蹤電源狀態(tài),執(zhí)行特定的操作。在apmd軟件包中還有一個工具apm,用戶可以用它使機(jī)器主動進(jìn)入standby和suspend狀態(tài),還可以查詢bios的apm版本號。在使用acpi時(shí)直接對proc文件系統(tǒng)進(jìn)行操作即可完成同樣的功能。  

4.linux下驅(qū)動的電源管理機(jī)制  

在linux下不必為驅(qū)動分別編寫與APM和ACPI相對應(yīng)的代碼,linux與Windows類似,為驅(qū)動提供了統(tǒng)一的電源管理接口。驅(qū)動只要實(shí)現(xiàn)了這些接口,就可以實(shí)現(xiàn)電源管理的功能。操作系統(tǒng)在它認(rèn)為合適的時(shí)候就會通知驅(qū)動完成這些操作。  

實(shí)現(xiàn)設(shè)備電源管理接口主要需要實(shí)現(xiàn)以下5點(diǎn):  

1)使用pm_register對設(shè)備的每個實(shí)例(instance)進(jìn)行注冊;  

2)在對硬件進(jìn)行操作之前調(diào)用pm_access(這樣會保證設(shè)備已被喚醒并且處于ready狀態(tài));  

3)用戶自己的pm_callback函數(shù)在系統(tǒng)進(jìn)入suspend狀態(tài)(ACPI D1-D3),或者從suspend狀態(tài)恢復(fù)(ACPI D0)的時(shí)候會被調(diào)用;  

4)當(dāng)設(shè)備不在被使用的時(shí)候調(diào)用pm_dev_idle函數(shù),這個操作是可選的,可以增強(qiáng)設(shè)備idle狀態(tài)的監(jiān)測能力;  

5)當(dāng)被unload的時(shí)候,使用pm_unregister來取消設(shè)備的注冊。  

5.對APM進(jìn)行編程  

下面介紹在實(shí)模式中和在linux下使用APM功能的編程方法:  

由于APM是由bios提供的,我們可以直接在實(shí)模式(如DOS下)調(diào)用int 15軟中斷來進(jìn)行電源管理操作。  

在實(shí)模式下APM的standby、suspend和poweroff功能分別可以通過下面的匯編語言實(shí)現(xiàn):  

standby:

mov ax, 5307H

mov bx, 1

mov cx, 1

int 15H

suspend:

改成 mov cx,2

poweroff:

改成 mov cx,3

需要注意的一件事是在linux內(nèi)核中沒有使用和實(shí)模式的一樣的方法來調(diào)用int 15H中斷,而是直接調(diào)用了bios的保護(hù)模式接口。所以我們?nèi)绻薷牧薭ios中的apm相關(guān)代碼并且沒有處理好保護(hù)模式接口的問題,可以出現(xiàn)這樣的情況:在實(shí)模式DOS下使用apm功能一切正常,但是在linux下調(diào)用apm功能發(fā)生內(nèi)核一般保護(hù)性錯誤。  

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

下面的代碼可以實(shí)現(xiàn)APM的suspend功能,等價(jià)于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,我們就同樣實(shí)現(xiàn)了apm -S的功能。  

在linux下POWEROFF操作有其獨(dú)特的流程,最后根據(jù)內(nèi)核中apm或者ACPI的存在情況來執(zhí)行相應(yīng)不同的流程來關(guān)閉電源。請參見linux內(nèi)核源碼,我寫的《linux關(guān)機(jī)重啟流程分析》中也有一定的介紹。

6.常見問題(FAQ)

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

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

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

在內(nèi)核APM模塊中建立了一個核心態(tài)線程不停的監(jiān)測系統(tǒng)狀態(tài),用戶的關(guān)機(jī)動作在這里被截獲后處理。詳細(xì)的流程可以參見本人的《linux關(guān)機(jī)重啟流程分析》。  

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

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

7.總結(jié)

linux中的電源管理是發(fā)展中的代碼。從目前的趨勢來看ACPI終將取代APM。現(xiàn)在使用APM則是較為成熟和穩(wěn)妥的方案。我們?nèi)绻F(xiàn)在編寫驅(qū)動應(yīng)該嚴(yán)格遵守文檔中的pm.txt所規(guī)定的接口,這樣可以使我們的驅(qū)動有較強(qiáng)電源管理的適應(yīng)性和穩(wěn)定性。
本文地址:http://www.qingdxww.cn/thread-29350-1-1.html     【打印本頁】

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

廠商推薦

  • Microchip視頻專區(qū)
  • 深度體驗(yàn)Microchip自動輔助駕駛應(yīng)用方案——2025巡展開啟報(bào)名!
  • 我們是Microchip
  • 利用模擬開發(fā)工具生態(tài)系統(tǒng)進(jìn)行安全電路設(shè)計(jì)
  • 更佳設(shè)計(jì)的解決方案——Microchip模擬開發(fā)生態(tài)系統(tǒng)
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区 日韩 | 欧美国产成人精品一区二区三区 | 灵与肉电视剧剧情全集免费 | 一级片在线免费 | 污污成人一区二区三区四区 | 国产精品国产精品国产专区不卡 | 亚洲狠狠婷婷综合久久久图片 | 麻豆免费网站 | 亚洲国产午夜精品理论片的软件 | 香蕉国产人午夜视频在线 | 在线观看免费精品国自产 | 四虎4545www国产精品 | 日本在观线免费观看 | 国产精品高清一区二区 | 欧洲欧美人成在线视频免费下载 | 日日干日日草 | 热久久只有精品 | 岛国午夜精品视频在线观看 | 久久精品a一国产成人免费网站 | 美女无遮挡拍拍拍免费视频 | 国产精品一区二区三区四区五区 | 99精品免费视频 | 天堂网www天堂在线资源链接 | 亚洲天堂男人天堂 | 国产亚洲一区二区在线观看 | 色老成人精品视频在线观看 | 99re在线视频免费观看 | 野花手机免费观看7 | 97精品国产91久久久久久久 | 亚洲天堂视频在线免费观看 | 欧美xxxx色视频在线观看 | 看一级特黄a大片日本片黑人 | aaa毛片在线| 青草香蕉精品视频在线观看 | 欧美成人亚洲 | 精品国精品自拍自在线 | 亚洲第一会所 | 日本精品视频 | 九九热精品免费视频 | 九九精品视频在线 | 日韩在线观看不卡 |