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