嵌入式Linux的图形使用者界面(GUI)设计
扫描二维码
随时随地手机看文章
前言:
作业系统从纯文字界面一路进展到光鲜亮丽得图形外表,其中包含了无数的设计师的创意,当然,也有许多截他人之长补自己之短得案例出现。在嵌入式系统方面,由于Linux已经是主流嵌入式架构之一,针对这个架构所开发出來的嵌入式产品自然也要在图形使用者界面花费相当大的心力。
兼顧硬體的特殊性、功能的易用性、視覺美感等要素,這些皆是嵌入式系統GUI設計的重點,但是過去的圖形介面設計並沒有專門的設計人員來負責,而多由程式設計人員或者是美工人員兼差扛起,這些人沒有接受過專業的人機介面設計,或者是想法太過一廂情願,無法真正切合使用者需求。甚至,部分廠商乾脆就直接抄襲國外大廠的介面設計,如此不尊重專業的結果,就是導致台灣在圖形介面設計的經驗累積與發展遠遠不及國外大廠。大陸方面其實也在走過去台灣走過的老路, 從抄襲,轉而代工,自有設計少之又少。
設計圖形使用者介面的必要概念
在PC上的各類圖形使用者界面的共同特點是以視窗管理系統為核心,使用鍵盤和滑鼠作為輸入設備。視窗管理系統除基於可重疊多視窗管理技術外,廣泛採用的另一核心技術是事件驅動(Event-Driven)技術。圖形使用者界面和人機交互過程極端依賴視覺和手動控制的參與,因此具有強烈的直接操作特點。而在嵌入式系統上,不同規模的硬體架構對於圖形介面的需求也各有不同,但基本理念仍然一致,那就是作為使用者與機器的有效溝通管道。
由於目前多媒體的概念正風行,作業系統與使用者溝通的方式從過去的純文字、圖形、到了現代,已經轉變成動畫、聲音甚至3D影像的結合產物。這些結合多媒體概念的人機介面設計,在現代資訊產品中扮演著極為重要的角色,由於人類對於訊息的感受最直接的就是視覺與聽覺,結合了兩大感官能力,可以進一步豐富資訊內容與使用者進行的交互作用。至於在操作應用方面,電視遊樂器Wii所帶來的嶄新操作方式,也可以提供我們對將來下一代作業系統使用者介面操作方式的另1層省思,擺脫過去滑鼠與螢幕在操作上相對缺乏直覺的印象,可以利用動作感應與螢幕進行最直接的互動,將來甚至也可能透過腦波控制,直接利用腦波對作業系統進行操控。
使用者與機器溝通的管道與方式隨著科技的進步而增加,但基本上,人類在使用系統所提供的操作介面時,大多依靠的事日常生活所提供的經驗來做判斷,操作介面符合人性,越能達到直覺的目標,使用者花在與機器溝通的訓練時間就可以相對縮短,但是親易近人之後,也要注意依照此方式所設計出來的操作介面是否擁有足夠的深度,能夠充分發揮硬體設備本身的能力,因為一致性是非常重要的設計原則,為了要使用到更進階的硬體機能就必須呼叫出不同的使用者介面的話,那麼這樣的設計就無法維持其一致性,雖然可以應用到更完整的系統能力,但基本上並不能稱為1款成功的使用者圖形介面。
作業系統的使用者介面發展
嚴格來說,真正將圖形化使用者介面帶入一般資訊應用的,乃是Apple公司,諸如收拉式選單、圖示、拖拉操作以及點擊執行等概念,都是早在1980年代時就由該公司所開發構思出來的,其後Apple公司也持續在圖形操作領域有非常多的進展,諸如微軟、Linux等都只不過是這股風潮之下的追隨者,其中微軟算是在作業系統操作介面中,參考Apple公司最徹底的1家,從早先的Windows 3.x,到目前最新的Vista,處處都可以看到Apple公司作業系統的影子在。
隨著嵌入式系統的發展,使用者也越來越注重裝置上的操作簡易性,在消費型行動設備上,美觀更是成為視覺操作介面的設計要點之一,各家行動設備廠商在美感的發揮程度上各有不同,但是基本上都還是依循的既有的模式,比如說在手機介面設計上,常見的9宮格甚至12宮格操作模式就成為各主流手機介面的標準樣版,收放式選單、圖示以及超連結的概念也被徹底的實行。
台灣的代工思維 無法創造出像Apple公司產品的使用者介面
要在嵌入式系統的有限資源中做繁複的圖形介面設計是一件非常不容易的事情,有時開發者為了省時省事,就只能建議專案領導者以實用為主,避免太多花俏的設計。不過創意依然是使用者介面設計上的最重要元素之一,就以Apple公司的iPhone及過去的iPod為例,其實在技術層面上非常的簡易,都只是現有技術的整合而已,但是為何台灣設計者辦不到?為何台灣著名的手機產業及相關手持式裝置也都只能沿用公版介面或只能沿襲舊有操作習慣?教育是問題之一,但主事者的態度也是關鍵,台灣並不缺乏這方面的設計人才,缺乏的只是宏觀的態度以及長久的遠見。
由於硬體不斷的發展與更新,因此未來的嵌入式系統在使用者介面的設計上還是有非常大的發展空間,國內廠商若能好好的把握這塊市場機會,積極培養人才,並且尊重專業,台灣便有機會可以脫離代工產業流血砍價拼規模的惡性循環,衝出紅海的陰影,另闢一番藍海新天地。
嵌入式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