專利名稱:一種單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式平臺(tái)領(lǐng)域,特別涉及一種單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法。
背景技術(shù):
DirectFB是專門為滿足嵌入式設(shè)備要求而開發(fā)的小巧、強(qiáng)大、靈活和易于使用的圖形系統(tǒng),并且試圖成為一個(gè)建構(gòu)于Linux Framebuffer Device之上的新圖形標(biāo)準(zhǔn)。它在FrameBuffer的基礎(chǔ)上提供了圖形加速、輸入設(shè)備處理提取、透明窗口和多重顯示層的功能,能夠?qū)η度胧较到y(tǒng)GUI有較好的支持。與那些通用的嵌入式GUI系統(tǒng)相比,它具有非常簡(jiǎn)潔、高效的體系結(jié)構(gòu)和硬件圖形加速功能。目前國(guó)內(nèi)外大多數(shù)嵌入式平臺(tái)均已支持DirectFB 圖形系統(tǒng),如 sigma design, broadcom, NXP,華為的海思等。DirectFB主要有兩種工作方式單進(jìn)程和多進(jìn)程。在單進(jìn)程方式下,使用DirectFB的進(jìn)程首先創(chuàng)建DirectFB,退出時(shí)釋放DirectFB,在釋放DirectFB時(shí)平臺(tái)會(huì)清除顯存,因此屏幕上會(huì)出現(xiàn)黑屏。而在多進(jìn)程工作方式下,采用Master/Slave的方式,通過Iinux內(nèi)核的fusion模塊進(jìn)行通信,每個(gè)進(jìn)程均可以單獨(dú)使用DirectFB資源,用于顯示各自的UI,對(duì)于嵌入式平臺(tái)上多業(yè)務(wù)的同時(shí)運(yùn)行提供了強(qiáng)力的支撐。但由于平臺(tái)資源等各方面的限制,并非所有的嵌入式平臺(tái)都支持DirectFB的多進(jìn)程運(yùn)行。單進(jìn)程DirectFB對(duì)于支持單一業(yè)務(wù)的運(yùn)行是足夠的,系統(tǒng)啟動(dòng)后運(yùn)行該應(yīng)用,該應(yīng)用直至關(guān)機(jī)時(shí)才退出,因此該應(yīng)用只需在啟動(dòng)時(shí)初始化DirectFB資源,退出時(shí)釋放即可。但在嵌入式平臺(tái)上同時(shí)運(yùn)行多個(gè)業(yè)務(wù)已經(jīng)成為一種趨勢(shì),每個(gè)業(yè)務(wù)都需要調(diào)用DirectFB來顯示自身的W,為了避免DirectFB資源的釋放申請(qǐng)導(dǎo)致切換時(shí)出現(xiàn)黑屏、等待時(shí)間長(zhǎng)等問題,現(xiàn)有技術(shù)采用把多個(gè)業(yè)務(wù)集成到同一進(jìn)程中,對(duì)軟件的集成開發(fā),穩(wěn)定運(yùn)行帶來了極大的挑戰(zhàn)。因此這種措施在多進(jìn)程共享DirectFB資源為避免DirectFB資源的頻繁釋放申請(qǐng)導(dǎo)致切換時(shí)出現(xiàn)黑屏、等待時(shí)間長(zhǎng)等問題時(shí)并沒有實(shí)用價(jià)值。
發(fā)明內(nèi)容
本發(fā)明的目的在于,為了更好地支持單進(jìn)程DirectFB嵌入式平臺(tái)上運(yùn)行多業(yè)務(wù),本發(fā)明提出了一種單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法。為了達(dá)到上述目的,本發(fā)明提供一種單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法,該方法用于在單進(jìn)程DirectFB嵌入式平臺(tái)上支持多業(yè)務(wù)時(shí),每個(gè)業(yè)務(wù)都可以單獨(dú)使用DirectFB,所述方法包含如下步驟步驟1,用于后臺(tái)業(yè)務(wù)管理進(jìn)程初始化DirectFB資源的步驟。步驟2,用于各個(gè)子進(jìn)程向所述后臺(tái)業(yè)務(wù)管理進(jìn)程申請(qǐng)獲取DirectFB資源后才能使用DirectFB資源的步驟。其中,所述后臺(tái)業(yè)務(wù)管理進(jìn)程在系統(tǒng)啟動(dòng)后創(chuàng)建并一直處于運(yùn)行狀態(tài),所述業(yè)務(wù)管理進(jìn)程負(fù)責(zé)管理子進(jìn)程業(yè)務(wù)間切換,DirectFB資源的使用與分配。
可選的,所述步驟I具體包含如下步驟系統(tǒng)啟動(dòng)后創(chuàng)建后臺(tái)業(yè)務(wù)管理進(jìn)程,該進(jìn)程用于初始化DirectFB資源并創(chuàng)建DirectFB句柄??蛇x的,所述步驟2進(jìn)一步包含如下步驟步驟2-1,用于為新創(chuàng)建的子進(jìn)程分配DirectFB資源的步驟;步驟2-2,用于當(dāng)運(yùn)行中的兩個(gè)子進(jìn)程狀態(tài)切換時(shí)再分配DirectFB資源的步驟。優(yōu)化的,所述步驟2-1為當(dāng)運(yùn)行新業(yè)務(wù)時(shí),后臺(tái)業(yè)務(wù)管理進(jìn)程創(chuàng)建子進(jìn)程,并將創(chuàng)建的DirectFB句柄傳遞給子進(jìn)程,完成子進(jìn)程的圖形顯示;其中,所述子進(jìn)程在創(chuàng)建時(shí)完全繼承后臺(tái)業(yè)務(wù)管理進(jìn)程的內(nèi)存和環(huán)境變量資源。進(jìn)一步優(yōu)化的,所述步驟2-2為當(dāng)從子進(jìn)程A切換至子進(jìn)程B時(shí),子進(jìn)程A釋放DirectFB資源的使用,轉(zhuǎn)至后臺(tái),并將其當(dāng)前顯示的n以像素的方式保存至內(nèi)存,當(dāng)需要再次運(yùn)行子進(jìn)程A時(shí),只需恢復(fù)對(duì)DirectFB資源的使用,并將其保存的UI內(nèi)容顯示。采用上述的技術(shù)方案后,本發(fā)明具有以下優(yōu)點(diǎn)I、本發(fā)明通過在系統(tǒng)啟動(dòng)創(chuàng)建后臺(tái)業(yè)務(wù)管理進(jìn)程,其負(fù)責(zé)對(duì)DirectFB資源完成基本的初始化,每個(gè)業(yè)務(wù)子進(jìn)程需要使用DirectFB時(shí)不再重新初始化DirectFB資源,而是向父進(jìn)程(即后臺(tái)業(yè)務(wù)管理進(jìn)程)申請(qǐng),當(dāng)使用完畢后將DirectFB資源歸還給父進(jìn)程,實(shí)現(xiàn)了在嵌入式平臺(tái)上單進(jìn)程DirectFB的多進(jìn)程使用;2、通過采用本發(fā)明的方法,在僅支持單進(jìn)程DirectFB的嵌入式平臺(tái)上,每個(gè)業(yè)務(wù)子進(jìn)程都可以獨(dú)立的使用DirectFB資源,無需業(yè)務(wù)間集成,業(yè)務(wù)間沒有交叉,加快了軟件集成的速度;業(yè)務(wù)切換時(shí)不會(huì)出現(xiàn)由于DirectFB釋放時(shí)導(dǎo)致的黑屏,減少了用戶等待時(shí)間,提聞了用戶體驗(yàn)??傊?,通過本發(fā)明提供的方法每個(gè)業(yè)務(wù)子進(jìn)程可以獨(dú)立使用DirectFB資源,且業(yè)務(wù)間切換流暢,無黑屏現(xiàn)象。
圖I是本發(fā)明的在嵌入式平臺(tái)上單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法的流程圖;圖2是本發(fā)明的方法中業(yè)務(wù)子進(jìn)程如何切換使用DirectFB資源的流程圖;圖3是本發(fā)明的方法中各個(gè)業(yè)務(wù)子進(jìn)程的狀態(tài)轉(zhuǎn)移圖。
具體實(shí)施例方式為了使本發(fā)明的目的、實(shí)現(xiàn)方法和優(yōu)點(diǎn)更加清楚明白,參照附圖,對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說明。本發(fā)明提出一種單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法,包括如下步驟(I)系統(tǒng)啟動(dòng)后首先啟動(dòng)后臺(tái)業(yè)務(wù)管理進(jìn)程,由該進(jìn)程負(fù)責(zé)初始化DirectFB資源;(2)當(dāng)需要運(yùn)行新業(yè)務(wù)時(shí),后臺(tái)管理進(jìn)程首先檢測(cè)是否有前臺(tái)業(yè)務(wù)運(yùn)行,若有則通知前臺(tái)業(yè)務(wù)釋放DirectFB的使用轉(zhuǎn)入后臺(tái)運(yùn)行,然后運(yùn)行新業(yè)務(wù);(3)新啟動(dòng)的業(yè)務(wù)向父進(jìn)程(即后臺(tái)管理進(jìn)程)申請(qǐng)對(duì)DirectFB資源的使用,父進(jìn)程返回事先申請(qǐng)好的DirectFB句柄。(4)子進(jìn)程使用完畢后將DirectFB的使用權(quán)歸還給后臺(tái)管理進(jìn)程。進(jìn)一步地,所述的業(yè)務(wù)子進(jìn)程有三種狀態(tài)前臺(tái),后臺(tái)及退出狀態(tài)。前臺(tái)狀態(tài)是指業(yè)務(wù)子進(jìn)程需要有n顯示,正在占用DirectFB資源;后臺(tái)狀態(tài)是指業(yè)務(wù)子進(jìn)程釋放對(duì)DirectFB資源的占用,不需要n顯示,但處于運(yùn)行狀態(tài);退出狀態(tài)是指業(yè)務(wù)子進(jìn)程未運(yùn)行。當(dāng)后臺(tái)管理進(jìn)程需要運(yùn)行業(yè)務(wù)子進(jìn)程時(shí),首先需要判斷業(yè)務(wù)子進(jìn)程的具體狀態(tài)(I)若業(yè)務(wù)子進(jìn)程處于前臺(tái)狀態(tài)則無需操作;(2)若業(yè)務(wù)子進(jìn)程處于后臺(tái)狀態(tài),則通知其切換至前臺(tái)狀態(tài);(3)若業(yè)務(wù)子進(jìn)程處于退出狀態(tài),則業(yè)務(wù)管理進(jìn)程需要啟動(dòng)子進(jìn)程,并在子進(jìn)程中運(yùn)行新業(yè)務(wù)。進(jìn)一步地,為了保證子進(jìn)程能夠使用父進(jìn)程創(chuàng)建的DirectFB資源,要求子進(jìn)程在創(chuàng)建時(shí)必須完全繼承父進(jìn)程的內(nèi)存和環(huán)境變量等資源,如使用Linux操作系統(tǒng)的fork ()函數(shù)就可以達(dá)到此目的。進(jìn)一步地,為了實(shí)現(xiàn)業(yè)務(wù)間的快速切換,當(dāng)從業(yè)務(wù)A切換至業(yè)務(wù)B時(shí),業(yè)務(wù)A只是釋放DirectFB資源的使用,轉(zhuǎn)至后臺(tái),并將其當(dāng)前顯示的UI以像素的方式保存至內(nèi)存,當(dāng)需要再次運(yùn)行業(yè)務(wù)A時(shí),只需恢復(fù)對(duì)DirectFB資源的使用,并將其保存的UI內(nèi)容顯示。
實(shí)施例圖I為在Linux操作系統(tǒng)平臺(tái)上單進(jìn)程DirectFB如何實(shí)現(xiàn)多進(jìn)程運(yùn)行方法的基本原理圖,單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法包括以下幾個(gè)步驟101)系統(tǒng)啟動(dòng)后,創(chuàng)建后臺(tái)業(yè)務(wù)管理進(jìn)程,該進(jìn)程一直處于運(yùn)行狀態(tài),所述業(yè)務(wù)管理進(jìn)程用以管理各個(gè)業(yè)務(wù)子進(jìn)程,負(fù)責(zé)向個(gè)業(yè)務(wù)子進(jìn)程分發(fā)消息,統(tǒng)計(jì)并維護(hù)各業(yè)務(wù)子進(jìn)程的狀態(tài);102)后臺(tái)業(yè)務(wù)管理進(jìn)程初始化DirectFB資源,為業(yè)務(wù)子進(jìn)程的使用提供資源;103)后臺(tái)業(yè)務(wù)管理進(jìn)程通過fork方式創(chuàng)建子進(jìn)程;104)在子進(jìn)程中通過函數(shù)調(diào)用等方式運(yùn)行新業(yè)務(wù);105)子進(jìn)程向父進(jìn)程申請(qǐng)DirectFB資源的使用,顯示子進(jìn)程運(yùn)行的新業(yè)務(wù)對(duì)應(yīng)的UI。下面以DirectFB的基本接口代碼示例說明后臺(tái)業(yè)務(wù)管理進(jìn)程對(duì)DirectFB資源的初始化過程及業(yè)務(wù)子進(jìn)程如何使用父進(jìn)程(即業(yè)務(wù)管理進(jìn)程)申請(qǐng)的DirectFB資源。后臺(tái)業(yè)務(wù)管理進(jìn)程初始化DirectFB過程示例如下表所示
int gdfb—handler;
DirectFBInit;
DirectFBSetOpti on;
DirectFBCreate(&gdfb)return gdfb—handler;業(yè)務(wù)子進(jìn)程使用DirectFB的過程示例如下表所示int gdfb = (IDirectFB *)get_gdfb_handler();
gdfb ->GetDisplayLayer(gdfb, DLID PRIMARY, &layer );
layer->SetConfiguration( layer, &layer config);其中,get—gdfb—handler函數(shù)為子進(jìn)程向父進(jìn)程(即業(yè)務(wù)管理進(jìn)程)申請(qǐng)DirectFB資源的函數(shù),調(diào)用該函數(shù)可以使子進(jìn)程獲取父進(jìn)程創(chuàng)建的DirectFB資源的句柄。圖2對(duì)本發(fā)明的方法中業(yè)務(wù)子進(jìn)程間如何切換使用DirectFB資源做了詳細(xì)說明,假設(shè)當(dāng)前處于前臺(tái)的業(yè)務(wù)為業(yè)務(wù)A,即業(yè)務(wù)A占用了 DirectFB資源的使用,要切換至業(yè)務(wù)B開始運(yùn)行。主要包括以下幾個(gè)步驟201)后臺(tái)管理進(jìn)程首先通知當(dāng)前正處于前臺(tái)狀態(tài)的業(yè)務(wù)A轉(zhuǎn)入后臺(tái)狀態(tài);202)業(yè)務(wù)A收到后臺(tái)管理進(jìn)程的消息后,釋放其占用的DirectFB資源,將其返回給后臺(tái)管理進(jìn)程,并將其當(dāng)前顯示的n以像素的方式保存至內(nèi)存;203)后臺(tái)管理進(jìn)程等待業(yè)務(wù)A返回的DirectFB資源;204)判斷業(yè)務(wù)B的狀態(tài),若為退出狀態(tài),則轉(zhuǎn)向205;若業(yè)務(wù)B為暫停狀態(tài)(后臺(tái)狀態(tài)),則轉(zhuǎn)向207 ;若為前臺(tái)狀態(tài),則轉(zhuǎn)向209 ;如圖3所示;205)后臺(tái)管理進(jìn)程啟動(dòng)子進(jìn)程;206)在子進(jìn)程中通過調(diào)用業(yè)務(wù)B的接口,運(yùn)行業(yè)務(wù)B ;207)通知業(yè)務(wù)子進(jìn)程從后臺(tái)狀態(tài)切換至前臺(tái)狀態(tài);208)子進(jìn)程向父進(jìn)程申請(qǐng)DirectFB資源的使用,顯示子業(yè)務(wù)對(duì)應(yīng)的W,對(duì)于處于后臺(tái)狀態(tài)的業(yè)務(wù)只需顯示事先保存的內(nèi)存鏡像內(nèi)容;209)業(yè)務(wù)B處于前臺(tái)運(yùn)行狀態(tài)。上述所述的內(nèi)容中,當(dāng)各個(gè)創(chuàng)建業(yè)務(wù)子進(jìn)程與業(yè)務(wù)管理進(jìn)程間通信時(shí)數(shù)據(jù)包的封裝格式如下表所示,該封裝格式包含消息號(hào)、消息長(zhǎng)度、業(yè)務(wù)子進(jìn)程狀態(tài)和子進(jìn)程PID信肩、O
消息號(hào)I消息長(zhǎng)度I業(yè)務(wù)子進(jìn)程狀態(tài)~子進(jìn)程PID以上所述僅為本發(fā)明的一個(gè)具體實(shí)施方式
,并非用于限定本發(fā)明的保護(hù)范圍,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,在不脫離發(fā)明原理的前提下,對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,都不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應(yīng)涵蓋在本發(fā)明的保護(hù)范圍中。
權(quán)利要求
1.一種單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法,該方法用于在單進(jìn)程DirectFB嵌入式平臺(tái)上支持多業(yè)務(wù)時(shí),每個(gè)業(yè)務(wù)都可以單獨(dú)使用DirectFB,所述方法包含如下步驟 步驟1,用于后臺(tái)業(yè)務(wù)管理進(jìn)程初始化DirectFB資源的步驟; 步驟2,用于各個(gè)子進(jìn)程向所述后臺(tái)業(yè)務(wù)管理進(jìn)程申請(qǐng)獲取DirectFB資源后才能使用DirectFB資源的步驟; 其中,所述后臺(tái)業(yè)務(wù)管理進(jìn)程在系統(tǒng)啟動(dòng)后創(chuàng)建并一直處于運(yùn)行狀態(tài),所述業(yè)務(wù)管理進(jìn)程負(fù)責(zé)管理子進(jìn)程業(yè)務(wù)間切換,DirectFB資源的使用與分配。
2.根據(jù)權(quán)利要求I所述的單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法,其特征在于,所述步驟I具體包含如下步驟系統(tǒng)啟動(dòng)后創(chuàng)建后臺(tái)業(yè)務(wù)管理進(jìn)程,該進(jìn)程用于初始化DirectFB資源并創(chuàng)建DirectFB句柄。
3.根據(jù)權(quán)利要求I或2所述的單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法,其特征在于,所述步驟2進(jìn)一步包含如下步驟 步驟2-1,用于為新創(chuàng)建的子進(jìn)程分配DirectFB資源的步驟; 步驟2-2,用于當(dāng)運(yùn)行中的兩個(gè)子進(jìn)程狀態(tài)切換時(shí)再分配DirectFB資源的步驟。
4.根據(jù)權(quán)利要求3所述的單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法,其特征在于,所述步驟2-1為當(dāng)運(yùn)行新業(yè)務(wù)時(shí),后臺(tái)業(yè)務(wù)管理進(jìn)程創(chuàng)建子進(jìn)程,并將創(chuàng)建的DirectFB句柄傳遞給子進(jìn)程,完成子進(jìn)程的圖形顯示; 其中,所述子進(jìn)程在創(chuàng)建時(shí)完全繼承后臺(tái)業(yè)務(wù)管理進(jìn)程的內(nèi)存和環(huán)境變量資源。
5.根據(jù)權(quán)利要求3所述的單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法,其特征在于,所述步驟2-2為 當(dāng)從子進(jìn)程A切換至子進(jìn)程B時(shí),子進(jìn)程A釋放DirectFB資源的使用,轉(zhuǎn)至后臺(tái),并將其當(dāng)前顯示的n以像素的方式保存至內(nèi)存,當(dāng)需要再次運(yùn)行子進(jìn)程A時(shí),只需恢復(fù)對(duì)DirectFB資源的使用,并將其保存的UI內(nèi)容顯示。
6.根據(jù)權(quán)利要求I所述的單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法,其特征在于,所述后臺(tái)業(yè)務(wù)管理進(jìn)程還負(fù)責(zé)向個(gè)子進(jìn)程分發(fā)消息,統(tǒng)計(jì)并維護(hù)各業(yè)務(wù)子進(jìn)程的狀態(tài)信息。
全文摘要
本發(fā)明公開了一種單進(jìn)程DirectFB的虛擬多進(jìn)程運(yùn)行方法,該方法用于在單進(jìn)程DirectFB嵌入式平臺(tái)上支持多業(yè)務(wù)時(shí),每個(gè)業(yè)務(wù)都可以單獨(dú)使用DirectFB,所述方法包含如下步驟步驟1,用于后臺(tái)業(yè)務(wù)管理進(jìn)程初始化DirectFB資源的步驟;步驟2,用于各個(gè)子進(jìn)程向所述后臺(tái)業(yè)務(wù)管理進(jìn)程申請(qǐng)獲取DirectFB資源后才能使用DirectFB資源的步驟;其中,所述后臺(tái)業(yè)務(wù)管理進(jìn)程在系統(tǒng)啟動(dòng)后創(chuàng)建并一直處于運(yùn)行狀態(tài),所述后臺(tái)業(yè)務(wù)管理進(jìn)程負(fù)責(zé)管理業(yè)務(wù)間切換,資源使用與分配,特別是DirectFB資源的使用,業(yè)務(wù)管理進(jìn)程啟動(dòng)時(shí)初始化DirectFB的資源,通過父子進(jìn)程共享進(jìn)程空間的方式將DirectFB資源提供給子進(jìn)程使用;業(yè)務(wù)子進(jìn)程對(duì)應(yīng)于每個(gè)業(yè)務(wù)。基于本發(fā)明提供的方法單進(jìn)程DirectFB嵌入式平臺(tái)上支持多業(yè)務(wù)進(jìn)程時(shí),每個(gè)業(yè)務(wù)子進(jìn)程都可以單獨(dú)使用DirectFB,且業(yè)務(wù)間切換流暢,無黑屏現(xiàn)象。
文檔編號(hào)G06F9/46GK102981895SQ201110262090
公開日2013年3月20日 申請(qǐng)日期2011年9月6日 優(yōu)先權(quán)日2011年9月6日
發(fā)明者朱小勇, 孫鵬, 姜艷, 程鋼 申請(qǐng)人:中國(guó)科學(xué)院聲學(xué)研究所, 上海尚恩華科網(wǎng)絡(luò)科技股份有限公司