主流嵌入式Linux系統(tǒng)下GUI解決方案
——
在嵌入式環(huán)境底下,GUI系統(tǒng)的整體構架跟PC Desktop相去不遠,例如繪圖函數庫、字型、事件處理等也都是嵌入式GUI系統(tǒng)所要面臨的。但是嵌入式系統(tǒng)本身由于體積小、資源少的特點,所以在整體設計上必須較為嚴謹,必須考慮的條件更多,有時很像又回到了Dos下編制程序的年代,對于軟件所占的存儲量有時可以說是錙銖必較。
Unix環(huán)境下的圖形視窗標準為X Window System(以下簡稱X標準),Linux是類Unix系統(tǒng),所以頂層運行的GUI系統(tǒng)是兼容X標準的XFree86系統(tǒng)。X標準大致可以劃分X Server、Graphic Library(底層繪圖函數庫)、Toolkits、Window Manager、Internationalization(I18N)等幾大部分(詳細內容見鏈接)。
筆者認為,雖然X架構不錯,但卻不怎么適用于嵌入式環(huán)境,因為實際工作起來實在太過于龐大,因此許多嵌入式Linux GUI系統(tǒng)會把上述幾點合并,甚至全部綁到一起,當然這樣同時也會失去很多彈性與擴展功能,但為了適應于嵌入式系統(tǒng),這也是一個解決問題的方法。本文下面就介紹一下現存的主流嵌入式Linux下GUI解決方案。
主流解決方案介紹
Qt/Embedded
Qt是Trolltech這家商業(yè)公司所開發(fā)的一個跨平臺FrameWork環(huán)境,在X環(huán)境下可以看作是一套功能完整的用戶界面工具包,它采用類似C++的語法,并且具備物件導向功能??缙脚_的特性可以讓使用Qt編寫的軟件,在Microsoft Windows 95/98/2000、 Microsoft Windows NT、MacOS X、Linux、Solaris、HP-UX、Tru64 (Digital UNIX)、Irix、FreeBSD、BSD/OS、SCO、AIX等許多平臺上執(zhí)行。雖然是商業(yè)公司的產品,但是Qt走的卻是開源路線,并遵循同樣的游戲規(guī)則,提供免費下載,全部都是開放源代碼,非商業(yè)用途亦采用GPL的版權宣告,著名的Open Source “KDE” 項目便是采用Qt所開發(fā)的。
Trolltech也針對嵌入式環(huán)境推出了“Qt/Embedded”產品。與桌面版本不同,Qt/Embedded已經直接取代掉X Server及X Library等角色,所有的功能全部整合在一起。
Qt/Embedded 同樣具有跨平臺的特點,省掉了不少移植軟件的功夫,這樣的概念和Java十分接近。同時它還采用模塊化設計,其最大的好處是有彈性, Qt/Embedded號稱最小可以縮到800Kb左右,最多可以長到3Mb(for Intel x86),這樣的彈性也讓Qt/Embedded更適合在嵌入式環(huán)境下生存。
另外,Trolltech公司還推出了針對PDA軟件的整體解決方案QPE(Qt Plamtop Environment)。它從底層的GUI系統(tǒng)、Window Manger、Soft Keyboard到上層的PIM、瀏覽器、多媒體等,全部都考慮進去了。其主界面如圖1所示 ,內部包括地址簿、計算器、世界時間、時間設置、記事本、終端、文件瀏覽器、幫助、媒體播放器、圖像瀏覽器、文本編輯器等。
相對其他GUI來說, Qt/Embedded 應該說是肥美型的產品,功能豐富,但能消化它的東西只能是高端產品,32MB內存是運行它的最小要求。因此,如果開發(fā)的產品不是高端的信息終端類產品,不應優(yōu)先考慮 Qt/Embedded。
GtkFB自從Qt推出了嵌入式版本之后,雖然GTK+并非商業(yè)公司所發(fā)展,但也加緊腳步推出了GtkFB方案,其宗旨就是要為嵌入式系統(tǒng)推出一套基于GTK+的GUI解決方案。與Qt/Embedded類似,GtkFB也跳過X層直接與FrameBuffer溝通,因此也具有Qt/Embedded的幾項優(yōu)點,不過由于不是商業(yè)軟件,在發(fā)展的速度上較為緩慢。
Microwindows
Microwindows Open Source Project成立的宗旨在于針對體積小的裝置,建立一套先進的視窗環(huán)境,在Linux桌面上通過交叉編譯可以很容易地制作出micro-windows的程序。MicroWindows能夠在沒有任何操作系統(tǒng)或其他圖形系統(tǒng)的支持下運行,它能對裸顯示設備進行直接操作。這樣,MicroWindows就顯得十分小巧,便于移植到各種硬件和軟件系統(tǒng)上。
然而MicroWindows 的免費版本進展一直很慢,幾乎處于停頓狀態(tài),而且至今為止,國內沒有任何一家專業(yè)對 MicroWindows 提供全面技術支持、服務和擔保的公司。
MiniGUI是中國人做得比較好的自由軟件之一,它是在Linux控制臺上運行的多窗口圖形操作系統(tǒng),可以在以Linux為基礎的應用平臺上提供一個簡單可行的MiniGUI支持系統(tǒng)?!靶 笔荕iniGUI的特色,MiniGUI可以應用在電視機頂盒、實時控制系統(tǒng)、掌上電腦等諸多場合。由于這是由中國人自己開發(fā)的GUI系統(tǒng),所以MiniGUI對于中文的支持最好。它支持GB2312與BIG5字元集,其他字元集也可以輕松加入。
Pure X架構
Tiny X Server是XFree86 Project的一部分,由Keith Pachard先生所發(fā)展,而他本身就是XFree86專案的核心成員之一。一般的X Server都太過于龐大,因此Keith Packard就以XFree86為基礎,精簡了不少東西而成Tiny X Server,它的體積可以小到幾百Kb而已,非常適合應用于嵌入式環(huán)境。
以純X Window System搭配Tiny X Server架構來說,最大的優(yōu)點就是彈性與開發(fā)速度,因為與桌面的X架構相同,因此相對于很多以Qt、GTK+、FLTK等開發(fā)的軟件可以很容易地移植上來。
雖然移植方便,但是卻有體積大的缺點,由于很多軟件本來是針對桌面環(huán)境開發(fā)的,因此無形之中具備了桌面環(huán)境中很多復雜的功能。因此“調校”變成采用此架構最大的課題,有時候重新改寫都可能比調校所需的時間還短。
OpenGUI
OpenGUI在Linux系統(tǒng)上已經存在很長時間了。最初的名字叫FastGL,只支持256色的線性顯存模式,但目前也支持其他顯示模式,并且支持多種操作系統(tǒng)平臺,比如MS-DOS、QNX和Linux等,不過目前只支持x86硬件平臺。OpenGUI分為三層: 最低層是由匯編語言編寫的快速圖形引擎;中間層提供了圖形繪制API,包括線條、矩形、圓弧等,并且兼容Borland的BGIAPI;第三層用C++編寫,提供了完整的GUI對象庫?!penGUI采用LGPL條款發(fā)布。OpenGUI比較適合于基于x86平臺的實時系統(tǒng),跨平臺的可移植性較差,目前發(fā)展較慢。
一點建議
綜合上述GUI解決方案各方面的性能,歸結起來有在國內有四種GUI較為適用,筆者對其做出推薦。
1.OpenGUI
由于基于匯編實現內核,并利用MMX指令進行了優(yōu)化,OpenGUI運行速度非???。它支持32位的機器,能夠在多種操作系統(tǒng)下運行,主要用來在這些系統(tǒng)中開發(fā)圖形應用程序和游戲。由于歷史悠久,OpenGUI非常穩(wěn)定,但是由于其內核用匯編語言實現,其內部使用的是私有的API,所以其可移植性較差,可配置性也較差。
2.Qt/Embedded
這個版本的主要特點是可移植性較好。因為Qt是KDE等項目使用的GUI支持庫,所以許多基于Qt的X Window程序可以非常方便地移植到Qt/Embedded版本上。因此,自從Qt/Embedded以GPL條款發(fā)布以來,就有大量的嵌入式Linux開發(fā)商轉到了Qt/Embedded系統(tǒng)上,如韓國的Mizi公司。但是,由于它是基于C++類庫的,所以和其他GUI相比系統(tǒng)消耗資源較大。因此說Qt/Embedded是肥美型的產品,功能豐富,一般用于手持式高端信息產品。
3.MiniGUI和Micro-Windows的比較
MiniGUI和MicroWindows均為自由軟件,但這兩個系統(tǒng)的技術路線卻有所不同。MiniGUI的策略是建立在比較成熟的圖形引擎之上,比如Svgalib和LibGGI,開發(fā)的重點在于窗口系統(tǒng)、圖形接口之上。而MicroWindows的開發(fā)重點則在底層的圖形引擎之上,所以可以對裸顯示器直接操作,而窗口系統(tǒng)和圖形接口方面的功能還稍有欠缺。比如說,MiniGUI有一套用來支持多字符集和多編碼的函數接口,可以支持各種的字符集,包括GB、BIG5、UNI-CODE等,而MicroWindows在多字符支持上尚沒有統(tǒng)一接口。
X Window System的分層架構
● X ServerX Window System架構上有一項特點是別的GUI系統(tǒng)所沒有的,這個特點就是Client/Server架構,注意這里和一般我們所熟知的某某服務器(Server端)跟PC端(Client端)相連接的情形是不同的。惟一類似的是X Window System本身也是采用網路架構設計。具體而簡單一點的說明就是,X Client可以看作我們在X上執(zhí)行的軟件,X Server則是負責顯示及傳遞使用者輸入事件(包括鍵盤、鼠標等硬件裝置的輸入)。
● Graphic Library
我們可以把一幅圖案想象成有成千上萬個細微小點所組成,這種小點的單位通常為pixel,在同一平方單位里這些小點數越高圖案就越清晰、畫質就越好,也就是說分辨率或解析率高。事實上我們要設計的視窗當然不可能是這樣一點一點地畫上去的,這樣太過浪費時間,基于這種觀念我們就設計出高階一點的函數來幫助我們解決這個繁瑣的步驟,例如各類視窗編程里用到的畫點、畫線、畫矩形、畫圓形、畫不規(guī)則形、上色等函數。透過這些函數是的程序設計者不用去管畫一條線要幾個點以及如何讓顯示器顯示等林林總總低階的工作,我們稱繪圖相關的一組函數庫為GUI的基本Graphic Library。
● Toolkits
有了點、線、面的函數之后,雖然已經去除了大半的重復無聊工作,但是就開發(fā)視窗程序來說,還是顯得非常沒有效率,怎么辦呢?只有繼續(xù)將構成視窗的抽象元件,如按鈕、卷軸、組合框等各類控件抽離出來,重新定義一組更高階的函數庫,在配合上聯系的語法函數就成立Toolkits這類的東西,目前流行的有QT、GTK+等。
● Window Manager
有了Toolkits,我們可以很輕松地建立視窗模塊(X Client),但是每個視窗模塊只負責自己模塊內的事務,那么不同視窗間的溝通、協(xié)調,例如視窗的切換、放大、縮小等,就沒有模塊管理了,于是視窗管理員(Window Manager)就應運而生了。
● Internationalization
國際化通常是我們東方語系國家的人比較關心的議題,但是很多軟件一開始都由西方國家所主導開發(fā),因此這點常常受到忽略,這個問題牽扯的層面很多,上從語言的顯示、輸入、中止語言習慣,下到文字位元的處理,完整的解決是必須從頭到腳徹底配合才能達成,只處理一半都只能說是一個蹩腳的系統(tǒng)。
隨著東方國家使用GUN/Linux的人口越來越多,I18N(i-eighteen-letters-n的縮寫)也日益受到重視,目前底層libc部分已經有完整的支持,剩下來便是GUI系統(tǒng)的問題,由于處理雙位元所耗的資源較大,西方國家主導的系統(tǒng)很多情況下,經過一些取舍,I18N就被犧牲掉了,整體而言Embedded Linux GUI系統(tǒng)在I18N的程度通常都沒有PC端的好,只有在需求時才會使用。
linux相關文章:linux教程
c++相關文章:c++教程
評論