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