嵌入式Linux系統(tǒng)圖形及圖形用戶界面
3.3 Qt/Embedded
Qt/Embedded是著名的 Qt 庫(kù)開(kāi)發(fā)商 TrollTech(http://www.trolltech.com/)發(fā)布的面向嵌入式系統(tǒng)的 Qt 版本。因?yàn)?Qt 是 KDE 等項(xiàng)目使用的 GUI 支持庫(kù),所以有許多基于 Qt 的 X Window 程序可以非常方便地移植到 Qt/Embedded 版本上。因此,自從 Qt/Embedded 以 GPL 條款形勢(shì)發(fā)布以來(lái),就有大量的嵌入式 Linux 開(kāi)發(fā)商轉(zhuǎn)到了 Qt/Embedded 系統(tǒng)上。比如韓國(guó)的 Mizi 公司,臺(tái)灣省的某些嵌入式 Linux 應(yīng)用開(kāi)發(fā)商等等。
不過(guò),在筆者看來(lái),Qt/Embedded 還有一些問(wèn)題值得開(kāi)發(fā)者注意:
1)目前,該系統(tǒng)采用兩種條款發(fā)布,其中包括 GPL 條款。對(duì)函數(shù)庫(kù)使用 GPL 條款,意味著其上的應(yīng)用需要遵循 GPL 條款。當(dāng)然了,如果要開(kāi)發(fā)商業(yè)程序,TrollTech 也允許你采用另外一個(gè)授權(quán)條款,這時(shí),就必須向 TrollTech 交納授權(quán)費(fèi)用了。
2)Qt/Embedded 是一個(gè) C++ 函數(shù)庫(kù),盡管 Qt/Embedded 聲稱可以裁剪到最少 630K,但這時(shí)的 Qt/Embedded 庫(kù)已經(jīng)基本上失去了使用價(jià)值。低的程序效率、大的資源消耗也對(duì)運(yùn)行 Qt/Embedded 的硬件提出了更高的要求。
3)Qt/Embedded 庫(kù)目前主要針對(duì)手持式信息終端,因?yàn)閷?duì)硬件加速支持的匱乏,很難應(yīng)用到對(duì)圖形速度、功能和效率要求較高的嵌入式系統(tǒng)當(dāng)中,比如機(jī)頂盒、游戲終端等等。
4)Qt/Embedded 提供的控件集風(fēng)格沿用了 PC 風(fēng)格,并不太適合許多手持設(shè)備的操作要求。
5)Qt/Embedded 的結(jié)構(gòu)過(guò)于復(fù)雜,很難進(jìn)行底層的擴(kuò)充、定制和移植,尤其是那個(gè)用來(lái)實(shí)現(xiàn) signal/slot 機(jī)制的著名的 moc 文件。
因?yàn)樯鲜鲞@些原因,目前所見(jiàn)到的 Qt/Embedded 的運(yùn)行環(huán)境,幾乎是清一色基于 StrongARM 的 iPAQ。
3.4 MiniGUI
MiniGUI是由筆者主持,并由許多自由軟件開(kāi)發(fā)人員支持的一個(gè)自由軟件項(xiàng)目(遵循 LGPL 條款發(fā)布),其目標(biāo)是為基于 Linux 的實(shí)時(shí)嵌入式系統(tǒng)提供一個(gè)輕量級(jí)的圖形用戶界面支持系統(tǒng)。該項(xiàng)目自 1998 年底開(kāi)始到現(xiàn)在,已歷經(jīng) 3 年多的開(kāi)發(fā)過(guò)程。到目前為止,已經(jīng)非常成熟和穩(wěn)定。目前,我們已經(jīng)正式發(fā)布了穩(wěn)定版本 1.0.9,并且開(kāi)始了新版本系列的開(kāi)發(fā),即 MiniGUI Version 1.1.x,該系列的正式版也即將發(fā)布。
在 MiniGUI 幾年的發(fā)展過(guò)程中,有許多值得一提的技術(shù)創(chuàng)新點(diǎn),正是由于這些技術(shù)上的創(chuàng)新,才使得 MiniGUI 更加適合實(shí)時(shí)嵌入式系統(tǒng);而且 MiniGUI 的靈活性非常好,可以應(yīng)用在包括手持設(shè)備、機(jī)頂盒、游戲終端等等在內(nèi)的各種高端或者低端的嵌入式系統(tǒng)當(dāng)中。這些技術(shù)創(chuàng)新包括:
1)圖形抽象層。圖形抽象層對(duì)頂層 API 基本沒(méi)有影響,但大大方便了 MiniGUI 應(yīng)用程序的移植、調(diào)試等工作。目前包含三個(gè)圖形引擎,SVGALib、LibGGI 以及直接基于 Linux FrameBuffer 的 Native Engine,利用 LibGGI 時(shí),可在 X Window 上運(yùn)行 MiniGUI 應(yīng)用程序,并可非常方便地進(jìn)行調(diào)試。與圖形抽象層相關(guān)的還有輸入事件的抽象層。MiniGUI 現(xiàn)在已經(jīng)被證明能夠在基于 ARM、MIPS、StrongARM 以及 PowerPC 等的嵌入式系統(tǒng)上流暢運(yùn)行。
2)多字體和多字符集支持。這部分通過(guò)設(shè)備上下文(DC)的邏輯字體(LOGFONT)實(shí)現(xiàn),不管是字體類型還是字符集,都可以非常方便地進(jìn)行擴(kuò)充。應(yīng)用程序在啟動(dòng)時(shí),可切換系統(tǒng)字符集,比如 GB、BIG5、EUCKR、UJIS。利用 DrawText 等函數(shù)時(shí),可通過(guò)指定字體而獲得其他字符集支持。對(duì)于一個(gè)窗口來(lái)說(shuō),同時(shí)顯示不同語(yǔ)種的文字是可能的。MiniGUI 的這種字符集支持不同于傳統(tǒng)通過(guò) UNICODE 實(shí)現(xiàn)的多字符集支持,這種實(shí)現(xiàn)更加適合于嵌入式系統(tǒng)。
3)兩個(gè)不同架構(gòu)的版本。最初的 MiniGUI 運(yùn)行在 PThread 庫(kù)之上,這個(gè)版本適合于功能單一的嵌入式系統(tǒng),但存在系統(tǒng)健壯性不夠的缺點(diǎn)。在 0.9.98 版本中,我們引入了 MiniGUI-Lite 版本,這個(gè)版本在提高系統(tǒng)健壯性的同時(shí),通過(guò)一系列創(chuàng)新途徑,避免了傳統(tǒng) C/S 結(jié)構(gòu)的弱點(diǎn),為功能復(fù)雜的嵌入式系統(tǒng)提供了一個(gè)高效、穩(wěn)定的 GUI 系統(tǒng)。
在 MiniGUI 1.1.0 版本的開(kāi)發(fā)中,我們參照 SDL 和 Allegro 的圖形部分,重新設(shè)計(jì)了圖形抽象層,并增強(qiáng)了圖形功能,同時(shí)增強(qiáng)了 MiniGUI-Lite 版本的某些特性。這些特性包括:
1)MiniGUI-Lite 支持層的概念。同一層可容納多個(gè)能夠同時(shí)顯示的客戶程序,并平鋪在屏幕上顯示。
2)新的 GAL 能夠支持硬件加速能力,并能夠充分使用顯示內(nèi)存;新 GAL 之上的新 GDI 接口得到進(jìn)一步增強(qiáng)。新的 GDI 接口可以支持 Alpha 混和、透明位塊傳輸、光柵操作、YUV覆蓋、Gamma 校正,以及高級(jí)圖形功能(橢圓、多邊形、樣條曲線)等等。
MiniGUI 新版本在圖形方面的增強(qiáng)和提高,將大大擴(kuò)展它的應(yīng)用領(lǐng)域,希望能夠?qū)η度胧?Linux 上的多媒體應(yīng)用、游戲開(kāi)發(fā)提供支持。
縱觀嵌入式 Linux 系統(tǒng)上的各種圖形系統(tǒng)方案,我們發(fā)現(xiàn),許多圖形系統(tǒng)(如 Qt/Embedded 和 MicoroWindows),只注重手持設(shè)備上的需求,卻不太注重其他應(yīng)用領(lǐng)域的需求,而其他許多需要圖形支持的嵌入式 Linux 系統(tǒng)卻需要許多獨(dú)特的、高級(jí)的圖形功能,而不僅僅是圖形用戶界面。為此,在接下來(lái)的開(kāi)發(fā)中,我們還將在如下領(lǐng)域繼續(xù)開(kāi)發(fā) MiniGUI:
1)提供運(yùn)行在 MiniGUI 上的 JAVA 虛擬機(jī) AWT 組件的實(shí)現(xiàn)。
2)提供 MiniGUI 上的 OpenGL 實(shí)現(xiàn)。
3)提供類 QT 控件集的 C++ 封裝。
3)提供窗口/控件風(fēng)格主題支持。
4)在 MiniGUI-Lite 當(dāng)中增加對(duì)矢量字體的支持。
4 小結(jié)
綜上所述,筆者認(rèn)為在嵌入式 Linux 圖形領(lǐng)域,還有許多有待開(kāi)發(fā)人員仔細(xì)研究和解決的問(wèn)題。MiniGUI 的新的發(fā)展,也正源于對(duì)這些需求的認(rèn)識(shí)之上。我們也衷心希望能夠有更多的自由軟件開(kāi)發(fā)人員加盟 MiniGUI 的開(kāi)發(fā),一同開(kāi)發(fā)新的嵌入式 Linux 的圖形系統(tǒng)。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
評(píng)論