<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          linux電源管理

          作者: 時(shí)間:2008-07-23 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/258650.htm  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!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的存在情況來(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)定性。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: Linux 電源管理

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();