梁文森
(1.福州大學(xué)物理與信息工程學(xué)院,福建 福州 350116;2.福建星網(wǎng)銳捷通訊股份有限公司,福建 福州 350001)
基于BCM7241平臺的DirectFB圖形引擎移植研究
梁文森1,2
(1.福州大學(xué)物理與信息工程學(xué)院,福建 福州 350116;2.福建星網(wǎng)銳捷通訊股份有限公司,福建 福州 350001)
本文詳細(xì)描述了如何在BCM7241硬件平臺上移植實現(xiàn)DirectFB的圖形引擎硬件加速功能;并把移植之后在系統(tǒng)性能上得到的提升與未移植之前做比較,說明DirectFB在優(yōu)化BCM7241硬件平臺GUI性能上的作用。
GUI;DirectFB;BCM7241;移植;圖形引擎
圖形用戶界面,又稱圖形用戶接口(Graphical User Interface,簡稱GUI)是指采用圖形的方式顯示用戶操作界面。它與早期使用的非圖形界面的命令行界面相比,對于用戶來說圖形界面在視覺上更易于操作、接受。
近幾年來,隨著嵌入式技術(shù)的快速發(fā)展,嵌入式系統(tǒng)在軟件、硬件上均取得了較大的進(jìn)步。嵌入式GUI圖形引擎也得到了快速的發(fā)展,涌現(xiàn)出了一大批優(yōu)秀的嵌入式GUI圖形引擎,如:DirectFB、MiniGUI、QT等。近年來的市場調(diào)研需求顯示,非常多的嵌入式系統(tǒng),包括移動播放器、數(shù)字機頂盒、汽車電子控制系統(tǒng)、移動終端設(shè)備等均要求有一個高可靠、高性能的GUI系統(tǒng)的支持。因此,對圖形用戶界面GUI系統(tǒng)的要求是:高性能、高可靠、輕型、可移植、占用資源少、可配置等。
在嵌入式圖形引擎中需要實現(xiàn)很多圖形功能,具體包括:圖形的疊加、繪制、拷貝等。其中,有許多圖形功能需要進(jìn)行大量的數(shù)據(jù)傳遞搬移(如:圖形拷貝),或者有許多圖形功能需要進(jìn)行大量的數(shù)據(jù)運算(如2張圖片進(jìn)行混合疊加)。許多顯卡芯片帶有GPU(圖形處理器),有一部分圖形加速功能能夠從硬件上實現(xiàn)。
本文詳細(xì)描述了如何在BCM7241硬件平臺上移植實現(xiàn)DirectFB的圖形引擎硬件加速功能;并把移植之后在系統(tǒng)性能上得到的提升與未移植之前做比較,說明DirectFB在優(yōu)化BCM7241硬件平臺GUI性能上的作用。
2.1 BCM7241硬件平臺簡介
BCM7241芯片平臺是博通公司推出的一款低成本高性能的高清晰IP機頂盒(STB)解決方案芯片。 博通的BCM7241是一款SOC芯片,芯片內(nèi)部集成了MIPS核、視頻解碼器(RISC處理器)、音頻解碼器(DSP處理器)、解復(fù)用模塊(RISC處理器)、圖形引擎模塊(2D、OpenGL)、顯示模塊、DDR3控制器等多個功能模塊,其芯片內(nèi)部結(jié)構(gòu)如圖1所示。
圖1 BBCM7C24M1芯片內(nèi)部結(jié)構(gòu)
BCM7241芯片集成一個單核雙線程RISC MIPS核,主頻達(dá)到3000+DMIPS;集成一個DDR3內(nèi)存控制器,外接1GByte DDR3內(nèi)存;集成一個NAND FLASH控制器,目前外接一片256MByte NAND FLASH芯片用來存儲Linux操作系統(tǒng)和應(yīng)用程序。在BCM7241芯片平臺上廠商已提供可運行嵌入式Linux,其內(nèi)核版本3.3.3。
BCM7241圖形引擎模塊中,2D圖形引擎處理速率達(dá)到776 Mpixels per second,其2D圖形引擎具有如下幾個特性:硬件Scaling縮放、硬件BLT疊加等特性。
2.2 DirectFB簡介
DirectFB是一個輕型的提供硬件圖形引擎加速、輸入設(shè)備處理、集成透明管理的視圖窗口系統(tǒng)以及在驅(qū)動層之上的多層顯示的開放源碼庫。它是一個用軟件封裝實現(xiàn)當(dāng)前芯片硬件無法支持的圖形算法的層。DirectFB是專門針對嵌入式系統(tǒng)而設(shè)計,在設(shè)計之初就充分考慮嵌進(jìn)式系統(tǒng)的固有特性,體積小巧,資源消耗低,以最小的資源開銷來實現(xiàn)最高的硬件加速性能。作為嵌進(jìn)式系統(tǒng)中強大的圖形處理庫,DirectFB成為Linux下圖形處理的一個新的標(biāo)準(zhǔn)。
DirectFB是存在于Linux Frame Buffer層之上,高級圖形管理層(如QT、GTK+等)之下的。它以很小的資源占用來提供圖形硬件加速功能,如:提供多路帶α通道渲染等高級圖像操作功能。它不依賴其它庫除了標(biāo)準(zhǔn)C庫外,不需修改Linux內(nèi)核。它廣泛的應(yīng)用于有關(guān)Linux顯示界面的項目上。它支持市面上絕大部分的硬件顯示卡,支持鼠標(biāo)、鍵盤、遙控器、觸摸屏等輸入設(shè)備。支持JPEG、PNG、BMP、GIF、DirectFB bitmap font和矢量字庫TrueType等音視頻文件和字體。
2.3 DirectFB體系結(jié)構(gòu)
從GUI整個系統(tǒng)架構(gòu)來看,對于一般的DTV、STB來說,DirectFB處于QT、GTK這樣的高級GUI框架的下面,Linux系統(tǒng)驅(qū)動的上面。DirectFB是一個圖形加速中間件,專門針對Linux圖形庫設(shè)計的。
它的上層直接為圖形庫(如QT、GTK)提供如畫圖、顯示、輸入設(shè)備控制等服務(wù);它的下層直接面向GFX硬件加速,要求硬件驅(qū)動實現(xiàn)全部或部分預(yù)定的畫圖函數(shù),具體結(jié)構(gòu)如圖2所示。
圖2 DirectFB在應(yīng)用系統(tǒng)位置
對于上層的GUI高級框架來說,DirectFB是透明的;對于底層的驅(qū)動來說,DirectFB里面包含負(fù)責(zé)和硬件打交道的顯卡的驅(qū)動(gfxdriver)和顯示系統(tǒng)(system),這里gfxdriver是和各個硬件平臺相關(guān)的,需要自己實現(xiàn)。更加細(xì)化的Direct-FB的結(jié)構(gòu)圖如圖3所示。
圖3 DirectFB內(nèi)部結(jié)構(gòu)
2.4 DirectFB移植實現(xiàn)
通過上述對DirectFB體系結(jié)構(gòu)分析,在BCM7241硬件平臺上移植DirectFB圖形引擎需要根據(jù)BCM7241硬件平臺特性實現(xiàn)幾個模塊,具體是:gfxdriver(硬件圖形加速接口)、system系統(tǒng)顯示輸出、video(硬件音視頻解碼)。為了更易于理解DirectFB,介紹幾個DirectFB的概念,具體如下:
(1)Layers
它代表互相獨立的圖形緩存。大多數(shù)嵌入式設(shè)備都有多個layer,多個layer根據(jù)對應(yīng)的alpha值混合在一起從而顯示出來。
(2)Surface
代表一塊預(yù)留的內(nèi)存,來保存像素數(shù)據(jù)。DirectFB中的Drawing,Bilitting操作就是基于Surface的。Surface的內(nèi)存根據(jù)設(shè)定,可以從系統(tǒng)中分配,也可以從顯卡的內(nèi)存中分配。
(3)Primary Surface
代表一個特殊layer的特殊surface。如果primary surface是單緩沖的,任何對于primary surface的操作都會直接反應(yīng)到顯示屏上。
(4)Subsurface
是一個surface的子集,但是自身并不占有任何內(nèi)存。
(5)Window/Windowstack
控制一個layer中的surface該顯示什么。Window屬于某個背景可以設(shè)定的layer。每個window有自己的surface,window用這個surface來組合圖像。
把DirectFB圖形引擎移植到博通BCM7241硬件平臺上需注意下面幾點:
(1)必須給圖形引擎驅(qū)動取一個唯一的名字,并且用宏定義DFB_GRAPHICS_DRIVER(bcmnexus_gfx)實現(xiàn)。
(2)在驅(qū)動中定義如下6個函數(shù)供DirectFB Core使用,具體如圖4所示。
(3)關(guān)鍵函數(shù)說明
driver_init_driver函數(shù)是初始化硬件驅(qū)動,在獲得所有需要的資源后驅(qū)動應(yīng)該注冊屏幕和層;同時通過GraphicsDeviceFuncs結(jié)構(gòu)的funcs返回BCM7241硬件平臺的硬件加速函數(shù)列表,具體實現(xiàn)方式如圖5所示。
圖4 DirectFB Core函數(shù)
圖5 硬件加速函數(shù)列表
其中,基于BCM7241硬件平臺2D圖形引擎實現(xiàn)的函數(shù)有:繪制矩形函數(shù)bcmnexus_gfxDrawRectangle、填充矩形函數(shù)bcmnexus_gfxFillRectangle、疊加函數(shù)bcmnexus_gfxBlit及拉伸疊加函數(shù)bcmnexus_gfxStretchBlit。
為了測試移植后的圖形庫的性能采用DirectFB官方加速測試程序df_dok,主要針對圖形各種效果的混合功能進(jìn)行了測試。未開啟硬件加速,測試數(shù)據(jù)如圖6所示:
圖6 不開啟硬件加速測試
開啟硬件加速,測試數(shù)據(jù)如圖7所示:
圖7 開啟硬件加速測試
通過圖6、圖7測試數(shù)據(jù)對比可以看出,采用DirectFB硬件加速可以大幅度提升2D性能。
基于BCM7241平臺的DirectFB圖形引擎移植可實現(xiàn)圖形用戶界面快速響應(yīng),用戶界面場景切換流暢,與移植DirectFB圖形引擎之前相比系統(tǒng)的性能顯著提升;它充分利用了圖形引擎加速器的加速功能,把大部分?jǐn)?shù)據(jù)處理交由圖形引擎處理,極大地減輕了CPU處理數(shù)據(jù)的負(fù)擔(dān),提高了嵌入式系統(tǒng)的圖形用戶界面性能。目前,該設(shè)計已應(yīng)用到數(shù)字標(biāo)牌嵌入式終端系統(tǒng)上,極大地提高了系統(tǒng)圖形用戶界面性能,給用戶帶來很好的交互體驗。
[1]劉小雙,李建平,鄭志國.DirectFB圖形加速在嵌入式系統(tǒng)中的應(yīng)用[J].單片機與嵌入式系統(tǒng)應(yīng)用,2009.
[2]吳文良.一種適合嵌入式系統(tǒng)的圖形庫DirectFB[J].硅谷,2010.
[3](加)亞荷毛爾等,秦云川.改編構(gòu)建嵌入式Linux系統(tǒng)(第二版)[M].中國電力出版社,2011.
[4][英]Neil Matthew Richard Stones著.Linux程序設(shè)計(第4版) [M],2010.
[5]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M],2008.
[6][英]Neil Matthew Richard Stones.Linux程序設(shè)計[M].人民郵電出版社,2010.
[7]文全剛.嵌入式Linux操作系統(tǒng)原理與應(yīng)用[M].北京航空航天大學(xué)出版社,2011.
[8][德]Michael Kerrisk.Linux/UNIX系統(tǒng)編程手冊[M].孫劍等譯.人民郵電出版社,2014.
Research on the DirectFB Graphics Engine Transplant Based on BCM7241 Platform
Liang Wensen1,2
(1.College of Physics and Information Engineering,Fuzhou University,Fuzhou 350116,Fujian; 2.Fujian Star-net Communication Co.,Ltd,Fuzhou 350001,Fujian)
This paper describes in detail how to implement the DirectFB transplantation on BCM7241 hardware platform of the graphics engine hardware acceleration;and gets the promotion in the performance of the system after the transplantation and compares with the performance before transplantation,illustrating the function of DirectFB in optimizing BCM7241 hardware platform GUI performance.
GUI;DirectFB;BCM7241;implanting;graphics engine
TP393
:A
:1008-66609(2015)04-0053-03
梁文森,男,福建泉州人,本科,軟件工程師,研究方向:嵌入式系統(tǒng)設(shè)計。