新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > linux電源管理

        linux電源管理

        作者: 時間:2008-07-23 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/258650.htm  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所規定的接口,這樣可以使我們的驅動有較強電源管理的適應性和穩定性。

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

        上一頁 1 2 下一頁

        關鍵詞: Linux 電源管理

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 杭锦旗| 灵璧县| 楚雄市| 丹棱县| 临朐县| 乐都县| 广汉市| 安陆市| 永泰县| 长葛市| 西峡县| 十堰市| 习水县| 八宿县| 陕西省| 凌源市| 固阳县| 策勒县| 新田县| 凤庆县| 揭阳市| 金坛市| 孝义市| 双柏县| 新郑市| 保德县| 离岛区| 海安县| 绵阳市| 抚顺市| 綦江县| 玉屏| 图片| 公主岭市| 石林| 虹口区| 凤阳县| 年辖:市辖区| 通海县| 丹凤县| 景洪市|