<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > DirectFB圖形加速在嵌入式系統中的應用

DirectFB圖形加速在嵌入式系統中的應用

作者: 時(shí)間:2009-03-12 來(lái)源:網(wǎng)絡(luò ) 收藏
引 言
GUI中需要實(shí)現多功能,包括繪制以及拷貝等。其中的許多功能需要進(jìn)行大量的數據傳遞(如拷貝),或者需要進(jìn)行大量的數值運算(如畫(huà)樣條曲線(xiàn))。如果這些功能都由純軟件實(shí)現的話(huà),會(huì )占用大量的CPU時(shí)間并且需要傳遞大量的數據,從而影響了圖形性能。許多顯卡芯片帶有圖形處理器,能夠從硬件上實(shí)現一部分圖形功能。支持硬件的圖形庫可以通過(guò)圖形處理器實(shí)現這些圖形功能,從而減輕了CPU的負擔并減少了數據在總線(xiàn)上的傳輸時(shí)間,提高了圖形性能。
本文就如何實(shí)現的圖形功能做了詳細的介紹,并將實(shí)現之后在性能上得到的改進(jìn)與實(shí)現之前做比較,說(shuō)明在優(yōu)化GUI上的作用。

1 體系結構
1.1 DirectFB簡(jiǎn)介

DirectFB項目是由德國Convergence公司推動(dòng)的Open source計劃的一部分,它是專(zhuān)門(mén)為滿(mǎn)足設備要求而開(kāi)發(fā)的小巧、強大、靈活和易于使用的圖形,并且試圖成為一個(gè)建構于Linux Framebuffer Device之上的新圖形標準。它在FrameBuffer的基礎上提供了圖形、輸入設備處理提取、透明窗口和多重顯示層的功能,能夠對嵌入式GUI有較好的支持。與那些通用的嵌入式GUI系統相比,它具有非常簡(jiǎn)潔、高效的體系結構和硬件圖形加速功能。
1.2 DirectFB體系結構
(1)DirectFB訪(fǎng)問(wèn)硬件顯卡
DirectFB依賴(lài)已有的內核接口即幀緩沖設備(/dev/fb)訪(fǎng)問(wèn)圖形處理器,也就是說(shuō)DireetFB需要一個(gè)正在工作的幀緩沖驅動(dòng)。Linux內核有專(zhuān)門(mén)的幀緩沖驅動(dòng)支持某些圖形處理器。對于不支持的圖形處理器,內核提供VE―SA幀緩沖(這種幀緩沖有一些限制)。DirectFB利用幀緩沖設備做如下工作:
◆設置顯卡工作模式(分辨率,顏色深度,時(shí)序)
◆映射顯存
◆改變幀緩沖視口(針對雙緩沖)
如果某種顯卡被DirecFB支持并且在Linux內核中也有這種圖形處理器的幀緩沖驅動(dòng),DirectFB利用幀緩沖設備做如下額外的工作:
◆映射顯存IO端口
◆關(guān)閉幀緩沖驅動(dòng)中自帶的加速功能
針對具體的圖形操作(例如圖片拷貝),DirectFB加速驅動(dòng)訪(fǎng)問(wèn)顯存映射的圖形處理器I/O端口向圖形處理器提交命令。也就是說(shuō)真正的硬件加速完全是在用戶(hù)空間實(shí)現。這樣DirectFB就可以對它支持的圖形處理器提供最大限度的硬件圖形加速。上層APl支持DirectFB的有:XdirectFB、DirectFBGL、GTK+、DFBTerm、DFBSee、DFBPoint、MythTV、Qt on DirectFB、SDL等。
(2)DirectFB訪(fǎng)問(wèn)輸入設備
DirectFB使用Linux內核提供的標準設備接口訪(fǎng)問(wèn)輸入設備,而不是直接訪(fǎng)問(wèn)輸入硬件。具體的結構如圖1所示。

本文引用地址:http://dyxdggzs.com/article/152590.htm

2 DirectFB加速驅動(dòng)原理
本節結合筆者的硬件平臺來(lái)說(shuō)明如何實(shí)現DirectFB加速驅動(dòng),筆者所用的平臺是MPC8540,圖形處理器是Fujitsu MB86296。要實(shí)現DirectFB加速驅動(dòng),需要有以下幾個(gè)模塊:系統、圖形加速器、屏幕及圖層。其中系統是指幀緩沖和硬件管理。DirectFB支持的系統有dev/fb、osx、sdl、xll、/dev/mem等。系統可以在DirectFB程序配置文件directfbrc中配置。屏幕是指輸出設備,如LCD。圖層代表獨立的圖像緩沖區,一般是在顯示的時(shí)候自動(dòng)由硬件融合,硬件一般采用alpha技術(shù)融合。圖層數量的多少取決于圖形處理器,一般復雜的圖形處理器都支持多層顯示。一層內容的改變不影響其他層的內容。
DirectFB驅動(dòng)的幾點(diǎn)基本要素是:
①必須賦給驅動(dòng)一個(gè)唯一的名字并且用如下宏實(shí)現:DFB_GRAPHICS_DRIVER(MB86296)。
②上面的宏需要定義6個(gè)函數供DirectFB Core使用,即初始化/關(guān)閉驅動(dòng)、初始化/關(guān)閉加速重獲驅動(dòng)元數據。
③在驅動(dòng)中需要實(shí)現的函數有以下6個(gè)。
a)static int dnver_probe(GraphicsDevice*device);
如果系統支持某種硬件此函數應該返回非零值,它用DirectFB Core來(lái)探測哪個(gè)驅動(dòng)支持系統硬件。

b)static void driver_get_info(GraphicsDevice *device, GraphicsDriverInfo *info);

些函數用來(lái)設驅動(dòng)信息。

c)static DFBResult driver_init_driver (GraphicsDevice *device, GraphicsDeviceFuncs *funcs, void *driver_data, void *device_data, CoreDFB *core);

初始化驅動(dòng)。在成功獲得所有需要的資源后驅動(dòng)應該注冊屏幕和層。同時(shí)也需要通過(guò)funcs返回硬件加速函數列表。實(shí)現方式如下所示。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>