王 凱
(南京航空航天大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,江蘇 南京 210016)
基于Qt/Embedded的嵌入式GUI顯示架構(gòu)實現(xiàn)
王 凱
(南京航空航天大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,江蘇 南京 210016)
嵌入式操作系統(tǒng)VxWorks原有的圖形支持WindML對于開發(fā)高級GUI圖形應(yīng)用比較困難,WindML不支持可視化的圖形界面開發(fā),也沒有大量的圖形控件供開發(fā)者使用。通過對Qt/Embedded的圖形驅(qū)動架構(gòu)和Qt/Embedded的服務(wù)器/客戶端架構(gòu)的研究,以及對VxWorks下的圖形庫WindML的顯示體系結(jié)構(gòu)和圖形驅(qū)動支持能力的分析,提出了一個VxWorks下的基于Qt/Embedded的GUI顯示架構(gòu)。該顯示架構(gòu)通過引入Qt/Embedded嵌入式支持層,將Qt/Embedded庫內(nèi)幀緩沖驅(qū)動支持類和嵌入式系統(tǒng)VxWorks圖形支持庫WindML融合在一起,實現(xiàn)了WindML在源碼層級對Qt/Embedded庫的支持。給出了Qt/Embedded嵌入式圖形顯示支持的具體實現(xiàn)方法,通過修改Qt/Embedded庫的VxWorks圖形顯示支持部分的源代碼,使用WindML API獲取到了上層Qt幀緩沖驅(qū)動需要的寬度、高度、像素格式、幀緩沖地址等重要信息,實現(xiàn)了圖形顯示設(shè)備的打開,注冊以及訪問功能,建立了基于Qt/Embedded的GUI顯示系統(tǒng)。
Qt/Embedded;嵌入式系統(tǒng);VxWorks;圖形用戶界面
VxWorks操作系統(tǒng)是美國的WindRiver公司于1983年設(shè)計開發(fā)的一種嵌入式實時操作系統(tǒng)(RTOS),是嵌入式開發(fā)環(huán)境的關(guān)鍵組成部分。VxWorks系統(tǒng)擁有良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,以其良好的可靠性和卓越的實時性在軍事、通信、航空、航天等實時性要求極高的領(lǐng)域中應(yīng)用廣泛[1]。近年來,嵌入式領(lǐng)域圖形界面得到了越來越廣泛的應(yīng)用,為用戶提供一個友好的人機交互界面已成為嵌入式開發(fā)的一個重要組成部分。隨著嵌入式設(shè)備硬件的飛速發(fā)展,嵌入式領(lǐng)域圖形GUI技術(shù)已經(jīng)日趨成熟,用戶對于嵌入式設(shè)備人機交互的要求也越來越高,人們需要的不是晦澀難明的字符界面,而是直觀,操作邏輯簡單,功能強大的圖形GUI交互功能。
Qt/Embedded是Trolltech公司推出的一個跨平臺的C++圖形用戶界面應(yīng)用程序框架。它給程序開發(fā)者提供了建立圖形用戶界面所需的所有功能[2]。Qt/Embedded庫是完全面向?qū)ο蟮?,很容易擴展,并且允許真正的組件編程。Qt/Embedded庫是一套開源的C++圖形用戶界面庫[3],擁有種類豐富的圖形對象可供開發(fā)者使用,采用名為signal/slot信號槽的事件信號傳遞機制。它擁有跨平臺的集成開發(fā)環(huán)境Qt Creator,對于開發(fā)者來說,開發(fā)難度低,開發(fā)環(huán)境友好。同時,它擁有面向嵌入式系統(tǒng)的版本,豐富的控件資源以及良好的可移植性,完全能夠滿足用戶對GUI界面的需要[4]。通過分析Qt/Embedded庫和VxWorks圖形支持庫WindML的體系結(jié)構(gòu)、源碼,提出了一種新的基于Qt/Embedded庫的VxWorks下的圖形支持架構(gòu)。在該架構(gòu)中,增加了VxWorks圖形支持庫WindML的支持,針對在嵌入式系統(tǒng)VxWorks下移植和使用Qt/Embedded庫的問題,進(jìn)行了深入研究。
1.1 Qt圖形驅(qū)動架構(gòu)
Qt/Embedded庫是Qt圖形界面庫的嵌入式版本,為了適應(yīng)嵌入式操作系統(tǒng)環(huán)境,進(jìn)行了許多改動和調(diào)整,它在構(gòu)建GUI環(huán)境時放棄使用原來的X Window體系,因此也就不需要使用較大的Xlib庫,所以內(nèi)存占用十分小,能夠適應(yīng)嵌入式開發(fā)的需求。在放棄了X Window體系之后,Qt/Embedded庫底層使用幀緩沖體系作為底層圖形接口[5],并使用輸入事件作為具體的輸入設(shè)備的抽象,比如keyboard和mouse輸入事件等;在上層,Qt/Embedded庫繼續(xù)使用原本的Qt架構(gòu),從而保證用戶使用的便利性和一致性,并能夠與X Window系統(tǒng)下的程序部分兼容,使得用戶便于進(jìn)行程序移植[6]。圖1給出了Qt/Embedded庫的軟件架構(gòu)。
Qt/Embedded庫的軟件總體架構(gòu)可分為以下三層:
(1)上層控件層:直接提供用戶使用的GUI控件,給用戶界面開發(fā)提供了基于widget的GUI開發(fā)控件。
(2)上層圖形層:該層是低級別的繪圖層,提供了對幀緩沖的繪圖操作,在這一層中,需要獲得幀緩沖驅(qū)動體系所需的具體硬件信息,從而為下一層驅(qū)動提供支持,與此同時,完成對底層幀緩沖驅(qū)動圖形操作的抽象,供給上層使用。
(3)圖形引擎和事件驅(qū)動層:在這一層中直接進(jìn)行對底層幀緩沖驅(qū)動的訪問,并將具體的輸入設(shè)備抽象為事件。
圖形幀緩沖(Framebuffer)體系架構(gòu)是Qt/Embedded圖形引擎的基礎(chǔ),F(xiàn)ramebuffer驅(qū)動最重要的功能就是給用戶提供一個進(jìn)程空間映射到實際物理顯示內(nèi)存的接口,該接口通過系統(tǒng)調(diào)用mmap來實現(xiàn)[7-8],具體原理如下:在幀緩沖體系中,顯示硬件設(shè)備被抽象為幀緩沖區(qū),從開發(fā)者的角度看,向幀緩沖寫入指定格式的數(shù)據(jù)即是向屏幕輸出內(nèi)容,整個幀緩沖就對應(yīng)屏幕上圖像的一幀。通過不斷向Framebuffer中寫入數(shù)據(jù),顯示控制器就自動地從Framebuffer中取數(shù)據(jù)并顯示出來。在VxWorks下的GUI顯示體系結(jié)構(gòu)中,幀緩沖位于上層GUI庫和底層具體的顯示硬件設(shè)備之間,目的是為了屏蔽各種顯示硬件之間不同的操作[9]。這種圖形幀緩沖體系結(jié)構(gòu)也獲得了VxWorks系統(tǒng)內(nèi)核的支持,能夠應(yīng)用于VxWorks系統(tǒng)上。
1.2 Qt/Embedded的客戶端/服務(wù)器架構(gòu)
Qt/Embedded框架依然采用了客戶端/服務(wù)器的架構(gòu),所以,所有基于Qt/Embedded的用戶程序運行前必須連接到Qt/Embedded服務(wù)器。在服務(wù)器端,Qt/Embedded對鍵盤、鼠標(biāo)、屏幕等輸入輸出設(shè)備進(jìn)行管理,同時也需要對各個客戶端創(chuàng)建的窗口進(jìn)行管理,處理窗口的創(chuàng)建與銷毀、窗口的重疊與移動、窗口焦點的轉(zhuǎn)換等操作??蛻舳酥匾墓ぷ魇翘幚矸?wù)器端發(fā)送的圖形事件,在繪制完畢后通知服務(wù)器端并由服務(wù)器端顯示??蛻舳说钠渌ぷ鬟€包括處理窗口內(nèi)部GUI控件的管理工作,繪制Widget,對網(wǎng)絡(luò)訪問進(jìn)行控制,處理文件系統(tǒng)的讀寫操作,等等。Qt/Embedded的客戶端/服務(wù)器架構(gòu)如圖2所示。
由于Qt/Embedded庫為了適應(yīng)嵌入式平臺的硬件特點,做了許多兼容工作,并對Server端進(jìn)行了簡化,從而使得Qt/Embedded庫移植的困難程度大大降低,只需要實現(xiàn)鍵盤、鼠標(biāo)和屏幕顯示驅(qū)動,就能實現(xiàn)Qt/Embedded的移植。
從靈活性和節(jié)省資源的角度考慮,Qt/Embedded的Server端并不是一個獨立的進(jìn)程,而是包含在嵌入式系統(tǒng)下第一個啟動的Qt/Embedded進(jìn)程內(nèi);從開發(fā)者的角度來說,它和普通的Client端進(jìn)程表現(xiàn)相同,但這個進(jìn)程控制著對所有輸入輸出設(shè)備的訪問。
圖2 Qt/Embedded的客戶端/服務(wù)器架構(gòu)
WindML(Wind Media Library)是嵌入式操作系統(tǒng)VxWorks下的多媒體庫[10],它提供基本的圖形、視頻、音頻開發(fā)接口供VxWorks下的開發(fā)者使用。WindML庫提供了一套完整的多媒體設(shè)備驅(qū)動開發(fā)框架(見圖3),同時附帶了一系列用來處理輸入輸出設(shè)備和過程事件的工具。
圖3 WindML多媒體開發(fā)組件框架
WindML中共有2個子組件:軟件開發(fā)工具包(SDK)和驅(qū)動開發(fā)工具包(DDK)。
SDK用于開發(fā)上層應(yīng)用,它提供輸入輸出設(shè)備、字體、音頻和圖形的API集合,使得開發(fā)者可以編寫面向硬件透明的代碼,并在不同的硬件平臺下測試和運行。
DDK用于開發(fā)底層對應(yīng)特定硬件的驅(qū)動程序。在DDK中,包含許多通用硬件的驅(qū)動程序模板,從而使得開發(fā)者可以快速開發(fā)出特定驅(qū)動的API函數(shù),同時,DDK為開發(fā)者提供了可定制性和可擴展性。
在VxWorks下,由WindML為Qt/Embedded庫提供幀緩沖驅(qū)動的嵌入式支持。WindML圖形驅(qū)動支持主要通過2D應(yīng)用層、通用圖形庫和圖形設(shè)備驅(qū)動層與圖形硬件進(jìn)行通信[11],WindML圖形驅(qū)動支持體系結(jié)構(gòu)如圖4所示。
圖4 WindML圖形驅(qū)動支持體系結(jié)構(gòu)
其中,2D應(yīng)用層通過通用圖形庫中的UGL圖形接口對圖形設(shè)備驅(qū)動(ugl_ugi_driver結(jié)構(gòu))進(jìn)行訪問。驅(qū)動程序主要提供符合上層UGL圖形調(diào)用接口并能驅(qū)動顯卡硬件的一些接口函數(shù)[12]。ugl_ugi_driver結(jié)構(gòu)如下所示:
typedef struct ugl_ugi_driver * UGL DEVICE ID;
typedef struct ugl_ugi_driver{
/*數(shù)據(jù)成員*/
UGI_MODE *pMode; /*顯示模式*/
UGI_PAGE *pPageZero; /*第一個顯示頁面地址*/
void * extension; /*可選的擴展驅(qū)動部分*/
/*通用函數(shù)*/
UGI_STATUS(*info)(struct ugl_ugi_driver * pDriver,
UGI_INFO_REQinfoRequest,void * info);
UGL STATUS(*destroy)(struct ugl_ugi_driver *
pDriver);
/*支持的模式*/
UGL STATUS(*modeSet)(struct ugl_ugl_driver *
pDriver,UGL_MODE * pMode);
……
}
VxWorks下任何顯卡驅(qū)動都是將主要功能函數(shù),如模式設(shè)置、公用畫點、畫線等圖形函數(shù)的函數(shù)指針注冊到UGL_DEVICE_ID結(jié)構(gòu)體中,因此,雖然底層硬件不同導(dǎo)致函數(shù)功能實現(xiàn)方式不同,但面向上層時的函數(shù)接口保持一致性,函數(shù)的名稱和參數(shù)都是相同的。
3.1 VxWorks下的Qt/Embedded架構(gòu)
通過Qt/Embedded的圖形引擎類提供給Framebuffer設(shè)備的支持和WindML DDK提供的API集合支持,可以提出一種自上而下的嵌入式實時系統(tǒng)VxWorks下的GUI顯示體系結(jié)構(gòu),如圖5所示。
從圖5可以看出,Qt幀緩沖驅(qū)動依賴于Qt/Embedded嵌入式支持,Qt/Embedded嵌入式支持又是依靠WindML DDK函數(shù)與底層VxWorks操作系統(tǒng)進(jìn)行通信。通過關(guān)鍵部分Qt幀緩沖驅(qū)動和Qt/Embedded嵌入式支持,構(gòu)建起VxWorks下的GUI顯示體系結(jié)構(gòu)。
圖5 VxWorks下的Qt/Embedded架構(gòu)
Qt幀緩沖驅(qū)動以類的形式存在于QtGui源代碼中,該類繼承自QScreen,通過實現(xiàn)這個類的具體功能代碼,使得Qt中的QWSServer圖形事件服務(wù)高效而穩(wěn)定的運行。在實現(xiàn)功能的過程中,使用WindML DDK函數(shù)優(yōu)化幀緩沖驅(qū)動獲得硬件相關(guān)信息的過程(比如屏幕分辨率、緩沖地址等),快速而有效地完成幀緩沖驅(qū)動作為上層應(yīng)用和底層顯示設(shè)備之間抽象層的功能。同時,通過對圖5中Qt/Embedded嵌入式支持中間層的修改,實現(xiàn)WindML DDK對Qt幀緩沖驅(qū)動的功能支持。
3.2 Qt/Embedded嵌入式支持實現(xiàn)
VxWorks下構(gòu)建一個完整的GUI顯示體系結(jié)構(gòu)需要從上層界面到底層系統(tǒng)的完整支持。上層準(zhǔn)備使用Qt/Embedded圖形引擎,它是基于C++類庫實現(xiàn)的,Qt/Embedded類庫封裝了適應(yīng)不同操作系統(tǒng)的訪問細(xì)節(jié),能夠跨平臺實現(xiàn)GUI的顯示功能。Qt/Embedded庫對目標(biāo)系統(tǒng)的要求是:只要這個系統(tǒng)有一個線性地址的緩沖幀并支持C++的編譯器[13]。它通過自帶的幀緩沖驅(qū)動與底層操作系統(tǒng)進(jìn)行通信聯(lián)系。VxWorks系統(tǒng)本身支持GUN C++的編譯[14],同時該系統(tǒng)的顯示驅(qū)動模式支持幀緩沖驅(qū)動抽象的工作方式,通過幀緩沖這個橋梁,Qt/Embedded庫可以很好地與VxWorks系統(tǒng)結(jié)合在一起。
Qt/Embedded中,QScreem類是抽象出底層顯示設(shè)備的基類,其中聲明了對底層顯示設(shè)備的基本描述和操作方式,Qt/Embedded庫對具體的顯示設(shè)備,如VxWorks Framebuffer做的抽象類接口都是繼承并重載基類中的函數(shù)來實現(xiàn)。Qt/Embedded庫幀緩沖驅(qū)動的實現(xiàn)類為文件qscreenvxworksfb_qws.cpp中的QvxWorksFbScreen類,下面給出qscreenvxworksfb_qws.cpp文件中的Qt/Embedded幀緩沖的主要代碼:
bool QVxWorksFbScreen::connect(const QString &)
{
if(!vxDisplayOpen()) return false;
//調(diào)用設(shè)備打開主函數(shù),失敗則返回
int format;
vxDisplayGet(&w,&h,&d,&format,&data,&lstep);
//獲取顯示設(shè)備信息
dw=w;
dh=h;
mapsize=size=h*lstep;
……(略)
QWSServer::setDefaultMouse("vxworks");
QWSServer::setDefaultKeyboard("vxworks");
//設(shè)置鼠標(biāo)鍵盤
return true;
}
從代碼中可以看出,Qt/Embedded幀緩沖驅(qū)動的功能主要通過vxDisplayOpen和vxDisplayGet兩個函數(shù)來實現(xiàn)。vxDisplayOpen實現(xiàn)打開顯卡設(shè)備并向VxWorks系統(tǒng)注冊該設(shè)備,獲取設(shè)備資源;vxDisplayGet實現(xiàn)獲取顯示的具體信息,比如LCD屏幕的寬度、高度等相關(guān)信息,同時,給基類QScreen的成員變量data賦值,該變量保存了在Qt/Embedded嵌入式支持層獲取的幀緩沖映射地址。在Qt/Embedded幀緩沖驅(qū)動代碼的最后,向QWSServer圖形事件服務(wù)注冊了使用的輸入設(shè)備驅(qū)動,在這里,鍵盤鼠標(biāo)都使用了VxWorks系統(tǒng)驅(qū)動。
如上所述,Qt/Embedded幀緩沖驅(qū)動通過調(diào)用vxDisplayOpen和vxDisplayGet兩個函數(shù)來獲得Qt/Embedded嵌入式支持層的支持,這兩個函數(shù)具體實現(xiàn)在qvxworksdisplay.c文件中,vxDisplayOpen函數(shù)主要代碼如下:
int vxDisplayOpen(void)
{
char *pDisplayName=UGL_NULL;
UGL_UINT32displayNumber;
UGL_STATUS status;
UGL_REG_DATA *pRegistryData;
UGL_FB_INFOfbInfo;
status=uglDisplayOpen(UGL_NULL,&pDisplayName,&displayNumber);
//使用UGL庫函數(shù)根據(jù)默認(rèn)名打開顯示設(shè)備
……(略)
pRegistryData=uglRegistryFind(UGL_DISPLAY_TYPE,&displayNumber,0,0);
//使用UGL庫函數(shù)注冊顯示設(shè)備
if(pRegistryData==UGL_NULL)
{
printf("Display not found. ");
uglDisplayClose( UGL_NULL);
return FALSE;
}
vxDisplayId=(UGL_DEVICE_ID) pRegistryData->id;
//顯示設(shè)備注冊成功后,從注冊結(jié)構(gòu)體中提取顯示ID
……(略)
return TRUE;
}
在上述代碼中,通過WindML DDK函數(shù)uglDisplayOpen打開顯示設(shè)備,然后通過調(diào)用uglRegistryFind函數(shù)向VxWorks系統(tǒng)注冊顯示設(shè)備,并通過pRegistryData->id獲得了UGL_DEVICE_ID結(jié)構(gòu)體的相關(guān)信息,該結(jié)構(gòu)體包含了所有的圖形接口信息,并把UGL_DEVICE_ID結(jié)構(gòu)體的信息保存在vxDisplayId變量中。
在vxDisplayGet函數(shù)中,使用vxDisplayId變量,調(diào)用WindML DDK的uglInfo函數(shù),獲取到了上層Qt幀緩沖驅(qū)動需要的寬度、高度、像素、像素格式、幀緩沖地址等重要信息,主要代碼如下:
void vxDisplayGet(int *width,int *height,int *bitsPerPixel,int *pixelFormat,unsigned char **data,int *strideBytes)
{
……(略)
uglInfo(vxDisplayId,UGL_MODE_INFO_REQ,&modeInfo);
//根據(jù)顯示設(shè)備ID,獲取顯示相關(guān)信息
uglARGBSpecGet(modeInfo.colorFormat, &colorSpec);
//獲取顏色相關(guān)信息
*width=modeInfo.width;
*height=modeInfo.height;
*bitsPerPixel=colorSpec.numBytesPerARGB*8;
*pixelFormat=modeInfo.colorFormat;
……(略)
*data=(unsigned char *)modeInfo.fbAddress;
//通過modeInfo結(jié)構(gòu)體提取幀緩沖地址傳入到Qt類中
……(略)
}
至此,通過對Qt/Embedded內(nèi)部的VxWorks系統(tǒng)支持源代碼的分析和修改,獲取到了Qt幀緩沖驅(qū)動的所有重要硬件信息,完成了幀緩沖驅(qū)動的基本功能,從而實現(xiàn)了Qt/Embedded嵌入式支持層對Qt幀緩沖驅(qū)動層的支持,也實現(xiàn)了對Qt/Embedded在VxWorks系統(tǒng)下的移植。
3.3 Qt/Embedded顯示支持代碼框架結(jié)構(gòu)
在Qt庫的QVxWorksFbScreen類中,通過在connect函數(shù)中調(diào)用的兩個重要函數(shù)vxDisplayGet和vxDisplayOpen,實現(xiàn)了Qt庫與WindML庫UGL庫函數(shù)的結(jié)合,通過UGL庫函數(shù)獲取到了顯示寬度、高度、像素信息等圖形顯示關(guān)鍵參數(shù),同時獲取到了顯示幀緩沖內(nèi)存地址等重要信息,從而實現(xiàn)了Qt/Embedded庫在VxWorks環(huán)境下對顯示設(shè)備的支持。顯示支持代碼框架結(jié)構(gòu)如圖6所示。
圖6 Qt/Embedded顯示支持代碼框架結(jié)構(gòu)圖
最后,在交叉編譯環(huán)境下編譯修改后的Qt/Embedded庫源代碼,生成.so庫文件,即可在VxWorks操作系統(tǒng)環(huán)境下加載使用。
為了實現(xiàn)VxWorks下便捷、易用的圖形GUI系統(tǒng),實現(xiàn)Qt/Embedded庫與VxWorks的完美兼容,在研究分析Qt/Embedded庫的圖形驅(qū)動架構(gòu)和VxWorks系統(tǒng)的圖形顯示體系結(jié)構(gòu)以及在VxWorks下實現(xiàn)圖形GUI原理的基礎(chǔ)上,通過對Qt/Embedded庫幀緩沖驅(qū)動的二次開發(fā)修改,實現(xiàn)了Qt GUI界面在VxWorks下的完美運行。Qt/Embedded延續(xù)了Qt在桌面系統(tǒng)的所有功能,豐富的API接口和基于組件的編程模型使得嵌入式VxWorks系統(tǒng)中的GUI應(yīng)用程序開發(fā)更加便捷。
[1] 向孝龍,陳 欣,李春濤.基于RTW和VxWorks的無人機仿真系統(tǒng)設(shè)計與實現(xiàn)[J].計算機測量與控制,2014,22(4):1291-1293.
[2] 吳燕燕,賀鋒濤.基于ARM9平臺上Qt/Embedded的移植與開發(fā)[J].液晶與顯示,2013,28(2):261-265.
[3] 楊 柳,岳 坤,龐和明,等.Qt/Embedded及嵌入式Linux在智能監(jiān)控系統(tǒng)控制中的應(yīng)用[J].計算機應(yīng)用,2010,30(S1):289-291.
[4] Chen F,Fan X.Embedded system’s performance analysis with RTC and QT[C]//International symposium on advanced parallel processing technologies.Guangzhou,China:[s.n.],2007:569-579.
[5] 連照亮,徐世國.基于Qt/Embedded在嵌入式linux下的應(yīng)用研究[J].微計算機信息,2010,26(17):81-82.
[6] 曾劍元.ARM9平臺上基于Qt/Embedded的嵌入式GUI的研究與實現(xiàn)[D].長春:吉林大學(xué),2010.
[7] Yang L,Sander P V,Lawrence J.Geometry-aware framebuffer level of detail[J].Computer Graphics Forum,2008,27(4):1183-1188.
[8] Mao C,Johnson K M.Fast-switching liquid-crystal-on-silicon microdisplay with framebuffer pixels and surface-mode optically compensated birefringence[J].Optical Engineering,2006,45(12):1269-1278.
[9] 吳子平,徐愛鈞.基于Qt/Embedded的嵌入式GUI的研究與構(gòu)建[J].電腦開發(fā)與應(yīng)用,2012,25(1):13-16.
[10] Battye T G G,Kontogiannis L,Johnson O,et al.iMOSFLM:a new graphical interface for diffraction-image processing with MOSFLM[J].Acta Crystallographica,2011,67(4):271-281.
[11] 王 璐,官 琴.基于PowerPC嵌入式平臺的WindML圖形驅(qū)動設(shè)計[J].兵工自動化,2013,32(5):95-96.
[12] 張繼偉.基于WindML環(huán)境下的顯卡驅(qū)動設(shè)計[J].現(xiàn)代電子技術(shù),2010,33(14):78-80.
[13] 李 鴿.基于VxWorks WindML組件的SM502顯卡驅(qū)動開發(fā)[D].西安:西安電子科技大學(xué),2014.
[14] 謝周標(biāo).嵌入式二維圖形硬件加速引擎研究與設(shè)計[D].長沙:湖南大學(xué),2013.
Implementation of Embedded GUI Display Architecture Based on Qt/Embedded
WANG Kai
(College of Computer Science and Technology,Nanjing University of Aeronautics & Astronautics,Nanjing 210016,China)
It is very difficult for the development of advanced GUI graphics applications that the original graphics support WindML of embedded operating system,VxWorks.WindML does not support the visual graphical interface development and can’t provide large number of graphical controls for developers to use.Through the research on the Qt/Embedded graphics driver architecture and Qt/Embedded server/client architecture,as well as the analysis of the display architecture and graphics drivers support capabilities of the WindML graphics library under VxWorks,a VxWorks GUI with QT/Embedded display architecture has been implemented which can display architecture by introducing the embedded QT/embedded support layer.Combined both QT/embedded database frame buffer drive support and embedded system VxWorks graphics library WindML,the WindML support to QT/embedded library at the source code level has been achieved.The concrete realization method of Qt/Embedded embedded support has been presented.By modifying the source code part of Qt/Embedded Library that supported graphics display and by using WindML API to get the important information such as width,height,pixel format,frame buffer address that is needed by the upper Qt/Embedded layer,opening,registration and accessing to the graphics display device have been achieved and thus GUI display system with Qt/Embedded has been realized.
Qt/Embedded;embedded system;VxWorks;graphical user interface
2016-06-01
2016-09-08 網(wǎng)絡(luò)出版時間:2017-03-13
國防科工局“十三五”重點基礎(chǔ)科研項目(JCKY2016206B001)
王 凱(1984-),男,碩士研究生,研究方向為軟件體系結(jié)構(gòu)。
http://kns.cnki.net/kcms/detail/61.1450.TP.20170313.1546.070.html
TP311
A
1673-629X(2017)05-0144-05
10.3969/j.issn.1673-629X.2017.05.030