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