www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]linux 電源管理

1.概述

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

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

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

兩種電源管理標準:APM和ACPI

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

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

目前的PC機主板一般同時支持APM和ACPI兩種標準。  

3.linux對電源管理的支持

內(nèi)核模塊

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

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

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

用戶態(tài)Daemon

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

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

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

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


1)使用pm_register對設備的每個實例(instance)進行注冊; 
2)在對硬件進行操作之前調(diào)用pm_access(這樣會保證設備已被喚醒并且處于ready狀態(tài)); 
3)用戶自己的pm_callback函數(shù)在系統(tǒng)進入suspend狀態(tài)(ACPI D1-D3),或者從suspend狀態(tài)恢復(ACPI D0)的時候會被調(diào)用; 
4)當設備不在被使用的時候調(diào)用pm_dev_idle函數(shù),這個操作是可選的,可以增強設備idle狀態(tài)的監(jiān)測能力; 
5)當被unload的時候,使用pm_unregister來取消設備的注冊。  

5.對APM進行編程

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

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

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

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

下面的代碼可以實現(xiàn)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!
");
                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,我們就同樣實現(xiàn)了apm -S的功能。

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


 

6.常見問題(FAQ)

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

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

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

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

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

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


7.總結(jié)

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

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

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉