曾慶遠
基于EP9315的WindML3.0顯示驅動開發?
曾慶遠
(中國西南電子技術研究所,成都610036)
為滿足目前高集成度嵌入式平臺下對功能性要求日益復雜和開發周期進一步縮短的需求,以ARM9處理器EP9315構建的平臺為實例,介紹了一種VxWorks實時嵌入式操作系統下標準多媒體開發庫WindML的顯示驅動開發方法和要點。描述了從驅動的安裝介入、初始化、繪圖函數的編寫和硬件加速功能的引入等方面內容,可為工程應用中顯示控制功能的開發提供參考。
嵌入式平臺;顯示驅動;多媒體開發庫;硬件加速
隨著嵌入式硬件平臺和嵌入式操作系統的高速發展,嵌入式環境下對顯示應用的需求也逐步進入到一個日趨復雜化、標準化和可定制化的階段。顯示驅動程序作為顯示應用的底層基礎在所有嵌入式操作系統和圖形應用開發庫中都是不可或缺的組成部分。
在目前的工程應用中,顯示驅動的開發主要依賴顯示芯片生產商和操作系統開發商的支持。在VxWorks實時嵌入式操作系統下,可獲取的顯示驅動在支持的顯示控制器型號的廣泛性和對顯示控制器硬件功能利用的充分性方面都遠不及Windows和Linux等主流操作系統。而嵌入式應用中的高定制性和可裁剪性的需求造成硬件平臺的多樣化要求開發者在短周期內開發移植出適應不同平臺的顯示驅動程序[1]。
WindML是VxWorks下一個基本的標準多媒體應用開發包,其對顯示功能的支持能滿足絕大部分條件下的2D顯示應用和部分3D顯示應用,并且其顯示驅動程序能夠作為底層的驅動向更上層的圖形開發庫提供支持,是VxWorks下最為基礎的顯示驅動程序[2,3]。
本文首先介紹和分析了WindML的顯示驅動架構、配置方法和標準驅動接口函數的結構和編寫,然后描述了部分繪圖函數的實現并重點介紹了此過程中硬件加速功能的引入和實現,最后提出了開發中的一些要點和易遺漏失誤的問題。
WindML驅動在整個VxWorks操作系統中所處的位置和作用機制[4]如圖1所示。
WindML顯示驅動的主要任務是顯示控制邏輯、同步時序的管理、顯示圖像數據的產生和顯示緩沖區的填充和管理[4]。
顯示控制器硬件設備負責顯示的時鐘、同步、使能等控制信號的產生以及從顯示緩沖區到顯示屏的顯示數據傳輸。WindML顯示驅動首先要實現對顯示控制器的初始化和顯示控制。
顯示圖形數據的產生由WindML的API調用WindML驅動中的繪圖API函數實現,圖形可以直接繪制到顯示緩沖區或繪制到系統內存再搬移到顯示緩沖區。系統內存管理同WindML存儲區的協調分配由WindML的存儲池管理機制來實現,最終呈現在顯示設備上的畫面其實就是顯示緩沖區中窗口的內容[5]。
通過層層調用來操作緩沖區會在進行大規模搬移和填充的時候耗費較長的時間,使得顯示畫面的刷新延遲或者在畫面上留下作圖的痕跡,因此需要一種機制使得顯示驅動程序可以直接操作緩沖區,通過DMA方式對緩沖區進行快速的搬移和填充等操作,減輕CPU的負擔,這就是硬件顯示加速功能。同時,具有GPU的平臺可以利用GPU在圖形運算方面的速度優勢輔助或取代CPU進行顯示圖形產生的運算,再直接填充到顯示緩沖區,實現顯示內容的高速操作。
WindML具體的顯示驅動架構如圖2所示。
在WindML的圖形驅動源代碼中,通過定義一個標準的驅動控制結構體來注冊全部的基本繪圖函數,而顯示器同步控制邏輯和顯示緩沖區的產生全部由WindML初始化函數中的圖形驅動初始化函數實現[6]。下面將介紹顯示驅動開發的具體方法。
本節以EP9315為核心的嵌入式平臺為例,介紹WindML顯示驅動開發的詳細方法和步驟。
3.1 W indML配置
在具體開發WindML顯示驅動之前,需要對WindML進行配置,目的是在WindML中裝入自己的顯示驅動程序,使得在編譯WindML時能將自己的驅動程序編入整個WindML的驅動包[7]。
首先需要修改WindML配置數據庫中文件:\$Windbase\host\resource\windML\config\database\windML-OUTPUT-DB.cfg
在這個文件中按上下文模板的格式插入自己的顯示器相關信息。
接著在同一目錄中創建自己的顯示驅動設備的配置文件,格式參考此目錄中其它顯示設備配置文件。其中重要的幾個配置參數如下:
(1)XX.OUTPUTTYPE:應該為上一步中插入的自己的顯示器設備名稱;
(2)XX.DIR:為顯示驅動程序的源碼存放目錄名稱,配置后編譯WindML時才會將此目錄中自己所開發的驅動程序源代碼編譯到WindML驅動庫中,該目錄應在target\src\ugl\driver\graphics\目錄中創建;
(3)XX.HEADER:驅動程序頭文件路徑和文件名,配置后WindML編譯時將會在這個頭文件中搜索一個名為UGL-GRAPHICS-CREATE的宏定義項,該項宏定義所指向的函數會作為整個顯示驅動程序的入口函數被裝入,圖形顯示設備的注冊、初始化和其它各種標準操作的驅動函數都將在這個函數中被注冊;
WindML顯示驅動數據結構全部包含在一個名為UGL-UGI-DRIVER的結構體中,接口函數UGL
GRAPHICS-CREATE所進行的操作就是創建這樣一個結構體并為其各個成員函數賦值。結構體初始化完成之后,WindML就從這個結構體中搜索所需用到的函數進行相應的操作。
完成上面幾步的配置之后,可以在WindML配置工具中發現新增的配置項,按此配置項對WindML進行編譯就能夠選取并裝入自己所開發的驅動程序。
通過上面分析可知,從代碼層面來看,顯示驅動開發的具體工作就是對UGL-UGI-DRIVER結構體中各個操作函數進行編寫開發。
3.2 顯示控制時序邏輯的實現
要在目標顯示器上進行相關內容的顯示,首先要對顯示控制器進行配置,使之輸出符合顯示器所需時序的控制和數據信號,該步驟包含顯示控制信號的產生和顯示緩沖區的定義和初始化[8]。
在UGL-UGI-DRIVER結構中,modeAvailGet和modeSet函數用于實現顯示控制設備的初始化和模式控制。modeAvailGet將讀取用戶指定的標準格式數組以獲取顯示設備的像素點個數、色深、色彩模式和刷新頻率等信息并返給WindML,而modeSet調用用戶提供的顯示控制器初始化函數按modeAvailGet函數獲取的顯示設備信息對顯示控制器進行配置。顯示控制器初始化函數將完成顯示控制時序信號和顯示緩沖區的配置。
一般來講,顯示控制器輸出到顯示屏的控制同步信號包括主顯示時鐘信號、行同步信號、幀同步信號、數據使能信號和RGB顯示數據。一般在mode-
Set函數中調用顯示控制器初始化函數來按照顯示設備的輸入規范設置顯示控制器的各寄存器,從而產生符合要求的時序邏輯控制信號,而顯示數據則依賴于顯示緩沖區的設置。從顯示控制器到顯示屏的顯示數據傳輸由DMA方式完成,數據源就是顯示緩沖區。顯示緩沖區應該是一塊空間足夠大、地址連續并且能夠高速讀寫的存儲器空間,其大小至少應該為像素點總個數乘以每個像素點所占據的存儲空間大小,而雙buffer和多buffer的顯示策略則需要更大空間的顯示緩沖區。顯示緩沖區可以是一塊獨立的存儲器芯片,一般為SDRAM等高速存儲器,也可以從嵌入式系統運行內存空間中劃取。利用顯示控制器提供的寄存器,通過設置顯存起始地址值和大小就可以設定顯存的位置。需要注意的是,由于數據傳輸采用了DMA方式,因此這塊地址區域的起始值應該符合DMA傳輸的要求,一般需要為字對齊方式。
在顯示驅動開發過程中這個部分主要實現的目的就是將顯示緩沖區中的圖形數據按照所約定的規范映射到顯示設備上去,使得繪圖等對顯示緩沖的操作能直接反映在顯示屏上。
3.3 基本作圖函數
WindML的顯示驅動結構UGL-UGI-DRIVER中,除了一些控制和存儲管理函數之外,總共定義了54個基本作圖操作相關的函數,包含了點、直線、矩形框、矩形塊、橢圓、光標、頁面和位圖等基本圖形以及色彩格式的轉換和顏色查找表等內容。每類圖形包含數個操作函數。這些函數在利用WindML進行作圖時將被上層API反復多次調用,因此,基本作圖函數代碼的效率將直接決定顯示驅動程序的質量。
WindML提供了基本作圖函數的參考集。為了兼容全部的顯示控制硬件設備,這些函數全部采用軟件運算作圖方式,即按一定的算法對所需繪制的圖形進行一個個像素點的運算并寫入顯存,以此在顯存中產生所需的顯示數據。這種操作方式雖然具有兼容性上的優勢,但其運算量大,操作繁雜,極大地加重了CPU的負擔,要實現流暢的畫面顯示對CPU的運算能力要求很高。
在開發WindML顯示驅動的過程中,應該根據顯示控制器提供的功能,對這部分函數代碼進行改寫,通過使用硬件加速功能來提高驅動程序的效率。這也是整個驅動開發過程中代碼工作量最大的部分,要求開發人員對硬件設備和WindML驅動原理和結構都有較深刻的認識。
利用硬件提供的加速功能進行的繪圖過程,無論是代碼復雜度還是操作效率都遠高于純軟件方式的緩沖區操作。因此,盡可能地將硬件提供的加速功能應用到WindML標準驅動結構中去,是WindML顯示驅動開發的最重要工作。
筆者根據在WindML顯示驅動開發過程的一些經驗,總結了以下幾點開發過程中的難點和易遺漏問題。
(1)關于DMA和Cache
由于在顯示數據從顯存到顯示屏的傳輸和顯示驅動硬件加速過程中都大量采用了DMA的操作方式,在進行驅動程序開發的過程中必須時刻注意DMA操作同CPU的Cache處理之間的協調,避免引起Cache維護的數據同實際存儲器數據不一致的問題,給顯示應用造成失誤。在所有驅動程序函數中,每一次的DMA操作前都應該手動同步Cache和存儲器空間,使DMA傳輸的源和目標地址的存儲器存儲內容與Cache一致,均確實為用戶所指定的數據內容。
(2)關于幀刷新同步和中斷
根據顯示屏的刷新頻率,每一次顯示內容的刷新都將耗費一定的時間按照行列的順序逐點來掃描完成。如果在這個過程中顯示緩沖區的內容發生了變化,那么以緩沖變化的時間點為界的顯示上下文內容就會不一致,造成顯示上的混亂。這種狀況在進行頻繁顯示畫面刷新的情況下(如動畫顯示等應用時)表現得比較明顯,這就需要一種機制來進行協調,使得顯示緩沖區的寫入總是在幀顯示使能信號為非使能電平時完成的。
EP9315提供一個系統中斷來解決這個問題。用戶可以指定在幀同步計數器遞減計數到任意值時產生一個顯示控制器中斷。將這個計數值設置為幀顯示使能信號跳變為非使能電平后的一個值來產生所需的中斷,并在接收到中斷信號后才進行顯示緩沖區內容的寫入就可以避免問題的發生。在進行buffer切換等緩沖區內容大量改變的操作時更是必須采用這樣的同步策略,否則會給顯示畫面帶來閃爍和殘像等明顯的問題。
(3)關于開發側重點
由于嵌入式平臺下的顯示應用和PC平臺不同,均具有很強的方向性。因此,在進行驅動開發時應根據應用的需求具有一定的側重點。例如在進行大量文字顯示的應用中,由于WindML的字體引擎是基于點陣字庫的,而點陣字庫中每個字符都以單色位圖的形式存在,因此字體的操作其實就是單色位圖在指定屬性的顯示設備上進行顯示的操作[9]。在此情況下單色位圖相關的作圖函數應該作為顯示驅動開發的側重點來進行,而針對其它應用很少或根本不顯示的圖元作圖函數,即使使用WindML參考庫中的純軟件作圖方式來進行這些很少用到的操作,也對整個系統的性能影響很小。
當然,一個完善的顯示驅動應該對驅動程序的所有內容都作最大程度的優化,但在實際工程中考慮到開發周期等問題,驅動開發工作必須選取一些側重點。
本文方法將主要應用于對顯示控制功能開發有一定復雜性和通用性需求的工程中,能夠幫助構建具有完整2D顯示功能的顯控平臺。文章在介紹WindML顯示驅動開發的過程中,著力于原理、方法和思路的介紹,并重點描述了硬件加速功能的引入和利用,同時指明了開發環節中的各個關鍵點,使整個驅動程序架構更加完整明了,開發流程和方法步驟更清晰。雖然本文的撰寫基于EP9315硬件平臺,但其原理和方法具有較強的通用性。
[1]熊毅,李海山,廖容.WindML顯卡驅動程序設計[J].計算機與數字工程,2008,36(7):175-177.
XIONGYi,LIHai-shan,LIAO Rong.WindML Graphics Device Driver Development[J].Computer&Digital Engineering,2008,36(7):175-177.(in Chinese)
[2]余彬,靳力,曾翔.WindML顯示技術的優勢和實現[J].艦船電子工程,2005,25(4):72-74.
YU Bin,JIN Li,ZENGXiang.Superiority and Realization of WindML[J].Ship Electronic Engineering,2005,25(4):72 -74.(in Chinese)
[3]趙漫菲,王光輝.基于WindML的界面開發在工程中的應用[J].計算機工程與設計,2006,27(3):522-524,540.
ZHAO Man-fei,WANG Guang-hui.Application of WindML graphics development technology in engineering[J].Computer Engineering and Design,2006,27(3):522-524,540.(in Chinese)
[4]李海亮,石鵬程.VxWorks的WindML圖形界面程序的框架分析[J].工業控制計算機,2007,20(1):46-49.
LIHai-liang,SHI Peng-cheng.Analysis of WindML Graphical Interface Program Frame on VxWorks[J].Industri-al Control Computer,2007,20(1):46-49.(in Chinese)
[5]WindRiver.WindML3.0 release notes[M].[S.1.]:WindRiver,2002.
[6]WindRiver.WindML3.0 apireference[M].[S.1.]:WindRiver,2002.
[7]申成祎,吾守爾·斯拉木.基于VxWorks操作系統的WindML 2D顯示方案[J].電腦開發與應用,2004,17(10):472-473,478.
SHEN Cheng-wei,Woxur SILAMU.Display Scheme of WindML 2D based on VxWorks Operating System[J].Computer Development&Applications,2004,17(10):472-473,478.(in Chinese)
[8]張雷,任恩恩.WindML工業平臺下開發S1d13506驅動及顯示功能的實現[J].工業控制計算機,2006,19(12):39-40,73.
ZHANG Lei,REN En-en.Developmentof S1d13506 Driver and Display Programm UnderWindML[J].Industrial Control Computer,2006,19(12):39-40,73.(in Chinese)
[9]梁小琴,王峰.WindML漢字顯示技術[J].國外電子測量技術,2008,27(2):51-53.
LIANG Xiao-qin,WANG Feng.Display technology of Chinese characters in WindML[J].Foreign Electronic Measurement Technology,2008,27(2):51-53.(in Chinese)
Development of Graphic Drivers for WindM L3.0 Based on EP9315
ZENGQing-yuan
(Southwest China Institute of Electronic Technology,Chengdu 610036,China)
To satisfy the requirement of functional complexity and reduction of developing periods in the field of highly integrated embedded system,this paper presents amethod and some kernel points of the graphic drivers development based on WindML,amultimedia developing library in the embedded operating system VxWorks,by taking an example of hardware platform constructed by the ARM9 processor EP9315.The presentation contains the description of the installation and initialization,programing of plotting function and importing of the hardware acceleration about the graphic drivers,in order to offer some reference for the application of display and control function development in projects.
embedded platform;graphic drivers;multimedia developing library;hardware acceleration
the B.S.degree and the M.S.degree from University of Electronic Science and Technology of China in 2005 and 2009,respectively.He is now an assistant engineer.His research interests include computer communication and digital integrated circuit.Email:zengqingyuan@vip.qq.com
1001-893X(2011)12-0092-05
2011-06-30;
2011-11-03
TP311
A
10.3969/j.issn.1001-893x.2011.12.019
曾慶遠(1983—),男,四川成都人,分別于2005年和2009年獲電子科技大學學士學位和碩士學位,現為助理工程師,主要研究方向為計算機通信與數字集成電路。
ZENGQing-yuan was born in Chengdu,Sichuan Province,in 1983.He