當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]linux 電源管理

1.概述

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

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

要實(shí)現(xiàn)電源管理,最重要的有兩點(diǎn):第一是需要設(shè)備本身支持節(jié)電功能,比如硬盤(pán),可以通過(guò)指令暫時(shí)關(guān)閉;第二是需要操作系統(tǒng)支持電源管理,這樣就可以在空閑一段時(shí)間之后調(diào)用驅(qū)動(dòng)的電源管理功能關(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),所以有些缺陷,比如對(duì)bios的過(guò)度依賴(lài),新老bios之間的不兼容性,以及無(wú)法判斷電源管理命令是由用戶發(fā)起的還是由bios發(fā)起的,對(duì)某些新硬件如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對(duì)電源管理的支持

內(nèi)核模塊

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

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

下面對(duì)電源管理的介紹以APM為主。 

用戶態(tài)Daemon

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

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

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

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


1)使用pm_register對(duì)設(shè)備的每個(gè)實(shí)例(instance)進(jìn)行注冊(cè); 
2)在對(duì)硬件進(jìn)行操作之前調(diào)用pm_access(這樣會(huì)保證設(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í)候會(huì)被調(diào)用; 
4)當(dāng)設(shè)備不在被使用的時(shí)候調(diào)用pm_dev_idle函數(shù),這個(gè)操作是可選的,可以增強(qiáng)設(shè)備idle狀態(tài)的監(jiān)測(cè)能力; 
5)當(dāng)被unload的時(shí)候,使用pm_unregister來(lái)取消設(shè)備的注冊(cè)。  

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

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

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

在實(shí)模式下APM的standby、suspend和poweroff功能分別可以通過(guò)下面的匯編語(yǔ)言實(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)核中沒(méi)有使用和實(shí)模式的一樣的方法來(lái)調(diào)用int 15H中斷,而是直接調(diào)用了bios的保護(hù)模式接口。所以我們?nèi)绻薷牧薭ios中的apm相關(guān)代碼并且沒(méi)有處理好保護(hù)模式接口的問(wèn)題,可以出現(xiàn)這樣的情況:在實(shí)模式DOS下使用apm功能一切正常,但是在linux下調(diào)用apm功能發(fā)生內(nèi)核一般保護(hù)性錯(cuò)誤。

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

下面的代碼可以實(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!
");
                exit(-1);
        }
        sync();
        res = ioctl(fd, APM_IOC_SUSPEND, NULL);
        if (res != 0) {
                printf("ioctl error!
");
                close(fd);
                exit(-1);
        }
        close(fd);
        return 0;
}

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

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


 

6.常見(jiàn)問(wèn)題(FAQ)

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

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

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

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

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

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


7.總結(jié)

linux中的電源管理是發(fā)展中的代碼。從目前的趨勢(shì)來(lái)看ACPI終將取代APM?,F(xiàn)在使用APM則是較為成熟和穩(wěn)妥的方案。我們?nèi)绻F(xiàn)在編寫(xiě)驅(qū)動(dòng)應(yīng)該嚴(yán)格遵守文檔中的pm.txt所規(guī)定的接口,這樣可以使我們的驅(qū)動(dòng)有較強(qiáng)電源管理的適應(yīng)性和穩(wěn)定性。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉