莊衍豎 李立軍 沈東凱
華南理工大學,廣東 廣州 510640
當今手機等移動終端發展迅速,其功耗也越來越受到人們的重視。對于這些移動終端系統,其顯示子系統的功耗就占了整機功耗的很大一部分。因此,降低顯示子系統的功耗是實現移動終端低功耗的關鍵。目前TFT-LCD廣泛用于這些移動終端系統。對于TFT-LCD顯示系統的低功耗,主要是通過降低背光,同時對圖像數據處理以補償背光強度的降低的算法來實現[1]。這種算法可以在應用程序實現,也可以用FGPA等以硬件形式實現,但這些實現方法通用性不強。為此,為提高算法的通用性和易移植性。同時,由于android手機等大部分的移動終端采用的是以Linux內核為基礎的操作系統,因此本文提出在嵌入式Linux驅動中實現顯示子系統低功耗的基本架構。
本文在嵌入式Linux驅動層中實現低功耗算法,在嵌入式Linux系統中TFT-LCD顯示子系統的正常顯示依賴于Linux系統中的幀緩沖顯示驅動程序,圖像數據傳遞到實際幀緩沖區后由TFT-LCD讀取顯示到屏幕上[2]。幀緩沖區驅動作為應用程序和底層硬件之間的橋梁,保證了圖像數據從應用層到底層硬件的正確傳遞。本文將低功耗算法實現于實際幀緩沖驅動程序中[3],可以做到對應用程序完全透明,使得用戶不易察覺到該算法模塊的存在,具有很好的移植性和通用性。本文主要是提出在以Linux內核為基礎的操作系統下低功耗的驅動層實現架構,其顯示子系統的基本架構如圖1所示。
在整個顯示子系統框架中,主要涉及3大部分:上層是應用程序部分,中間層是驅動程序部分、底層是硬件邏輯部分。本文主要是提出驅動程序部分中低功耗的基本架構。本文提出的驅動程序架構是在Linux內核中實現,主要有內存分配及映射,用于暫時存儲應用層傳遞下來的圖像數據;PWM背光調節部分,通過改變占空比來調節背光;圖像像素處理部分,根據原始圖像數據調整圖像像素值;動態定時器部分,保證以上三部分算法的實時執行。

圖1 顯示子系統的基本架構
在嵌入式Linux顯示子系統中,需要對圖像進行處理后才寫入到幀緩沖區進行顯示。因此,在Linux內核中需要分配內存在存儲應用程序傳遞下來的圖像數據。Linux內核中的物理地址內存是通過分頁的機制是實現的,將整個內存劃分為無數的4K大小頁,而且是采用了伙伴關系分配算法來進行分配的,可采用內核中的__get_free_pages()函數來分配內存空間。
在嵌入式Linux系統中,應用程序所要顯示的圖像數據需要傳遞到內核空間,然而應用程序是不能直接訪問到內核空間的,因此需要將內存存儲空間映射到用戶空間,方便應用程序直接讀寫數據。在顯示子系統驅動程序中需要一個映射函數mmap()來實現內存空間到用戶空間的映射。
嵌入式Linux系統上的背光驅動程序控制著TFT-LCD的顯示亮度,在背光驅動程序中,采用PWM信號控制背光的強度,通過改變PWM信號的占空比大小可以自由的控制背光強度的大小。
圖像像素處理主要是根據圖像數據內容來決定,可采用標準亮度補償等基本的圖像增強算法。本文主要是提出驅動低功耗的架構,對于圖像處理的具體算法不做深入研究。
每次應用程序把圖像數據發送到內存存儲空間之后,都需要對圖像進行處理和調整背光亮度。然而,對于Linux顯示設備驅動程序來說,循環重復的執行圖像處理程序和背光調節程序需要在驅動程序中創建一個動態定時器。這樣,就能保證圖像處理算法和背光亮度算法的準確執行,并把調整后的像素值送到實際的幀緩沖里。
在Linux內核提供了一組與定時器相關的用來簡化管理定時器的操作,這些接口是在文件kernel/timer.c中實現的。只需要在顯示驅動初始化的時候創建并初始化一個動態定時器,然后激活這個定時器,在定時器處理函數中重新調度注冊該定時器,就能實現定時器的周期運行。
A.應用程序將圖像數據傳遞到內存存儲空間;
B.圖像像素處理部分處理內存存儲空間的數據并給出亮度調整系數,然后將處理后的數據傳送到實際幀緩沖區;
C.PWM背光調節部分根據亮度調整系數調整占空比,從而改變背光強度
D.動態定時器保證B、C步驟的實時周期運行。
本文提出了在Linux系統下移動終端設備顯示子系統低功耗設計的基本架構,并給了低功耗算法的基本執行流程,為顯示子系統的低功耗算法在Linux內核驅動層的實現和移植提供了基礎。
[1]盧春鵬. 背光調節在降低液晶顯示器功耗中的作用[J]. 電子設計應用, 2009, 4: 55-59.
[2]劉增水, 胡力剛. 基于 ARM 芯片的 TFT-LCD 顯示系統設計[J]. 儀表技術, 2009, 5: 43-45.
[3]石曉娟, 張哲. 基于亮度補償算法的顯示子系統低功耗的設計[J]. 電子技術, 2009, 11: 013.