莊衍豎 李立軍 沈東凱
華南理工大學(xué),廣東 廣州 510640
當(dāng)今手機等移動終端發(fā)展迅速,其功耗也越來越受到人們的重視。對于這些移動終端系統(tǒng),其顯示子系統(tǒng)的功耗就占了整機功耗的很大一部分。因此,降低顯示子系統(tǒng)的功耗是實現(xiàn)移動終端低功耗的關(guān)鍵。目前TFT-LCD廣泛用于這些移動終端系統(tǒng)。對于TFT-LCD顯示系統(tǒng)的低功耗,主要是通過降低背光,同時對圖像數(shù)據(jù)處理以補償背光強度的降低的算法來實現(xiàn)[1]。這種算法可以在應(yīng)用程序?qū)崿F(xiàn),也可以用FGPA等以硬件形式實現(xiàn),但這些實現(xiàn)方法通用性不強。為此,為提高算法的通用性和易移植性。同時,由于android手機等大部分的移動終端采用的是以Linux內(nèi)核為基礎(chǔ)的操作系統(tǒng),因此本文提出在嵌入式Linux驅(qū)動中實現(xiàn)顯示子系統(tǒng)低功耗的基本架構(gòu)。
本文在嵌入式Linux驅(qū)動層中實現(xiàn)低功耗算法,在嵌入式Linux系統(tǒng)中TFT-LCD顯示子系統(tǒng)的正常顯示依賴于Linux系統(tǒng)中的幀緩沖顯示驅(qū)動程序,圖像數(shù)據(jù)傳遞到實際幀緩沖區(qū)后由TFT-LCD讀取顯示到屏幕上[2]。幀緩沖區(qū)驅(qū)動作為應(yīng)用程序和底層硬件之間的橋梁,保證了圖像數(shù)據(jù)從應(yīng)用層到底層硬件的正確傳遞。本文將低功耗算法實現(xiàn)于實際幀緩沖驅(qū)動程序中[3],可以做到對應(yīng)用程序完全透明,使得用戶不易察覺到該算法模塊的存在,具有很好的移植性和通用性。本文主要是提出在以Linux內(nèi)核為基礎(chǔ)的操作系統(tǒng)下低功耗的驅(qū)動層實現(xiàn)架構(gòu),其顯示子系統(tǒng)的基本架構(gòu)如圖1所示。
在整個顯示子系統(tǒng)框架中,主要涉及3大部分:上層是應(yīng)用程序部分,中間層是驅(qū)動程序部分、底層是硬件邏輯部分。本文主要是提出驅(qū)動程序部分中低功耗的基本架構(gòu)。本文提出的驅(qū)動程序架構(gòu)是在Linux內(nèi)核中實現(xiàn),主要有內(nèi)存分配及映射,用于暫時存儲應(yīng)用層傳遞下來的圖像數(shù)據(jù);PWM背光調(diào)節(jié)部分,通過改變占空比來調(diào)節(jié)背光;圖像像素處理部分,根據(jù)原始圖像數(shù)據(jù)調(diào)整圖像像素值;動態(tài)定時器部分,保證以上三部分算法的實時執(zhí)行。
圖1 顯示子系統(tǒng)的基本架構(gòu)
在嵌入式Linux顯示子系統(tǒng)中,需要對圖像進行處理后才寫入到幀緩沖區(qū)進行顯示。因此,在Linux內(nèi)核中需要分配內(nèi)存在存儲應(yīng)用程序傳遞下來的圖像數(shù)據(jù)。Linux內(nèi)核中的物理地址內(nèi)存是通過分頁的機制是實現(xiàn)的,將整個內(nèi)存劃分為無數(shù)的4K大小頁,而且是采用了伙伴關(guān)系分配算法來進行分配的,可采用內(nèi)核中的__get_free_pages()函數(shù)來分配內(nèi)存空間。
在嵌入式Linux系統(tǒng)中,應(yīng)用程序所要顯示的圖像數(shù)據(jù)需要傳遞到內(nèi)核空間,然而應(yīng)用程序是不能直接訪問到內(nèi)核空間的,因此需要將內(nèi)存存儲空間映射到用戶空間,方便應(yīng)用程序直接讀寫數(shù)據(jù)。在顯示子系統(tǒng)驅(qū)動程序中需要一個映射函數(shù)mmap()來實現(xiàn)內(nèi)存空間到用戶空間的映射。
嵌入式Linux系統(tǒng)上的背光驅(qū)動程序控制著TFT-LCD的顯示亮度,在背光驅(qū)動程序中,采用PWM信號控制背光的強度,通過改變PWM信號的占空比大小可以自由的控制背光強度的大小。
圖像像素處理主要是根據(jù)圖像數(shù)據(jù)內(nèi)容來決定,可采用標(biāo)準(zhǔn)亮度補償?shù)然镜膱D像增強算法。本文主要是提出驅(qū)動低功耗的架構(gòu),對于圖像處理的具體算法不做深入研究。
每次應(yīng)用程序把圖像數(shù)據(jù)發(fā)送到內(nèi)存存儲空間之后,都需要對圖像進行處理和調(diào)整背光亮度。然而,對于Linux顯示設(shè)備驅(qū)動程序來說,循環(huán)重復(fù)的執(zhí)行圖像處理程序和背光調(diào)節(jié)程序需要在驅(qū)動程序中創(chuàng)建一個動態(tài)定時器。這樣,就能保證圖像處理算法和背光亮度算法的準(zhǔn)確執(zhí)行,并把調(diào)整后的像素值送到實際的幀緩沖里。
在Linux內(nèi)核提供了一組與定時器相關(guān)的用來簡化管理定時器的操作,這些接口是在文件kernel/timer.c中實現(xiàn)的。只需要在顯示驅(qū)動初始化的時候創(chuàng)建并初始化一個動態(tài)定時器,然后激活這個定時器,在定時器處理函數(shù)中重新調(diào)度注冊該定時器,就能實現(xiàn)定時器的周期運行。
A.應(yīng)用程序?qū)D像數(shù)據(jù)傳遞到內(nèi)存存儲空間;
B.圖像像素處理部分處理內(nèi)存存儲空間的數(shù)據(jù)并給出亮度調(diào)整系數(shù),然后將處理后的數(shù)據(jù)傳送到實際幀緩沖區(qū);
C.PWM背光調(diào)節(jié)部分根據(jù)亮度調(diào)整系數(shù)調(diào)整占空比,從而改變背光強度
D.動態(tài)定時器保證B、C步驟的實時周期運行。
本文提出了在Linux系統(tǒng)下移動終端設(shè)備顯示子系統(tǒng)低功耗設(shè)計的基本架構(gòu),并給了低功耗算法的基本執(zhí)行流程,為顯示子系統(tǒng)的低功耗算法在Linux內(nèi)核驅(qū)動層的實現(xiàn)和移植提供了基礎(chǔ)。
[1]盧春鵬. 背光調(diào)節(jié)在降低液晶顯示器功耗中的作用[J]. 電子設(shè)計應(yīng)用, 2009, 4: 55-59.
[2]劉增水, 胡力剛. 基于 ARM 芯片的 TFT-LCD 顯示系統(tǒng)設(shè)計[J]. 儀表技術(shù), 2009, 5: 43-45.
[3]石曉娟, 張哲. 基于亮度補償算法的顯示子系統(tǒng)低功耗的設(shè)計[J]. 電子技術(shù), 2009, 11: 013.