歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

MiniGUI 背景,發展及優勢

    本文介紹面向實時嵌入式系統的圖形用戶界面MiniGUI,其產生、發展及優勢,並與其他面向嵌入式系統的 GUI 進行了比較,然後結合實例介紹了 MiniGUI 的一些重要功能和特色,最後,本文介紹了正在進行的 MiniGUI 的開發情況。

    嵌入式 Linux 系統的 GUI 發展概況

    1.1 GUI 在嵌入式或實時系統中的地位

    在常見的 PDA 等小型手持式設備上,由於硬件條件等的限制,我們看到的用戶界面都非常簡單,幾乎看不到我們在 PC 機看到的華麗美觀的 GUI 支持。但最近出現的 Palm 等手持式電腦或者在 Windows CE 等面向嵌入式系統的操作系統上,我們已經看到了完整的圖形用戶界面支持。隨著手持式設備的硬件條件的提高,我們估計嵌入式系統對輕量級 GUI 的需求會越來越迫切。

    近來的市場需求顯示,越來越多的嵌入式系統,包括 PDA、機頂盒、DVD/VCD 播放機、WAP 手機等等系統均要求提供全功能的 Web 浏覽器。這包括 Html 4.0 的支持、javascript 的支持,甚至包括 Java 虛擬機的支持。而這一切均要求有一個高性能、高可靠的 GUI 的支持。

    另外一個迫切需要輕量級 GUI 的系統是工業實時控制系統。這些系統一般建立在標准 PC 平台上,硬件條件相對嵌入式系統要好,但對實時性的要求非常高,並且比起嵌入式系統來說,對 GUI 的要求也更高。這些系統一般不希望建立在龐大累贅的、非常消耗系統資源的操作系統和 GUI 之上,比如 Windows 或 X Window.目前許多這類系統都建立在 DOS 等系統上,並且采用比較簡單的手法實現 GUI.但是,在出現 Linux 系統之後,尤其在 RT-Linux 系統出現之後,許多工業控制系統開始采用 RT-Linux 作為操作系統,但 GUI 仍然是一個問題。關鍵是 X Window 太過龐大和臃腫。這樣,這些系統對輕型 GUI 的需求更加突出。

    但是,我們必須清楚的是,嵌入式系統往往是一種定制設備,它們對 GUI 的需求也各不相同。舉個簡單的例子,有的系統只要求一些圖形功能,而有些系統要求完備的 GUI 支持。因此,GUI 也必須是可定制的。

    綜上所述,GUI 在嵌入式系統或者實時系統中的地位將越來越重要,這些系統對 GUI 的基本要求包括:1.輕型、占用資源少。

    2.高性能。

    3.高可靠性。

    4.可配置。

    1.2 目前實時嵌入式系統 GUI 的實現方法

    盡管實時嵌入式系統對 GUI 的需求越來越明顯,但目前 GUI 的實現方法各有不同:

    1.某些大型廠商有能力自己開發滿足自身需要的 GUI 系統。

    2.某些廠商沒有將 GUI 作為一個軟件層從應用程序中剝離,GUI 的支持邏輯由應用程序自己負責。

    3.采用某些比較成熟的 GUI 系統,比如 MiniGUI 或者其他 GUI 系統。

    在上述手段中,第 2 種方法是一種臨時解決方案。利用這種手段編寫的程序,無法將顯示邏輯和數據處理邏輯劃分開來,從而導致程序結構不好,不便於調試,並導致大量的代碼重復。我們認為 GUI 是一種類似於操作系統的基礎軟件,這種軟件系統應該遵循一定的標准,並且應該是開放源碼的自由軟件,從而可以讓開放商集中精力開發自己的應用程序。目前看來,在 Linux 之上進行(實時)嵌入式系統開發的廠商,一般選擇如下幾種 GUI 系統:緊縮的 X Window 系統、MiniGUI、MicroWindows、OpenGUI、QT/Embedded 等,下面首先對這些系統進行簡單介紹,並對它們的優缺點進行比較。

    1.2.1 緊縮的 X Window 系統

    眾所周知,X Window 是 Linux 以及其他類 UNIX 系統的標准 GUI.X Window 系統采用標准的客戶/服務器體系結構,具有可擴展性好、可移植性好等優點。但該系統的龐大、累贅和低效率也是大家所共知的。為了獲得應用程序的可移植性,許多廠家都試圖通過對 X Window 系統的緊縮開發,使之能夠在嵌入式系統上運行。國外已經開發出了大小約為 800K 的 X 服務器。這對西方國家來說基本能夠滿足嵌入式系統的需求了。但該系統的源代碼尚不開放,從而很難進行本地化開發。




    1.2.2 MicroWindows

    MicroWindows 是一個開放源碼的項目,目前由美國一家公司在主持開發。該項目的開發非常活躍,國內也有人參與了其中的開發,並編寫了 GB2312 等字符集的支持。該項目的主要特色在於提供了比較完善的圖形功能,包括一些高級的功能,比如 Alpha 混合,三維支持,TrueType 字體支持等。但作為一個窗口系統,該項目提供的窗口處理功能還需要進一步完善,比如控件或構件的實現還很不完備,鍵盤和鼠標等的驅動還很不完善。值得一提的是,該項目的許多控件是從 MiniGUI 中移植過去的,掃雷游戲也是從 MiniGUI 中移植過去的。

    該項目已經啟動了一個開放源碼的浏覽器項目,該浏覽器在 KDE kfm 提供的 HTML 解釋器的基礎上開發,目前能夠解釋一些簡單的 HTML 頁面。

    1.2.3 OpenGUI

    OpenGUI 在 Linux 系統上存在已經很長時間了。最初的名字叫 FastGL,只支持 256 的線性顯存模式。但目前也支持其他顯示模式。這個庫是用 C++ 編寫的,只提供 C++ 接口。

    1.2.4 Qt/ Embedded

    QT/Embedded 是著名的 QT 庫開放商正在進行的面向嵌入式系統的 QT 版本。這個版本的主要特點是可移植性較好,許多基於 QT 的 X Window 程序可以非常方便地移植到嵌入式版本。但是該系統不是開放源碼的,如果你要使用這個庫,可能需要支付昂貴的授權費用。目前,已經有了 QT/Embedded 的演示版,預計明年初將出現 QT/Embedded 的正式發行版。

    1.3 MiniGUI 簡介

    MiniGUI 是一種面向嵌入式系統或者實時系統的圖形用戶界面支持系統。它主要運行於 Linux 控制台,實際可以運行在任何一種具有 POSIX 線程支持的 POSIX 兼容系統上。MiniGUI 同時也是國內最早出現的幾個自由軟件項目之一。

    MiniGUI 的主要特色有:

    遵循 LGPL 條款的純自由軟件。

    提供了完備的多窗口機制。這包括:多個單獨線程中運行的多窗口。

    單個線程中主窗口的附屬。

    對話框和預定義的控件類(按鈕、單行和多行編輯框、列表框、進度條、工具欄等)。

    消息傳遞機制。

    多字符集和多字體支持,目前支持 ISO8859-1、GB2312、Big5 等字符集,並且支持各種光柵字體和 TrueType、Type 1 等矢量字體。

    全拼、五筆等漢字輸入法支持。

    BMP、GIF、JPEG、PCX、TGA 等常見圖像文件的支持。

    Windows 的資源文件支持,如位圖、圖標、光標等。

    插入符、定時器、加速鍵等。

    其他(Beep、ETC/INI 文件操作等)。

    小巧。包含全部功能的庫文件大小為 300 K左右。

    可配置。可根據項目需求進行定制配置和編譯。

    高穩定性和高性能。MiniGUI 已經在Linux 發行版安裝程序、CNC 系統、藍點嵌入式系統等關鍵應用程序中得到了實際的應用。可移植性好。目前,MiniGUI 可以在 X Window 和 Linux 控制台上運行。中科院 EEOS 開發組已經成功地將 MiniGUI 移植到了他們的 POSIX 兼容系統上。藍點軟件(北京)研發中心也已經成功地將 MiniGUI 移植到了兩款基於 StrongARM 的嵌入式系統上。

 

    1.4 各種面向實時嵌入式系統的 GUI 之比較

    比較上述幾個面向嵌入式系統的 GUI,我們認為目前比較成熟,同時得到最多開發人員認可的有緊縮的 X Window 系統、MiniGUI、MicroWindows 等系統。盡管緊縮的 X Window 系統其 X 服務器可以降低到 800K 的大小,但因為 X Window 系統的運行還需要其他程序和庫的支持,包括 X 窗口管理器、XLib、建立在 XLib 之上的 GTK 和 QT 等函數庫,因此,緊縮的X Window 系統在運行期間所占用的系統資源很多,加上中文顯示和中文輸入等本地化代碼之後,系統的整體尺寸和運行時的資源消耗將進一步變大。因此,嵌入式系統的開發商往往將緊縮的 X Window 系統定位在機頂盒等對資源要求並不苛刻的嵌入式系統上。

    MiniGUI 和 MicroWindows 均為自由軟件,只是前者遵循 LGPL 條款,後者遵循 MPL 條款。這兩個系統的技術路線也有所不同。MiniGUI 的策略是首先建立在比較成熟的圖形引擎之上,比如 SVGALib 和 LibGGI,開發的重點在於窗口系統、圖形接口之上;MicroWindows 目前的開發重點則在底層的圖形引擎之上,窗口系統和圖形接口方面的功能還比較欠缺。舉個例子來說,MiniGUI 有一套用來支持多字符集和多編碼的函數接口,可以支持各種常見的字符集,包括 GB、BIG5、UNICODE 等,而 MicroWindows 在多字符集的支持上尚沒有統一接口。



    MiniGUI 的重要特色

    2.1 設計目標:小巧和可配置

    MiniGUI 最初是為了滿足一個工業控制系統(計算機數控系統)的需求而設計和開發的。這個工業控制系統是清華大學為一台數控機床設計的計算機數控系統(CNC)。在比較 DOS、Windows 98、Windows NT、Linux 等系統之後,該項目組決定選擇 RT-Linux 作為實時操作系統,以便滿足 2ms 甚至更高的實時性。但是圖形用戶界面是一個問題,因為 X Window 不適合於實時控制系統,並且當時 X Window 系統的本地化也不盡人意。因此,決定自己開發一套圖形用戶界面支持系統。這就是 MiniGUI 產生的背景。顯然,MiniGUI 一開始就針對實時系統而設計,因此,在設計之初就考慮到了小巧、高性能和高效率。目前,這個數控系統的開發已近尾聲,MiniGUI 在其中擔當了非常重要的角色。

    在考慮到其他不同於數控系統的嵌入式系統時,為了滿足千變萬化的需求,必須要求 GUI 系統是可配置的。在 CNC 系統中得到成功應用之後,我們立即著手於 MiniGUI 可配置的設計。我們通過 Linux 下的 automake 和 autoconf 接口,實現了大量的編譯配置選項,通過這些選項可指定 MiniGUI 庫中包括哪些功能而同時不包括哪些功能。

    因此,MiniGUI 是一個非常適合於工業控制實時系統以及嵌入式系統的可定制的、小巧的圖形用戶界面支持系統。

    2.2 重要特色

    2.2.1 多線程和多窗口

    MiniGUI 中的窗口基本分四類,分別為主窗口、對話框、控件和主窗口中的子窗口。

    MiniGUI 中的主窗口和 Windows 應用程序的主窗口概念類似,但有一些重要的不同,MiniGUI 中的每個主窗口及其附屬主窗口對應於一個單獨的線程,通過函數調用可建立主窗口以及對應的線程。每個線程有一個消息隊列,屬於同一線程的所有主窗口從這一消息隊列中獲取消息並由窗口過程(回調函數)進行處理。

    VCOnGUI,即 Virtual Console On MiniGUI,是 MiniGUI 上的虛擬控制台,即運行在 MiniGUI 上的 Linux 控制台仿真器,見圖 1.從圖1可以看到,MiniGUI 應用程序能夠同時創建多個窗口,並且運行在不同的線程。

圖 1 VConGUI -- MiniGUI 上的 Linux 控制台仿真器

    2.2.2 對話框和標准控件

    MiniGUI 中的對話框是一種特殊的窗口,對話框一般和控件一起使用,這兩個概念和 Windows 或 X Window 中的相關概念是類似的。MiniGUI 支持的控件類型有:

    靜態框:文本、圖標或矩形框等。

    文本框:單行或多行的文本編輯框。

    按鈕:單選鈕、復選框和一般按鈕等。

    列表框。

    進度條。

    工具欄。

    HappyLinux 是國內某公司開發的中文 Linux 發行版,該發行版的安裝程序就建立在 MiniGUI 之上。圖 2 和圖 3 是 HappyLinux 安裝程序的典型屏幕。

圖 2 HappyLinux 的軟件包選擇界面

圖 3 HappyLinux 的分區界面

     2.2.3 其他 GUI 元素

    MiniGUI 還支持彈出式菜單、插入符、定時器、光標、快捷鍵等常見的 GUI 元素。圖 4 和圖 5 說明了其他 GUI 元素的應用情況。圖 4 是 Bomb 游戲,是 Windows 掃雷游戲的克隆。圖 5 是經典的俄羅斯方塊游戲的 MiniGUI 版本,見圖 5.

圖 4 掃雷游戲的克隆:Bomb 游戲圖

圖 5 俄羅斯方塊游戲的 MiniGUI 版本



 

    2.2.4 消息和消息循環

    在任何 GUI 系統中,均有事件或消息驅動的概念。在MiniGUI中,我們使用消息驅動作為應用程序的創建構架。

    在消息驅動的應用程序中,計算機外設發生的事件,例如鍵盤鍵的敲擊、鼠標鍵的按擊等,都由支持系統收集,將其以事先的約定格式翻譯為特定的消息。應用程序一般包含有自己的消息隊列,系統將消息發送到應用程序的消息隊列中。應用程序可以建立一個循環,在這個循環中讀取消息並處理消息,直到特定的消息傳來為止。這樣的循環稱為消息循環。一般地,消息由代表消息的一個整型數和消息的附加參數組成。

    應用程序一般要提供一個處理消息的標准函數。在消息循環中,系統可以調用此函數,應用程序在此函數中處理相應的消息。

    2.2.5 圖形和輸入抽象層

    在 MiniGUI 0.3.xx 的開發中,我們引入了圖形和輸入抽象層(Graphics and Input Abstract Layer,GAL 和 IAL)的概念。抽象層的概念類似 Linux 內核虛擬文件系統的概念。它定義了一組不依賴於任何特殊硬件的抽象接口,所有頂層的圖形操作和輸入處理都建立在抽象接口之上。而用於實現這一抽象接口的底層代碼稱為"圖形引擎"或"輸入引擎",類似操作系統中的驅動程序。這實際是一種面向對象的程序結構。利用 GAL 和 IAL,MiniGUI 可以在許多圖形引擎上運行,比如 SVGALib 和 LibGGI,並且可以非常方便地將 MiniGUI 移植到其他 POSIX 系統上,只需要根據我們的抽象層接口實現新的圖形引擎即可。目前,我們已經編寫了基於 SVGALib 和 LibGGI 的圖形引擎。利用 LibGGI, MiniGUI 應用程序可以運行在 X Window 上,將大大方便應用程序的調試。我們目前正在進行 MiniGUI 私有圖形引擎的設計開發。通過 MiniGUI 的私有圖形引擎,我們可以最大程度地針對窗口系統對圖形引擎進行優化,最終提高系統的圖形性能和效率。

    GAL 和 IAL 的實現,大大提高了 MiniGUI 的可移植性。我們不需要對 MiniGUI 的上層代碼進行絲毫修改,只需實現新的 GAL 和 IAL 引擎,就可以讓 MiniGUI 運行在其他基於不同硬件的嵌入式 Linux 系統上。比如,藍點公司在兩周內就將 MiniGUI 移植到了基於 StrongARM 的兩款嵌入式系統之上。圖 6 就是藍點公司開發的運行於 StrongARM 之上的智能信息家電產品。

圖 6 正在進行網上購物的藍點信息家電客戶端

    2.2.6 多字體和多字符集支持

    在成功引入 GAL 和 IAL 之後,我們又在處理字體和字符集的模塊當中引入了邏輯字體的概念。邏輯字體是 MiniGUI 用來處理文本(包括文本輸出和文本分析)的頂層接口。邏輯字體接口將各種不同的字體(比如宋體、黑體和揩體)和字體格式(比如等寬字體、變寬字體等光柵字體和 TrueType、Type1 等矢量字體),以及各種不同字符集(ISO-8859、GB2312、Big5、UNICODE等)綜合了起來,從而可以通過統一的接口顯示不同字符集的不同字體的文本,並且還可以分析各種字符集文本的組成,比如字符、單詞等。在多字體和多字符集的支持中,我們也采用了面向對象的軟件技術,使得添加新的字體支持和新的字符集支持非常方便。目前,MiniGUI 能夠支持各種光柵字體和 TrueType、Type 1 等矢量字體,並能夠支持 GB2312、Big5 等多字節字符集,UNICODE 的支持正在開發當中。有了這一技術,我們就可以在 MiniGUI 的同一窗口中顯示屬於不同字符集的、不同字體的文本。

    圖 7 給出了 MiniGUI 的高級字體支持功能。第一個界面采用 TTF 字體,以旋轉方式輸出"MiniGUI IS GREAT!";第二個界面給出了多種字體文字的居中、右對齊等輸出效果。

圖 7 MiniGUI 的高級字體支持

    3 MiniGUI 近期開發情況

    從 1998 年下半年開始 MiniGUI 的開發以後,就一直得到了來自 Internet 的自由軟件程序員的鼓勵和支持。到目前為止,國內外已經有多家嵌入式系統廠商開始在 MiniGUI 上開發其嵌入式產品,其中也包括清華大學、中科院等科研單位。因此可以說,MiniGUI 的開發已經從最初的孤軍作戰發展到包括企業、科研單位、個人在內的市集式開發模式,真正體現出了自由軟件的強大生命力。目前,正在進行的 MiniGUI 開發包括:

    1.針對 GUI 系統開發 MiniGUI 私有的圖形引擎,以便進一步提高圖形操作的性能,同時為添加高級的光柵操作函數打下基礎。

    2.在多窗口處理上進一步開發,以便完善現有的窗口機制。比如目前已進入測試狀態的控件嵌套功能。

    3.進一步開發 MiniGUI 上的控件,比如工具欄、高級列表框等。

    4.提供基於傳統 UNIX 系統 IPC 機制的客戶/服務器體系,以便支持大型應用程序。

    5.開發基於 MiniGUI 的 GPL 應用程序,比如小型字處理程序、電子郵件客戶程序等。

    MiniGUI 近期開發情況

    從 1998 年下半年開始 MiniGUI 的開發以後,就一直得到了來自 Internet 的自由軟件程序員的鼓勵和支持。到目前為止,國內外已經有多家嵌入式系統廠商開始在 MiniGUI 上開發其嵌入式產品,其中也包括清華大學、中科院等科研單位。因此可以說,MiniGUI 的開發已經從最初的孤軍作戰發展到包括企業、科研單位、個人在內的市集式開發模式,真正體現出了自由軟件的強大生命力。目前,正在進行的 MiniGUI 開發包括:

    1.針對 GUI 系統開發 MiniGUI 私有的圖形引擎,以便進一步提高圖形操作的性能,同時為添加高級的光柵操作函數打下基礎。

    2.在多窗口處理上進一步開發,以便完善現有的窗口機制。比如目前已進入測試狀態的控件嵌套功能。

    3.進一步開發 MiniGUI 上的控件,比如工具欄、高級列表框等。

    4.提供基於傳統 UNIX 系統 IPC 機制的客戶/服務器體系,以便支持大型應用程序。

    5.開發基於 MiniGUI 的 GPL 應用程序,比如小型字處理程序、電子郵件客戶程序等。

    關於作者

    魏永明( [email protected] ),男,26 歲,工學碩士,現任藍點軟件(深圳)有限公司北京研發中心技術主管。國內最有影響的自由軟件項目之一—— MiniGUI 的創始人以及主要開發人員。著有《Linux 實用教程》與《學用 Linux 與 Windows NT》,並主持翻譯了《Red Hat Linux 奧秘》等大量優秀的 Linux 技術著作。是清華大學 AKA Linux 編程技術系列講座的主講人。



 



right">



 



Copyright © Linux教程網 All Rights Reserved