<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 主流嵌入式Linux系統下GUI解決方案

主流嵌入式Linux系統下GUI解決方案

——
作者: 時(shí)間:2007-02-28 來(lái)源:人民網(wǎng) 收藏
在嵌入式系統領(lǐng)域,有不少GUI系統,如QNX Photon MicroGUI等,可是具體到嵌入式Linux領(lǐng)域又有哪些可供選擇的GUI系統呢?

  在嵌入式環(huán)境底下,GUI系統的整體構架跟PC Desktop相去不遠,例如繪圖函數庫、字型、事件處理等也都是嵌入式GUI系統所要面臨的。但是嵌入式系統本身由于體積小、資源少的特點(diǎn),所以在整體設計上必須較為嚴謹,必須考慮的條件更多,有時(shí)很像又回到了Dos下編制程序的年代,對于軟件所占的存儲量有時(shí)可以說(shuō)是錙銖必較。

  Unix環(huán)境下的圖形視窗標準為X Window System(以下簡(jiǎn)稱(chēng)X標準),Linux是類(lèi)Unix系統,所以頂層運行的GUI系統是兼容X標準的XFree86系統。X標準大致可以劃分X Server、Graphic Library(底層繪圖函數庫)、Toolkits、Window Manager、Internationalization(I18N)等幾大部分(詳細內容見(jiàn)鏈接)。

  筆者認為,雖然X架構不錯,但卻不怎么適用于嵌入式環(huán)境,因為實(shí)際工作起來(lái)實(shí)在太過(guò)于龐大,因此許多嵌入式Linux GUI系統會(huì )把上述幾點(diǎn)合并,甚至全部綁到一起,當然這樣同時(shí)也會(huì )失去很多彈性與擴展功能,但為了適應于嵌入式系統,這也是一個(gè)解決問(wèn)題的方法。本文下面就介紹一下現存的主流嵌入式Linux下GUI解決方案。

  主流解決方案介紹

  Qt/Embedded

  Qt是Trolltech這家商業(yè)公司所開(kāi)發(fā)的一個(gè)跨平臺FrameWork環(huán)境,在X環(huán)境下可以看作是一套功能完整的用戶(hù)界面工具包,它采用類(lèi)似C++的語(yǔ)法,并且具備物件導向功能??缙脚_的特性可以讓使用Qt編寫(xiě)的軟件,在Microsoft Windows 95/98/2000、 Microsoft Windows NT、MacOS X、Linux、Solaris、HP-UX、Tru64 (Digital UNIX)、Irix、FreeBSD、BSD/OS、SCO、AIX等許多平臺上執行。雖然是商業(yè)公司的產(chǎn)品,但是Qt走的卻是開(kāi)源路線(xiàn),并遵循同樣的游戲規則,提供免費下載,全部都是開(kāi)放源代碼,非商業(yè)用途亦采用GPL的版權宣告,著(zhù)名的Open Source “KDE” 項目便是采用Qt所開(kāi)發(fā)的。

  Trolltech也針對嵌入式環(huán)境推出了“Qt/Embedded”產(chǎn)品。與桌面版本不同,Qt/Embedded已經(jīng)直接取代掉X Server及X Library等角色,所有的功能全部整合在一起。

  Qt/Embedded 同樣具有跨平臺的特點(diǎn),省掉了不少移植軟件的功夫,這樣的概念和Java十分接近。同時(shí)它還采用模塊化設計,其最大的好處是有彈性, Qt/Embedded號稱(chēng)最小可以縮到800Kb左右,最多可以長(cháng)到3Mb(for Intel x86),這樣的彈性也讓Qt/Embedded更適合在嵌入式環(huán)境下生存。

  另外,Trolltech公司還推出了針對PDA軟件的整體解決方案QPE(Qt Plamtop Environment)。它從底層的GUI系統、Window Manger、Soft Keyboard到上層的PIM、瀏覽器、多媒體等,全部都考慮進(jìn)去了。其主界面如圖1所示 ,內部包括地址簿、計算器、世界時(shí)間、時(shí)間設置、記事本、終端、文件瀏覽器、幫助、媒體播放器、圖像瀏覽器、文本編輯器等。

  相對其他GUI來(lái)說(shuō), Qt/Embedded 應該說(shuō)是肥美型的產(chǎn)品,功能豐富,但能消化它的東西只能是高端產(chǎn)品,32MB內存是運行它的最小要求。因此,如果開(kāi)發(fā)的產(chǎn)品不是高端的信息終端類(lèi)產(chǎn)品,不應優(yōu)先考慮 Qt/Embedded。

  GtkFB自從Qt推出了嵌入式版本之后,雖然GTK+并非商業(yè)公司所發(fā)展,但也加緊腳步推出了GtkFB方案,其宗旨就是要為嵌入式系統推出一套基于GTK+的GUI解決方案。與Qt/Embedded類(lèi)似,GtkFB也跳過(guò)X層直接與FrameBuffer溝通,因此也具有Qt/Embedded的幾項優(yōu)點(diǎn),不過(guò)由于不是商業(yè)軟件,在發(fā)展的速度上較為緩慢。

  Microwindows

  Microwindows Open Source Project成立的宗旨在于針對體積小的裝置,建立一套先進(jìn)的視窗環(huán)境,在Linux桌面上通過(guò)交叉編譯可以很容易地制作出micro-windows的程序。MicroWindows能夠在沒(méi)有任何操作系統或其他圖形系統的支持下運行,它能對裸顯示設備進(jìn)行直接操作。這樣,MicroWindows就顯得十分小巧,便于移植到各種硬件和軟件系統上。

  然而MicroWindows 的免費版本進(jìn)展一直很慢,幾乎處于停頓狀態(tài),而且至今為止,國內沒(méi)有任何一家專(zhuān)業(yè)對 MicroWindows 提供全面技術(shù)支持、服務(wù)和擔保的公司。

  MiniGUI是中國人做得比較好的自由軟件之一,它是在Linux控制臺上運行的多窗口圖形操作系統,可以在以L(fǎng)inux為基礎的應用平臺上提供一個(gè)簡(jiǎn)單可行的MiniGUI支持系統?!靶 笔荕iniGUI的特色,MiniGUI可以應用在電視機頂盒、實(shí)時(shí)控制系統、掌上電腦等諸多場(chǎng)合。由于這是由中國人自己開(kāi)發(fā)的GUI系統,所以MiniGUI對于中文的支持最好。它支持GB2312與BIG5字元集,其他字元集也可以輕松加入。

  Pure X架構

  Tiny X Server是XFree86 Project的一部分,由Keith Pachard先生所發(fā)展,而他本身就是XFree86專(zhuān)案的核心成員之一。一般的X Server都太過(guò)于龐大,因此Keith Packard就以XFree86為基礎,精簡(jiǎn)了不少東西而成Tiny X Server,它的體積可以小到幾百Kb而已,非常適合應用于嵌入式環(huán)境。

  以純X Window System搭配Tiny X Server架構來(lái)說(shuō),最大的優(yōu)點(diǎn)就是彈性與開(kāi)發(fā)速度,因為與桌面的X架構相同,因此相對于很多以Qt、GTK+、FLTK等開(kāi)發(fā)的軟件可以很容易地移植上來(lái)。

  雖然移植方便,但是卻有體積大的缺點(diǎn),由于很多軟件本來(lái)是針對桌面環(huán)境開(kāi)發(fā)的,因此無(wú)形之中具備了桌面環(huán)境中很多復雜的功能。因此“調?!弊兂刹捎么思軜嬜畲蟮恼n題,有時(shí)候重新改寫(xiě)都可能比調校所需的時(shí)間還短。
    OpenGUI

  OpenGUI在Linux系統上已經(jīng)存在很長(cháng)時(shí)間了。最初的名字叫FastGL,只支持256色的線(xiàn)性顯存模式,但目前也支持其他顯示模式,并且支持多種操作系統平臺,比如MS-DOS、QNX和Linux等,不過(guò)目前只支持x86硬件平臺。OpenGUI分為三層: 最低層是由匯編語(yǔ)言編寫(xiě)的快速圖形引擎;中間層提供了圖形繪制API,包括線(xiàn)條、矩形、圓弧等,并且兼容Borland的BGIAPI;第三層用C++編寫(xiě),提供了完整的GUI對象庫?!penGUI采用LGPL條款發(fā)布。OpenGUI比較適合于基于x86平臺的實(shí)時(shí)系統,跨平臺的可移植性較差,目前發(fā)展較慢。

  一點(diǎn)建議

  綜合上述GUI解決方案各方面的性能,歸結起來(lái)有在國內有四種GUI較為適用,筆者對其做出推薦。

  1.OpenGUI

  由于基于匯編實(shí)現內核,并利用MMX指令進(jìn)行了優(yōu)化,OpenGUI運行速度非???。它支持32位的機器,能夠在多種操作系統下運行,主要用來(lái)在這些系統中開(kāi)發(fā)圖形應用程序和游戲。由于歷史悠久,OpenGUI非常穩定,但是由于其內核用匯編語(yǔ)言實(shí)現,其內部使用的是私有的API,所以其可移植性較差,可配置性也較差。

  2.Qt/Embedded

  這個(gè)版本的主要特點(diǎn)是可移植性較好。因為Qt是KDE等項目使用的GUI支持庫,所以許多基于Qt的X Window程序可以非常方便地移植到Qt/Embedded版本上。因此,自從Qt/Embedded以GPL條款發(fā)布以來(lái),就有大量的嵌入式Linux開(kāi)發(fā)商轉到了Qt/Embedded系統上,如韓國的Mizi公司。但是,由于它是基于C++類(lèi)庫的,所以和其他GUI相比系統消耗資源較大。因此說(shuō)Qt/Embedded是肥美型的產(chǎn)品,功能豐富,一般用于手持式高端信息產(chǎn)品。

  3.MiniGUI和Micro-Windows的比較

  MiniGUI和MicroWindows均為自由軟件,但這兩個(gè)系統的技術(shù)路線(xiàn)卻有所不同。MiniGUI的策略是建立在比較成熟的圖形引擎之上,比如Svgalib和LibGGI,開(kāi)發(fā)的重點(diǎn)在于窗口系統、圖形接口之上。而MicroWindows的開(kāi)發(fā)重點(diǎn)則在底層的圖形引擎之上,所以可以對裸顯示器直接操作,而窗口系統和圖形接口方面的功能還稍有欠缺。比如說(shuō),MiniGUI有一套用來(lái)支持多字符集和多編碼的函數接口,可以支持各種的字符集,包括GB、BIG5、UNI-CODE等,而MicroWindows在多字符支持上尚沒(méi)有統一接口。

  X Window System的分層架構

  ● X ServerX Window System架構上有一項特點(diǎn)是別的GUI系統所沒(méi)有的,這個(gè)特點(diǎn)就是Client/Server架構,注意這里和一般我們所熟知的某某服務(wù)器(Server端)跟PC端(Client端)相連接的情形是不同的。惟一類(lèi)似的是X Window System本身也是采用網(wǎng)路架構設計。具體而簡(jiǎn)單一點(diǎn)的說(shuō)明就是,X Client可以看作我們在X上執行的軟件,X Server則是負責顯示及傳遞使用者輸入事件(包括鍵盤(pán)、鼠標等硬件裝置的輸入)。

  ● Graphic Library

  我們可以把一幅圖案想象成有成千上萬(wàn)個(gè)細微小點(diǎn)所組成,這種小點(diǎn)的單位通常為pixel,在同一平方單位里這些小點(diǎn)數越高圖案就越清晰、畫(huà)質(zhì)就越好,也就是說(shuō)分辨率或解析率高。事實(shí)上我們要設計的視窗當然不可能是這樣一點(diǎn)一點(diǎn)地畫(huà)上去的,這樣太過(guò)浪費時(shí)間,基于這種觀(guān)念我們就設計出高階一點(diǎn)的函數來(lái)幫助我們解決這個(gè)繁瑣的步驟,例如各類(lèi)視窗編程里用到的畫(huà)點(diǎn)、畫(huà)線(xiàn)、畫(huà)矩形、畫(huà)圓形、畫(huà)不規則形、上色等函數。透過(guò)這些函數是的程序設計者不用去管畫(huà)一條線(xiàn)要幾個(gè)點(diǎn)以及如何讓顯示器顯示等林林總總低階的工作,我們稱(chēng)繪圖相關(guān)的一組函數庫為GUI的基本Graphic Library。

  ● Toolkits

  有了點(diǎn)、線(xiàn)、面的函數之后,雖然已經(jīng)去除了大半的重復無(wú)聊工作,但是就開(kāi)發(fā)視窗程序來(lái)說(shuō),還是顯得非常沒(méi)有效率,怎么辦呢?只有繼續將構成視窗的抽象元件,如按鈕、卷軸、組合框等各類(lèi)控件抽離出來(lái),重新定義一組更高階的函數庫,在配合上聯(lián)系的語(yǔ)法函數就成立Toolkits這類(lèi)的東西,目前流行的有QT、GTK+等。

  ● Window Manager

  有了Toolkits,我們可以很輕松地建立視窗模塊(X Client),但是每個(gè)視窗模塊只負責自己模塊內的事務(wù),那么不同視窗間的溝通、協(xié)調,例如視窗的切換、放大、縮小等,就沒(méi)有模塊管理了,于是視窗管理員(Window Manager)就應運而生了。

  ● Internationalization

  國際化通常是我們東方語(yǔ)系國家的人比較關(guān)心的議題,但是很多軟件一開(kāi)始都由西方國家所主導開(kāi)發(fā),因此這點(diǎn)常常受到忽略,這個(gè)問(wèn)題牽扯的層面很多,上從語(yǔ)言的顯示、輸入、中止語(yǔ)言習慣,下到文字位元的處理,完整的解決是必須從頭到腳徹底配合才能達成,只處理一半都只能說(shuō)是一個(gè)蹩腳的系統。

  隨著(zhù)東方國家使用GUN/Linux的人口越來(lái)越多,I18N(i-eighteen-letters-n的縮寫(xiě))也日益受到重視,目前底層libc部分已經(jīng)有完整的支持,剩下來(lái)便是GUI系統的問(wèn)題,由于處理雙位元所耗的資源較大,西方國家主導的系統很多情況下,經(jīng)過(guò)一些取舍,I18N就被犧牲掉了,整體而言Embedded Linux GUI系統在I18N的程度通常都沒(méi)有PC端的好,只有在需求時(shí)才會(huì )使用。

linux相關(guān)文章:linux教程


c++相關(guān)文章:c++教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>