基于Linux的便攜嵌入式設備電源管理解決方案
(3)實現電源管理設備
這個設備實際是用于接受用戶空間程序的控制所用,所以只需要簡單的實現“ioctl”調用就可以了。
/3 ioctl調用方法3 /
static int do_ioctl ( struct inode 3 inode, struct file 3 filp, u_int
cmd, u_long arg)
{ . . .
switch ( cmd) {
case APM_ IOC_STANDBY: {
pm_send_all ( PM_SUSPEND, ( void 3 ) 2) ; /3 外設掛起3 /
} break;
case APM_ IOC_RESUME: {
pm_send_all ( PM_RESUME, ( void 3 ) 0) ; /3 外設喚醒3 /
} break;
case APM_ IOC_SUSPEND: {
pm_send_all ( PM_SUSPEND, ( void 3 ) 2) ; /3 外設掛起3 /
sa1110_suspend ( ) ; /3 CPU進入休眠模式3 /
/3 CPU醒來,繼續(xù)執(zhí)行3 /
pm_send_all ( PM_RESUME, ( void 3 ) 0) ; /3 喚醒外設3 /
} break;
default:
return - EINVAL;
}
return 0;
}
最后,使用命令“mknod /dev/ apm c 254 0”,可以在文件系統(tǒng)中建立起該設備的訪問節(jié)點。該節(jié)點名為/dev/ apm,是一個字符設備( c) ,主設備號為254,此設備號為0。
(4)編寫用戶空間電源管理程序
用戶可以在適當的時候選擇是否改變CPU的時鐘頻率和顯示刷新率,是否關閉某些外部設備,是否使整個系統(tǒng)進入睡眠模式等等。這只需要使用系統(tǒng)調用“ioctl”對電源管理設備( /dev/ apm)發(fā)送命令就可以了。
int fd;
. . .
fd = open ( " /dev/ apm" , O_RDONLY) ; /3 打開電源管理設
備3 /
ioctl ( fd, APM_ IOC_SUSPEND,NULL) ; /3 發(fā)送電源管理命
令3 /
close ( fd) ; /3 關閉電源管理設備3 /
實現iPAQ電源管理前后耗電量比較
實現電源管理以前:開啟LCD, CPU 處于空閑狀態(tài),大多數其他芯片關閉,功耗為470mW。實現電源管理以后:在電源管理前的基礎上開啟SDRAM 的自動節(jié)能模式,功耗下降到280mW。然后降低LCD刷新率到30Hz, 功耗下降到238mW。再把CPU頻率降低到57. 3MHz,功耗下降到172mW。最后關閉LCD,功耗下降到98mW??梢姡ㄟ^本文方案的調節(jié)和優(yōu)化, iPAQ的耗電量確實可以得到有效地改善,最大優(yōu)化后的耗電量僅為優(yōu)化前的五分之一,從而大大提高了iPAQ的電池使用時間。
結 論
在嵌入式設備中,電源管理是一個硬件和軟件相結合的系統(tǒng)工程。本文介紹了已有的節(jié)能方法和Linux電源管理的機制, 并且以iPAQ 為例通過Linux的電源管理機制和上層應用軟件,設計和實現了一個較完整和有效的電源管理方案,為眾多基于Linux系統(tǒng)的嵌入式設備的電源管理提供了一個有用的參考。
評論