《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 幾種常用的嵌入式Linux GUI及其特點(diǎn)
幾種常用的嵌入式Linux GUI及其特點(diǎn)
摘要: 未來(lái)幾年,,嵌入式LinuxGUI將朝以下方向發(fā)展:第一,,輕型、占用資源少,,不希望建立在龐大累贅的,、非常消耗系統(tǒng)資源的操作系統(tǒng)和GUI之上,。第二,高性能,、高可靠性,,特別是工業(yè)實(shí)時(shí)控制系統(tǒng),對(duì)實(shí)時(shí)性的要求非常高,,并且比起嵌入式系統(tǒng)來(lái)說(shuō),,對(duì)GUI的要求也更高。第三,,可配置,,我們必須清楚的意識(shí)到,嵌入式系統(tǒng)是一種定制設(shè)備,,它們對(duì)GUI的需求各不相同,,有的系統(tǒng)只要求一些圖形功能,而有些系統(tǒng)要求完備的GUI支持,,因此,,GUI也必須是可定制的。
關(guān)鍵詞: GUI JAVA 圖形系統(tǒng)
Abstract:
Key words :

 隨著Internet與網(wǎng)絡(luò)的迅速發(fā)展并向家庭領(lǐng)域不斷擴(kuò)展,,使消費(fèi)電子,、計(jì)算機(jī),、通信(3C)一體化趨勢(shì)日趨明顯,嵌入式系統(tǒng)再度成為研究與應(yīng)用的熱點(diǎn),。嵌入式實(shí)時(shí)Linux操作系統(tǒng)以?xún)r(jià)格低廉,、功能強(qiáng)大又易于移植而正在被廣泛采用,成為新興的力量,,如今隨著WAP手機(jī),、PDA、機(jī)頂盒,、及DVD/VCD播放機(jī)已經(jīng)迅速普及,,用戶(hù)對(duì)這些手持式設(shè)備的GUI提出了更高的要求,希望能看到像PC機(jī)才擁有的華麗美觀的GUI,。GUI已經(jīng)成為了人與機(jī)器溝通的橋梁,,嵌入式系統(tǒng)對(duì)GUI的需求越來(lái)越高,而這一切均要求有一個(gè)輕型,、占用資源少,、高性能、高可靠,、可配置及美觀的GUI支持,。

  1 Java的圖形界面工具

  Java技術(shù)對(duì)于服務(wù)器,個(gè)人電腦和嵌入式系統(tǒng)來(lái)說(shuō)是一項(xiàng)偉大的技術(shù),。由于其具有跨平臺(tái)等特性,。Java在服務(wù)器和桌面電腦方面的應(yīng)用是非常成功的。然而在GUI方面,,Java只用非常有限的一些特征去構(gòu)建圖形用戶(hù)界面,。其思想就是采用平臺(tái)無(wú)關(guān)的Java應(yīng)用程序接口打包到不同的操作系統(tǒng)來(lái)開(kāi)發(fā)本地圖形用戶(hù)界面,被稱(chēng)之為抽象的窗口工具(AWT),。僅有普通的部件如文件域,、文本區(qū)、選擇框,、單選按鈕,、列表框和按鈕被AWT支持,圖形和圖像的特性支持非常有限,,也就是說(shuō),,只足夠構(gòu)建簡(jiǎn)單的applet程序。認(rèn)識(shí)到需要更高級(jí)的圖形用戶(hù)界面組件和圖形能力,,Sun公司開(kāi)發(fā)了Swing,,Java 2D,Java3D,,圖像的輸入/輸出,,以及Java高級(jí)圖像(JAI),。Swing是用來(lái)構(gòu)建Java圖形界面的標(biāo)準(zhǔn)API(應(yīng)用程序接口),一些AWT類(lèi)由Swing基礎(chǔ)而來(lái),。它有一套完全的組件從按鈕到文件域,、表格、樹(shù)型和文件編輯器,。這些組件不依賴(lài)于操作系統(tǒng)本地的部件,,而是用原始的圖形像直線、矩形,、文字畫(huà)出,。這種畫(huà)代表感觀插件,它能夠模仿本地的感觀,。SWT是基于Java開(kāi)發(fā)的,,它的設(shè)計(jì)理念是最大化了操作系統(tǒng)的圖形構(gòu)件的API,就是說(shuō)只要操作系統(tǒng)提供了相應(yīng)圖形的構(gòu)件,,那么SWT只是簡(jiǎn)單應(yīng)用JNI技術(shù)調(diào)用它們,,只有那些操作系統(tǒng)中不提供的構(gòu)件,SWT才自己去做一個(gè)模擬的實(shí)現(xiàn),。另外SWT還提供對(duì)操作系統(tǒng)本地圖形用戶(hù)界面的直接訪問(wèn),,因此,,基于SWT的Java應(yīng)用程序擁有本地的圖形用戶(hù)界面并且可以和本地別的應(yīng)用程序和部件集成在一起,。使用SWT開(kāi)發(fā)包,簡(jiǎn)單,、跨平臺(tái),、可靠等這些Jaya語(yǔ)言本身所具有的優(yōu)點(diǎn)正漸漸融合到圖形界面的應(yīng)用程序開(kāi)發(fā)中去。Java語(yǔ)言的另一扇成功之門(mén)正在逐漸打開(kāi),。

  2 SWT+GtkFB圖形系統(tǒng)的體系結(jié)構(gòu)

  2.1 SWT+GtkFB圖形系統(tǒng)的體系結(jié)構(gòu)


2.1.1 SWT

  SWT處于體系機(jī)構(gòu)的最上層,,它與Java內(nèi)的AwT和Swing同屬于設(shè)計(jì)圖形界面所需的高級(jí)函數(shù)庫(kù)。而且SWT針對(duì)AWT 以及Swing的一些問(wèn)題作了改善,,如今它已發(fā)展成一套與作業(yè)系統(tǒng)無(wú)關(guān)的圖形元件函數(shù)庫(kù),。在元件的產(chǎn)生方面采用了適當(dāng)?shù)哪M,在基本的元件方面是采用原有作業(yè)系統(tǒng)的,,對(duì)于較復(fù)雜的元件才用仿真的技術(shù),。基于SWT的Java應(yīng)用程序擁有本地的圖形用戶(hù)界面,,并且可以和本地別的應(yīng)用程序,,以及部件集成在一起。

  SWT是基于Java語(yǔ)言開(kāi)發(fā)出來(lái)的高級(jí)圖形元件庫(kù),,如圖2所示SWT在Java端通過(guò)JNI(Java Native InteRFace)技術(shù)直接調(diào)用native端的GtkFB來(lái)使用操作系統(tǒng)的資源,,JNI技術(shù)使得SWT程序可以與其他語(yǔ)言編寫(xiě)的Native端的代碼互相協(xié)作,,將它們整合在一起;另一方面可使運(yùn)行在JVM(JAava虛擬機(jī))中的SWT代碼調(diào)用GtkFB庫(kù)函數(shù)或其他程序,;此外利用Invocation API,,可將Java虛擬機(jī)嵌入到native端的應(yīng)用中。JNI這個(gè)接口是雙向的,,相當(dāng)于橋梁和紐帶,,它將SWT代碼和native端的GtkFB代碼連接起來(lái)。


2.1.2 Gtk庫(kù)

  如圖1所示,,GTK會(huì)用到幾個(gè)連接庫(kù),,如基本數(shù)據(jù)類(lèi)型用的Glib庫(kù),它是由基礎(chǔ)類(lèi),、核心應(yīng)用支持類(lèi),、實(shí)用功能類(lèi)、數(shù)據(jù)類(lèi)和對(duì)象系統(tǒng)類(lèi)五個(gè)部分組成的,。

  Pango是用于國(guó)際化文本的布局和顯示的全功能框架,。Pango可以處理以非從左到右方向排列的文本,并且可以容易地管理復(fù)雜語(yǔ)言,,甚至還可以處理根據(jù)使用環(huán)境而采用不同形式的信函,。例如它支持雙向文本,用戶(hù)可以將從左到右的文本和從右到左的文本混合編排,;還可有用于確定各種復(fù)雜文本(如阿拉伯語(yǔ)和泰米爾語(yǔ))形狀的插件,。Pango不僅僅是國(guó)際化,而且Pango庫(kù)在Xft和XRender的支持下能很好地處理抗鋸齒字體文本的顯示,。

  Pango還支持各種圖形格式如libpng,,libjpeg,libtiff和Framebuffer port用的FreeType等,。實(shí)際上GTK提供gdk-pixbuf,,gdk和gtk三個(gè)連接庫(kù),其中Gdk-pixbuf讓我們可做相關(guān)的圖像工作,,gdk是窗口繪圖系統(tǒng)的抽象層,,framebuffer相關(guān)的工作大部分在此完成,而gtk則是高層的應(yīng)用程序接口,。

Atk(Accessibility Toolkit)可訪問(wèn)性工具箱,。GTK充分利用ATK使殘障人士(如視力低下或行動(dòng)不便)與GTK應(yīng)用程序交互成為可能。

2.1.3 GtkFB的工作原理

  DirectFB訪問(wèn)圖形硬件設(shè)備依賴(lài)于操作系統(tǒng)提供的內(nèi)核接口,,即幀緩沖設(shè)備(FrameBuffer),。FrameBuffer實(shí)際上是用一塊硬件來(lái)做顯卡和軟件之間的橋梁,Linux的內(nèi)核將其開(kāi)放出來(lái),使用戶(hù)的程序可以通過(guò)塊內(nèi)存來(lái)存取顯卡,。例如設(shè)定顯示分辨率和色彩數(shù),、存取顯示內(nèi)存區(qū)等。不同的Linux需要提供針對(duì)不同顯示硬件FrameBuffer的驅(qū)動(dòng)程序,,這就是說(shuō)DirectFB需要運(yùn)行于FramBuffer之上,,然而Linux內(nèi)核提供了常見(jiàn)芯片的FrameBuffer驅(qū)動(dòng)。

  當(dāng)一個(gè)應(yīng)用程序連接到GtkFB時(shí)會(huì)調(diào)用gtk_init(),,如圖3所示,,此時(shí)GtkFB 啟動(dòng)Linux的Framebiffer,設(shè)定分辨率和色彩數(shù),,接下來(lái)打開(kāi)鍵盤(pán)和鼠標(biāo)等外設(shè)(PDA打開(kāi)按鍵和觸控屏幕).然后到特定目錄去讀取字型,,最后對(duì)窗口和事件管理作初始化操作。GtkFB可以支持8,、16,、24、32bpp的framebuffer,。

  為了執(zhí)行一個(gè)特定的圖形操作,,DirectFB芯片驅(qū)動(dòng)程序?qū)⒃L問(wèn)圖形設(shè)備內(nèi)存映射的I/O端口,并且把命令傳遞到圖形設(shè)備卡的加速引擎,。實(shí)際的硬件加速是完全在用戶(hù)空間內(nèi)完成的,。

  2.2 SWT+GtkFB圖形系統(tǒng)的優(yōu)點(diǎn)

  2.2.1 內(nèi)存消耗小、運(yùn)行速度快特別適合嵌入式產(chǎn)品

  由于GtkFB直接運(yùn)行在FrameBufer之上,,跳過(guò)X系統(tǒng),,這樣省下了X Server這一部分資源,這使得在內(nèi)存消耗,、運(yùn)行速度上得到顯著提高,。另外采用的JNI技術(shù)使得程序運(yùn)行速度、事件的響應(yīng)有較高的提高,,能滿(mǎn)足時(shí)間要求較為嚴(yán)格的實(shí)時(shí)應(yīng)用場(chǎng)合。

  2.2.2 系統(tǒng)穩(wěn)定性好

  SWT 的穩(wěn)定性,,關(guān)鍵是源于SWT 的設(shè)計(jì)理念,。SWT最大化了操作系統(tǒng)的圖形構(gòu)件API,就是說(shuō)只要操作系統(tǒng)提供了相應(yīng)圖形的構(gòu)件,,那么SWT只是應(yīng)用JNI技術(shù)調(diào)用它們,,只有那些操作系統(tǒng)中不提供的構(gòu)件,SWT才自己去做一個(gè)模擬的實(shí)現(xiàn),??梢钥闯鯯WT性能上的穩(wěn)定很大程度上取決于相應(yīng)操作系統(tǒng)圖形構(gòu)件的穩(wěn)定性。

  2.2.3 易于移植和共享

  SWT的API和桌面版完全相同,因而代碼可以很容易地在桌面和嵌入式設(shè)備之間移植與共享,。

  2.2.4 小巧可配置

  SWT采用了LGPL授權(quán)方式,,用戶(hù)可以自由地甚至是鼓勵(lì)修改源代碼使其更加滿(mǎn)足用戶(hù)的需求,很容易根據(jù)用戶(hù)的需求來(lái)裁減特定的SWT+GtkFB,,依據(jù)LGPL許可證,,用戶(hù)需要公布修改的源代碼,但用戶(hù)不必公布自給應(yīng)用程序的源代碼,。

  2.2.5 易于開(kāi)發(fā)

  SWT是基于Java語(yǔ)言開(kāi)發(fā)的,,具有平臺(tái)獨(dú)立性、面向?qū)ο?、可移植,、安全等Java語(yǔ)言所擁有特點(diǎn)。用戶(hù)可以很容易的基于SWT提供的Widget(構(gòu)件)開(kāi)發(fā)出滿(mǎn)足自己需要的Widget,,而且很容易地使用這些Widget去構(gòu)建應(yīng)用程序,。

  3 SWT+GtkFB圖形系統(tǒng)的實(shí)現(xiàn)

 3.1 前期準(zhǔn)備

  在Linux編譯和安裝SWT+GtkFB,首先到http://www.gtk.org/download下載如下的包:pkg-config,、glib2.x,;atk、pango,、DirectFB,、gtk+2.x。其次到http://www.eclipse.org/download下載swt.tgr.gz,。

  下一步就是在/home/XXX/目錄下創(chuàng)建SWT 和GTK兩個(gè)目錄并且設(shè)置環(huán)境變量,。如下:

  export SWT_HOME=/home/XXX/SWT

  export SWT_HOME=/home/XXX/GTK

  export PKG_CONFIG_PATH=$GTK_HOME /lib/pkgconfig

  export LD_LIBRARY_PATH=$GTK_HOME/lib;$LD_LIBRARY_PATH

  此外增加“/home/XXX/GTK/bin”到系統(tǒng)的環(huán)境變量PATH下。

  3.2 編譯和安裝Gtk+2.0

  3.2.1 編譯和安裝pkg-config

  tar zxvf glib-2.0.6.tar.gz -C $GTK_HOME/src

  cd $GTK HOME/src/glib-2.0.6

  ./configure --prefix=$GTK_HOME

  make


make install

  3.2.2 編譯和安裝atk

  tar zxvf atk-1.0.1.tar.gz -C $GTK_HOME/src

  cd $GTK_HOME/src/atk-1.0.1

  ./configure --prefix=$GTK_HOME

  make

  make install

  3.2.3 編譯和安裝pango,、Direct FB,、gtk+2.0 、swt-forgtk2.2

  步驟類(lèi)似atk的安裝,。

  4 嵌入式Linux GUI的應(yīng)用前景展望

  嵌入式Linux GUI的應(yīng)用領(lǐng)域很多,,既可以用于家電市場(chǎng),還可以用于商業(yè)市場(chǎng),、工業(yè)及自動(dòng)化市場(chǎng),、國(guó)防市場(chǎng)、通訊市場(chǎng)等,。例如,,在通訊市場(chǎng),手機(jī),、可視電話(huà),、機(jī)頂盒等可能成為嵌入式Linu.x的運(yùn)行平臺(tái),一個(gè)人性化的用戶(hù)界面是贏得消費(fèi)者關(guān)鍵因素。因此嵌入式Linux圖形系統(tǒng)將擔(dān)任著更加重要的角色,。

  未來(lái)幾年,,嵌入式Linux GUI將朝以下方向發(fā)展:第一,輕型,、占用資源少,,不希望建立在龐大累贅的、非常消耗系統(tǒng)資源的操作系統(tǒng)和GUI之上,。第二,,高性能、高可靠性,,特別是工業(yè)實(shí)時(shí)控制系統(tǒng),,對(duì)實(shí)時(shí)性的要求非常高,并且比起嵌入式系統(tǒng)來(lái)說(shuō),,對(duì)GUI的要求也更高,。第三,可配置,,我們必須清楚的意識(shí)到,,嵌入式系統(tǒng)是一種定制設(shè)備,它們對(duì)GUI的需求各不相同,,有的系統(tǒng)只要求一些圖形功能,,而有些系統(tǒng)要求完備的GUI支持,因此,,GUI也必須是可定制的,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。