嵌入式Linux的图形使用者界面(GUI)设计
时间:05-16
来源:DIGITIMES
点击:
嵌入式Linux的應用方興未艾
嵌入式系統正以它體積小、專用性等特點深入社會應用的各個層次。在此領域中,嵌入式Linux在開發活力上,以及技術深度,可以說是目前嵌入式技術領域的領導者之一,除了有各大半導體、伺服器端、終端硬體設備廠商的支援以外,在開發難易度上,也因為具備了非常豐富的支援文件及社團資源,且作業系統本身不需授權費用,或授權費用相對低廉(端視不同廠商的授權方式),成本更顯低廉,因此被嵌入式硬體廠商廣泛採用。
在特定嵌入式應用領域中,比如PDA、智慧型手機、UMPC、工控電腦等嵌入式架構中,嵌入式Linux的圖形使用者界面的性能將直接影響整個系統的操作感受與流暢度,因此產品製造商和最終使用者。如何針對使用者的需求,在已有的圖形使用者界面上,訂製和改進出具有特定功能的圖形使用者界面,是嵌入式系統開發者共同關注的問題。
嵌入式Linux圖形使用者界面的分類
嵌入式系統往往是非常特化的硬體設備,針對不同的應用,因此對圖形使用者界面的需求也會有所不同。有的系統只要求簡單的圖形功能,而有些系統要求完備的GUI能力支援。因此很多嵌入式系統需要自行定製的嵌入式圖形使用者界面。以下是幾種常用的嵌入式圖形使用者界面及技術特性:
■MiniGUI
圖說:利用MiniGUI所設計出來的手機操作介面。(資料來源:www.linuxdevices.com)
MiniGUI是在Linux控制台上執行基於SVGALib和LinuxThread6函式庫的多視窗圖形使用者界面支援系統。MiniGUI 採用了類似Win32的API,實現了簡化的類似微軟視窗風格的圖形使用者界面。 MiniGUI也是1個視窗系統,它的主要組成元素是視窗,在這個基礎上MiniGUI中的視窗可以基本分四類,分別為主視窗、對話框、控制元件和主視窗中的片段。
MiniGUI中的主視窗和Windows應用程式的主視窗概念類似,MiniGUI中的每個主視窗對應於一個單獨的執行緒,通過函式庫存取可建立主視窗以及對應的執行緒。每個執行緒有一個訊息佇列,主視窗從這一訊息佇列中獲取消息並由視窗過程(回調函數)進行處理。MiniGUI的目標是保持現有體積小巧的前提下,在Linux控制台上提供1個迷你視窗系統支援。〝輕薄短小〞是MiniGUI的最大特色。同時MiniGUI又將盡力與微軟的 MSWindows API保持相容。這麼定位是希望MiniGUI可以在未來以Linux 為基礎的應用平台上,提供一個簡單可行的 GUI 支援系統,讓MiniGUI 可以應用在Windows CE系統可以應用的任何場合。
■Microwindows/Nano-X Windows System
圖說:利用Microwindows所設計出來的GUI介面。(資料來源:www.devdrv.co.jp)
Microwindows (已改名為Nano-X Windows System)是1個開放原始碼的自由軟體項目,最初是由台灣人所發展,支援多種平台。該項目的開發相當活躍,大陸也有人參與了其中的開發,並增加了GB2312等字元編碼的支援。Microwindows的主要特色在於提供了相當完善的圖形功能,包括如 Alpha 混合,3D支援,TrueType 字體支援等高級的功能。使得那些只有在具有大容量硬碟和記憶體配置的高階Windows系統才能實現的視窗環境,如Microsoft Windows和X2Windows,可以在嵌入式設備上順利運作。
Microwindows從原理上採用分層設計的方法,每層次完成特定的功能,並且能夠在不影響其它層次的基礎上針對不同的應用進行改編或者重寫。在最底層方面,顯示螢幕、滑鼠、觸控螢幕等的驅動程式提供了與交互相關的硬體設備的存取;中間層是1個精簡的圖形引擎,提供了劃線、區塊填充、多邊形等多種基本的圖形功能;最上層為圖形應用程式提供了豐富的介面函式庫(API),透過這些函式庫可以自訂桌面和視窗的外觀。目前Microwindows提供2套API,以便能夠更好地適應不同平台應用程序的移植,即 與Win32/Win CE基本兼容的API以及採用X體系的Nano-X API。
設備驅動程序的介面定義在device.h文件中。中間層所提供與設備無關的圖形引擎就是透過存取設備驅動程式跟硬體設備進行溝通。這就保證了當平台硬體設備發生變化的時候,只需要改寫相對應的驅動程式,而無需修改上層程式碼,簡化了開發的流程。icrowindows提供基於Linux2.4.X內核的 FrameBuffer設備驅動程式。FrameBuffer在Linux系統中透過/dev/fb0設備檔案進行工作,利用mmap()系統函式將顯示換衝記憶體映射至系統記憶體中。
Microwindows 能夠在沒有任何作業系統或其他圖形系統的支援下運行,並且具有對無顯示設備進行直接操作的能力。雖然擁有WIN32相容API,便於熟悉Windows開發的使用者進行開發,不過介面仍不夠完善。
■OpenGUI
圖說:OpenGUI的系統架構。(資料來源:www.tutok.sk)
OpenGUI基於使用組合語言實現的x86圖形核心,提供了一個高階的C/C++圖形/視窗介面。它和MiniGUI一樣,也是使用LGPL授權方式。OpenGUI提供了2D繪圖架構,訊息驅動的API、BMP檔案格式支援。OpenGUI功能強大、使用方便。使用者甚至可以實現Borland BGI風格的應用程式,或者是QT風格的視窗。OpenGUI支援滑鼠和鍵盤的事件。在Linux上基於Framebuffer3或者SVGALib4實 現繪圖。Linux下OpenGUI也支援Mesa3D,支援真實的3D成像效果。在顏色數量方面,OpenGUI已經支援8、16、32位元色深。
由於其基於組合語言實現的核心架構,並利用多媒體加速指令集進行最佳化,因此OpenGUI運行速度非常快,除了可以支援32位元的機器,能夠在MS- DOS,QNX5和Linux下執行,目前OpenGUI主要用來在這些系統中開發圖形應用程式和遊戲。雖然OpenGUI非常穩定,但可移植性因為其核心乃是使用組合語言實作的關係,而會受到影響。
■QT/Embedded(已改名為Qtopia Core)
圖說:QT/Embedded的系統架構。(資料來源:www.tutok.sk)
Qt/Embedded是Trolltech公司的另一個產品,Qt也是流行的Linux桌面環境KDE 的基礎,KDE是所有主要的Linux發行版的一個標準組件。自從1996年起,Qt開始進入商業應用領域,並且成為全世界數千種成功的應用程式的視覺外觀基礎。雖然走Open Source開發路線,採用GPL授權,但商業應用的話就必需要支付授權費。2005年年初,Trolltech 在大陸北京成立研發據點,在亞洲語系方面的支援會有相當大的突破,Trolltech 還是秉持雙授權(dual-licensing)與社團推廣(community-promoting) 的機制,持續以 GPL/QPL 釋出最新的Qt技術,並且累積加值服務,算是業界相當優秀的長久經營典範。Qt/Embedded是Qt的嵌入式Linux介面,是完整內建C++GUI和基於 Linux的嵌入式平台開發工具。
由於Qt/Embedded 並不是只針對嵌入式裝置而設計的,Qt/Embedded是來自桌上版本 (UNIX/X11、Windows,與 MacOS X 等平台)Qt圖形介面的簡化與移植。因此,開發者可以持續利用開發桌面應用程式的經驗,來進行嵌入式應用程式開發,開發者不必重新學習一套新的 API,也不需要適應新的程式設計技巧。不過這並不是說原本桌面應用程式可以直接套用到到相對精簡的嵌入式裝置上。事實上,手持式裝置對於螢幕尺寸、圖示的拖放執行,與記憶體資源都與桌上行系統有著相當程度的需求差異。不過,Qt 與Qt/Embedded 在基本的 API 上都是一致的。
由於針對大範圍的應用,Qt/Embedded API的設備開發非常廣泛。Qt/Embedded可以開發市場上多種類型的產品和設備,從消費性電子(智慧型手機、網路終端和set-top box)到工業控制設備(如醫學成像設備、行動訊息系統等)等等,都在其支援之列。這套環境提供的API和Qt/Windows與Qt/X11相同,但不需要使用到X11,取而代之的提供從硬體介面、繪圖函式庫以及完整的GUI工具。Qt/Embedded對儲存記憶體的需求約在800kB到3MB(x86處理器環境下)左右。其另一個特點就是跨平台,用Qt API開發出來的應用程式,可以在不同的作業系統和視窗系統上執行。
隨著嵌入式處理器運算能力的不斷提高,對外接設備的支援的不斷發展,嵌入式Linux系統的應用也逐漸增多。Qt/Embedded延續了Qt在桌面系統的所有功能以外,豐富的API函式庫支援以及完整的程式編譯模型使得嵌入式Linux系統中的應用程序開發更加便捷。不過由於Qt/Embedded過於完整,在記憶體佔用空間方面就很難下降,因此對於嵌入式裝置的硬體要求也會更高。
作者:林宗輝/DIGITIMES
嵌入式系統正以它體積小、專用性等特點深入社會應用的各個層次。在此領域中,嵌入式Linux在開發活力上,以及技術深度,可以說是目前嵌入式技術領域的領導者之一,除了有各大半導體、伺服器端、終端硬體設備廠商的支援以外,在開發難易度上,也因為具備了非常豐富的支援文件及社團資源,且作業系統本身不需授權費用,或授權費用相對低廉(端視不同廠商的授權方式),成本更顯低廉,因此被嵌入式硬體廠商廣泛採用。
在特定嵌入式應用領域中,比如PDA、智慧型手機、UMPC、工控電腦等嵌入式架構中,嵌入式Linux的圖形使用者界面的性能將直接影響整個系統的操作感受與流暢度,因此產品製造商和最終使用者。如何針對使用者的需求,在已有的圖形使用者界面上,訂製和改進出具有特定功能的圖形使用者界面,是嵌入式系統開發者共同關注的問題。
嵌入式Linux圖形使用者界面的分類
嵌入式系統往往是非常特化的硬體設備,針對不同的應用,因此對圖形使用者界面的需求也會有所不同。有的系統只要求簡單的圖形功能,而有些系統要求完備的GUI能力支援。因此很多嵌入式系統需要自行定製的嵌入式圖形使用者界面。以下是幾種常用的嵌入式圖形使用者界面及技術特性:
■MiniGUI
圖說:利用MiniGUI所設計出來的手機操作介面。(資料來源:www.linuxdevices.com)
MiniGUI是在Linux控制台上執行基於SVGALib和LinuxThread6函式庫的多視窗圖形使用者界面支援系統。MiniGUI 採用了類似Win32的API,實現了簡化的類似微軟視窗風格的圖形使用者界面。 MiniGUI也是1個視窗系統,它的主要組成元素是視窗,在這個基礎上MiniGUI中的視窗可以基本分四類,分別為主視窗、對話框、控制元件和主視窗中的片段。
MiniGUI中的主視窗和Windows應用程式的主視窗概念類似,MiniGUI中的每個主視窗對應於一個單獨的執行緒,通過函式庫存取可建立主視窗以及對應的執行緒。每個執行緒有一個訊息佇列,主視窗從這一訊息佇列中獲取消息並由視窗過程(回調函數)進行處理。MiniGUI的目標是保持現有體積小巧的前提下,在Linux控制台上提供1個迷你視窗系統支援。〝輕薄短小〞是MiniGUI的最大特色。同時MiniGUI又將盡力與微軟的 MSWindows API保持相容。這麼定位是希望MiniGUI可以在未來以Linux 為基礎的應用平台上,提供一個簡單可行的 GUI 支援系統,讓MiniGUI 可以應用在Windows CE系統可以應用的任何場合。
■Microwindows/Nano-X Windows System
圖說:利用Microwindows所設計出來的GUI介面。(資料來源:www.devdrv.co.jp)
Microwindows (已改名為Nano-X Windows System)是1個開放原始碼的自由軟體項目,最初是由台灣人所發展,支援多種平台。該項目的開發相當活躍,大陸也有人參與了其中的開發,並增加了GB2312等字元編碼的支援。Microwindows的主要特色在於提供了相當完善的圖形功能,包括如 Alpha 混合,3D支援,TrueType 字體支援等高級的功能。使得那些只有在具有大容量硬碟和記憶體配置的高階Windows系統才能實現的視窗環境,如Microsoft Windows和X2Windows,可以在嵌入式設備上順利運作。
Microwindows從原理上採用分層設計的方法,每層次完成特定的功能,並且能夠在不影響其它層次的基礎上針對不同的應用進行改編或者重寫。在最底層方面,顯示螢幕、滑鼠、觸控螢幕等的驅動程式提供了與交互相關的硬體設備的存取;中間層是1個精簡的圖形引擎,提供了劃線、區塊填充、多邊形等多種基本的圖形功能;最上層為圖形應用程式提供了豐富的介面函式庫(API),透過這些函式庫可以自訂桌面和視窗的外觀。目前Microwindows提供2套API,以便能夠更好地適應不同平台應用程序的移植,即 與Win32/Win CE基本兼容的API以及採用X體系的Nano-X API。
設備驅動程序的介面定義在device.h文件中。中間層所提供與設備無關的圖形引擎就是透過存取設備驅動程式跟硬體設備進行溝通。這就保證了當平台硬體設備發生變化的時候,只需要改寫相對應的驅動程式,而無需修改上層程式碼,簡化了開發的流程。icrowindows提供基於Linux2.4.X內核的 FrameBuffer設備驅動程式。FrameBuffer在Linux系統中透過/dev/fb0設備檔案進行工作,利用mmap()系統函式將顯示換衝記憶體映射至系統記憶體中。
Microwindows 能夠在沒有任何作業系統或其他圖形系統的支援下運行,並且具有對無顯示設備進行直接操作的能力。雖然擁有WIN32相容API,便於熟悉Windows開發的使用者進行開發,不過介面仍不夠完善。
■OpenGUI
圖說:OpenGUI的系統架構。(資料來源:www.tutok.sk)
OpenGUI基於使用組合語言實現的x86圖形核心,提供了一個高階的C/C++圖形/視窗介面。它和MiniGUI一樣,也是使用LGPL授權方式。OpenGUI提供了2D繪圖架構,訊息驅動的API、BMP檔案格式支援。OpenGUI功能強大、使用方便。使用者甚至可以實現Borland BGI風格的應用程式,或者是QT風格的視窗。OpenGUI支援滑鼠和鍵盤的事件。在Linux上基於Framebuffer3或者SVGALib4實 現繪圖。Linux下OpenGUI也支援Mesa3D,支援真實的3D成像效果。在顏色數量方面,OpenGUI已經支援8、16、32位元色深。
由於其基於組合語言實現的核心架構,並利用多媒體加速指令集進行最佳化,因此OpenGUI運行速度非常快,除了可以支援32位元的機器,能夠在MS- DOS,QNX5和Linux下執行,目前OpenGUI主要用來在這些系統中開發圖形應用程式和遊戲。雖然OpenGUI非常穩定,但可移植性因為其核心乃是使用組合語言實作的關係,而會受到影響。
■QT/Embedded(已改名為Qtopia Core)
圖說:QT/Embedded的系統架構。(資料來源:www.tutok.sk)
Qt/Embedded是Trolltech公司的另一個產品,Qt也是流行的Linux桌面環境KDE 的基礎,KDE是所有主要的Linux發行版的一個標準組件。自從1996年起,Qt開始進入商業應用領域,並且成為全世界數千種成功的應用程式的視覺外觀基礎。雖然走Open Source開發路線,採用GPL授權,但商業應用的話就必需要支付授權費。2005年年初,Trolltech 在大陸北京成立研發據點,在亞洲語系方面的支援會有相當大的突破,Trolltech 還是秉持雙授權(dual-licensing)與社團推廣(community-promoting) 的機制,持續以 GPL/QPL 釋出最新的Qt技術,並且累積加值服務,算是業界相當優秀的長久經營典範。Qt/Embedded是Qt的嵌入式Linux介面,是完整內建C++GUI和基於 Linux的嵌入式平台開發工具。
由於Qt/Embedded 並不是只針對嵌入式裝置而設計的,Qt/Embedded是來自桌上版本 (UNIX/X11、Windows,與 MacOS X 等平台)Qt圖形介面的簡化與移植。因此,開發者可以持續利用開發桌面應用程式的經驗,來進行嵌入式應用程式開發,開發者不必重新學習一套新的 API,也不需要適應新的程式設計技巧。不過這並不是說原本桌面應用程式可以直接套用到到相對精簡的嵌入式裝置上。事實上,手持式裝置對於螢幕尺寸、圖示的拖放執行,與記憶體資源都與桌上行系統有著相當程度的需求差異。不過,Qt 與Qt/Embedded 在基本的 API 上都是一致的。
由於針對大範圍的應用,Qt/Embedded API的設備開發非常廣泛。Qt/Embedded可以開發市場上多種類型的產品和設備,從消費性電子(智慧型手機、網路終端和set-top box)到工業控制設備(如醫學成像設備、行動訊息系統等)等等,都在其支援之列。這套環境提供的API和Qt/Windows與Qt/X11相同,但不需要使用到X11,取而代之的提供從硬體介面、繪圖函式庫以及完整的GUI工具。Qt/Embedded對儲存記憶體的需求約在800kB到3MB(x86處理器環境下)左右。其另一個特點就是跨平台,用Qt API開發出來的應用程式,可以在不同的作業系統和視窗系統上執行。
隨著嵌入式處理器運算能力的不斷提高,對外接設備的支援的不斷發展,嵌入式Linux系統的應用也逐漸增多。Qt/Embedded延續了Qt在桌面系統的所有功能以外,豐富的API函式庫支援以及完整的程式編譯模型使得嵌入式Linux系統中的應用程序開發更加便捷。不過由於Qt/Embedded過於完整,在記憶體佔用空間方面就很難下降,因此對於嵌入式裝置的硬體要求也會更高。
作者:林宗輝/DIGITIMES
- uClinux和Linux的具体异同(05-25)
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)
- 嵌入式Linux系统中MMC卡驱动管理技术研究(06-10)