恰當選擇嵌入式Linux環境下的GUI系統

2021-04-07 09:20:20 字數 4243 閱讀 7230

在嵌入式系統領域,有不少gui系統,如qnx photon microgui等,可是具體到嵌入式linux領域又有哪些可供選擇的gui系統呢?

在嵌入式環境底下,gui系統的整體構架跟pc desktop相去不遠,例如繪圖函式庫、字型、事件處理等也都是嵌入式gui系統所要面臨的。但是嵌入式系統本身由於體積小、資源少的特點,所以在整體設計上必須較為嚴謹,必須考慮的條件更多,有時很像又回到了dos下編制程式的年代,對於軟體所佔的儲存量有時可以說是錙銖必較。

unix環境下的圖形視窗標準為x window system(以下簡稱x標準),linux是類unix系統,所以頂層執行的gui系統是相容x標準的xfree86系統。x標準大致可以劃分x server、graphic library(底層繪圖函式庫)、toolkits、window manager、internationalization(i18n)等幾大部分(詳細內容見鏈結)。

筆者認為,雖然x架構不錯,但卻不怎麼適用於嵌入式環境,因為實際工作起來實在太過於龐大,因此許多嵌入式linux gui系統會把上述幾點合併,甚至全部綁到一起,當然這樣同時也會失去很多彈性與擴充套件功能,但為了適應於嵌入式系統,這也是乙個解決問題的方法。本文下面就介紹一下現存的主流嵌入式linux下gui解決方案。

主流解決方案介紹

qt/embedded

自從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

圖2 minigui應用程式截圖

minigui是中國人做得比較好的自由軟體之一,它是在linux控制台上執行的多視窗圖形作業系統,可以在以linux為基礎的應用平台上提供乙個簡單可行的minigui支援系統。「小」是minigui的特色,minigui可以應用在電視機頂盒、實時控制系統、掌上電腦等諸多場合。由於這是由中國人自己開發的gui系統,所以minigui對於中文的支援最好。它支援gb2312與big5字符集,其他字符集也可以輕鬆加入。介面如圖2所示。

pure x架構

tiny x server是xfree86 project的一部分,由keith pachard先生所發展,而他本身就是xfree86專案的核心成員之一。一般的x server都太過於龐大,因此keith packard就以xfree86為基礎,精簡了不少東西而成tiny x server,它的體積可以小到幾百kb而已,非常適合應用於嵌入式環境。

以純x window system搭配tiny x server架構來說,最大的優點就是彈性與開發速度,因為與桌面的x架構相同,因此相對於很多以qt、gtk+、fltk等開發的軟體可以很容易地移植上來。

雖然移植方便,但是卻有體積大的缺點,由於很多軟體本來是針對桌面環境開發的,因此無形之中具備了桌面環境中很多複雜的功能。因此「調校」變成採用此架構最大的課題,有時候重新改寫都可能比調校所需的時間還短。

opengui

opengui在linux系統上已經存在很長時間了。最初的名字叫fastgl,只支援256色的線性視訊記憶體模式,但目前也支援其他顯示模式,並且支援多種作業系統平台,比如ms-dos、qnx和linux等,不過目前只支援x86硬體平台。opengui分為三層: 最低層是由組合語言編寫的快速圖形引擎;中間層提供了圖形繪製api,包括線條、矩形、圓弧等,並且相容borland的bgiapi;第三層用c++編寫,提供了完整的gui物件庫。

opengui採用lgpl條款發布。opengui比較適合於基於x86平台的實時系統,跨平台的可移植性較差,目前發展較慢。

一點建議

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

1.opengui

由於基於彙編實現核心,並利用mmx指令進行了優化,opengui執行速度非常快。它支援32位的機器,能夠在多種作業系統下執行,主要用來在這些系統中開發圖形應用程式和遊戲。由於歷史悠久,opengui非常穩定,但是由於其核心用組合語言實現,其內部使用的是私有的api,所以其可移植性較差,可配置性也較差。

2.qt/embedded

這個版本的主要特點是可移植性較好。因為qt是kde等專案使用的gui支援庫,所以許多基於qt的x window程式可以非常方便地移植到qt/embedded版本上。因此,自從qt/embedded以gpl條款發布以來,就有大量的嵌入式linux開發商轉到了qt/embedded系統上,如南韓的mizi公司。但是,由於它是基於c++類庫的,所以和其他gui相比系統消耗資源較大。因此說qt/embedded是肥美型的產品,功能豐富,一般用於手持式高階資訊產品。

3.minigui和micro-windows的比較

minigui和microwindows均為自由軟體,但這兩個系統的技術路線卻有所不同。minigui的策略是建立在比較成熟的圖形引擎之上,比如svgalib和libggi,開發的重點在於視窗系統、圖形介面之上。而microwindows的開發重點則在底層的圖形引擎之上,所以可以對裸顯示器直接操作,而視窗系統和圖形介面方面的功能還稍有欠缺。比如說,minigui有一套用來支援多字符集和多編碼的函式介面,可以支援各種的字符集,包括gb、big5、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

有了點、線、面的函式之後,雖然已經去除了大半的重複無聊工作,但是就開發視窗程式來說,還是顯得非常沒有效率,怎麼辦呢?只有繼續將構成視窗的抽象元件,如按鈕、卷軸、組合框等各類控制項抽離出來,重新定義一組更高階的函式庫,在配合上聯絡的語法函式就成立toolkits這類的東西,目前流行的有qt、gtk+等。

● window manager

有了toolkits,我們可以很輕鬆地建立視窗模組(x client),但是每個視窗模組只負責自己模組內的事務,那麼不同視窗間的溝通、協調,例如視窗的切換、放大、縮小等,就沒有模組管理了,於是視窗管理員(window manager)就應運而生了。

● internationalization

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

隨著東方國家使用gun/linux的人口越來越多,i18n(i-eighteen-letters-n的縮寫)也日益受到重視,目前底層libc部分已經有完整的支援,剩下來便是gui系統的問題,由於處理雙位元所耗的資源較大,西方國家主導的系統很多情況下,經過一些取捨,i18n就被犧牲掉了,整體而言embedded linux gui系統在i18n的程度通常都沒有pc端的好,只有在需求時才會使用。

Linux嵌入式開發平台選擇

我們採用openwrt作為我們linux開發的作業系統。可以被描述為乙個嵌入式的 linux 發行版。openwrt是乙個高度模組化 高度自動化的嵌入式linux系統,擁有強大的網路元件和擴充套件性,常常被用於工控裝置 小型機械人 智慧型家居。其不同於其他許多用於路由器的發行版,它是乙個從零開始編寫...

Linux 嵌入式開發環境搭建

主機 ubuntu14.04 開發板 tq210v3 開始載命令列模式下直接安裝了乙個arm linux gcc sudo apt get install gcc arm linux gnueabi但是用這個編譯了乙個hello world的程式後無法在開發板上執行,提示 hello not fou...

嵌入式Linux開發環境搭建

主機與目標板結合的交叉開發模式 即在pc主機上編輯 編譯軟體,然後在目標板上執行 驗證程式。嵌入式裝置的資源並不足以用來開發軟體,因此都是採用主機與目標板結合的交叉開發模式開發軟體。最初的嵌入式裝置是乙個空白的系統,需要通過主機為它構建基本的軟體系統,並燒寫到裝置中。對於開發板,進行嵌入式linux...