姓名:鄧皓軒? 學號:19020100151? 學院:電子工程學院
轉自:嵌入式Linux常用GUI系統_行知致簡的專欄-CSDN博客
【嵌牛導讀】嵌入式Linux常用GUI系統
【嵌牛鼻子】介紹嵌入式Linux常用GUI系統
【嵌牛提問】嵌入式Linux常用GUI系統有哪些
1.Linux中的一些GUI基礎架構
1.1 X Window
1.2 SVGALib
1.3 FrameBuffer
1.4 LibGGI
2 Linux領域內的高級圖形庫
2.1 Xlib及相關的其他一些圖形庫
2.2 SDL (Simple DirectMedia Layer)
2.3 Allegro
2.4 Mesa3D
2.5 DirectFB
3 嵌入式Linux系統中的GUI(圖形用戶界面)
3.1 NanoX(舊稱MicoroWindows)
3.2 OpenGUI(舊稱FastGL)
3.3 Qt / Embedded
== Qt library TrollTech
TrollTech已被Nokia收購,所以之前主頁:
會跳轉到:
3.4 MiniGUI
【參考資料】
1.Embedded Linux Graphics System
4.Wind River Tilcon Graphics Suite
https://blog.csdn.net/anyuliuxing/article/details/78431561
2017年11月03日 09:23:12anyuliuxing閱讀數 13966更多
所屬專欄:MiniGUI
?版權聲明:本文為博主原創文章,未經博主允許不得轉載。如果轉載,請注明出處。 https://blog.csdn.net/anyuliuxing/article/details/78431561
本文主要說明了MicroWindows、MiniGui、QT、GTK+、OpenGUI和FLTK,第七小節是對比的詳細表格,內容是根據網上的一些資料還有各大開源GUI的官網的資料整理而來,目的是為自己以后學習把握方向。
首先看一下效果圖片吧,都在MicroWindows官網
Microwindows 是一個著名的開放式源碼嵌入式GUI 軟件,遵循MPL協議,目的是把圖形視窗環境引入到運行Linux 的小型設備和平臺上。作為X Window 的替代品,Microwindows可以使用更少的RAM 和文件存儲空間(100K-600K)提供與X Window 相似的功能。Microwindows 允許設計者輕松加入各種顯示設備、鼠標、觸摸屏和鍵盤等。Microwindows 的可移植性非常好,基本上用 C 語言實現,只有某些關鍵代碼使用了匯編以提高速度。Microwindows 支持ARM芯片。盡管Microwindows 完全支持linux,但是它內部的可移植結構是基于一個相對簡單的屏幕設備接口,可在許多不同的RTOS和裸機上運行。
Microwindows 的圖形引擎能夠運行在任何支持readpixel, writepixel,drawhorzline, drawvertline 和setpalette 的系統之上。在底層函數的支持之下,上層實現了位圖,字體,光標以及顏色的支持。系統使用了優化的繪制函數,這樣當用戶在移動窗口時可以提供更好的響應。內存圖形繪制和移動的實現使得屏幕畫圖顯得很平滑,這點特別在顯示動畫、多邊形繪制、任意區域填充、剪切時有用。Microwindows 支持新的Linux內核幀緩存(FrameBuffer)結構,目前提供每像素1、2、4、8、16、24 和32 位的支持,另外還支持彩色顯示和灰度顯示,其中彩色顯示包括真彩色(每像素15、16 和32 位)和調色板(每像素1, 2, 4 和 8 位)兩種模式。在彩色顯示模式下,所有的顏色用RGB 格式給出,系統再將它轉換成與之最相似的可顯示顏色,而在單色模式下中則是轉換成不同的灰度級。Microwindows支持窗口覆蓋和子窗口概念、完全的窗口和客戶區剪切、比例和固定字體,還提供了字體和位圖文件處理工具。Microwindows支持的中文字符集是GB2312,并不支持Unicode。
Microwindows 采用分層設計方法。在最底層,屏幕,鼠標/觸摸屏以及鍵盤驅動程序提供了對物理設備訪問的能力。在中間層,實現了一個可移植的圖形引擎,支持行繪制,區域填充,剪切以及顏色模型等。在上層,實現多種API 以適應不同的應用環境。
兩種API:Win32和Nano-X
Microwindows中使用兩種流行的圖形編程接口:Microsoft Windows Win32/WinCE圖形顯示接口(GDI)和Xlib-like接口。前者應用于所有的Windows CE和Win32應用程序,后者就象Nano-X,應用于所有Linux X插件集的最底層。這樣做可以讓大量的Windows程序員開發圖形應用程序,類似地也可以讓Linux圖形程序員用X接口開發圖形應用程序。
Nano-X服務器占用的資源大約在100K到150K。原始Nano-X應用程序的平均大小在30K到60K。由于Nano-X是為有內存限制的低端設備設計的,所以它不象X那樣支持很多函數,因此它實際上不能作為微型X(Xfree86)的替代品。
Microwindows系統以圖形方式支持目標平臺的主機平臺仿真。也就是說,用于Linux的Microwindows應用程序可以在桌面上進行開發和原型設計,運行和測試,而無需在目標平臺上進行交叉編譯和運行。這是使用Microwindows’ X screen驅動程序完成的,而不是framebuffer驅動程序,其中目標應用程序在桌面主機上運行并顯示在X窗口中。可以告訴驅動程序以每像素位數和顏色深度精確地模擬目標平臺的顯示。因此,即使桌面系統是24位顏色,它可以顯示一個2bpp灰度級來預覽目標應用程序。由于主機和目標機都運行Linux,因此大多數所有操作系統服務都可在桌面主機上使用。
MiniGui官網,更多效果圖參見我前面寫的文章《MiniGui Samples運行效果》
MiniGUI 是針對嵌入式系統設計和優化的完整圖形支持系統,遵循GPL協議。作為操作系統和應用程序之間的一個中間件,MiniGUI 將底層操作系統和硬件平臺的細節隱藏起來,并為上層的應用程序提供了一致接口。MiniGUI 的主要技術特性描述如下:
跨操作系統支持,具體包括普通嵌入式 Linux/uClinux、VxWorks、eCos、uC/OS-II、pSOS、ThreadX、Nucleus、OSE 等,同時還提供 Win32 平臺上的 SDK 開發包,方便嵌入式應用程序的開發和調試。
多運行模式支持,為了適應不同的操作系統運行環境,MiniGUI可配置成三種運行模式:MiniGUI-Threads、MiniGUI-Processes及MiniGUI-Standalone。
內建資源支持。我們可以將 MiniGUI 所使用的資源,諸如位圖、圖標和字體等編譯到函數庫中,該特性可提高 MiniGUI 的初始化速度,并且非常適合 eCos/uCOS-II/ThreadX 等無文件系統支持的實時嵌入式操作系統。
完備的多窗口機制和消息傳遞機制。
提供常用的控件類,包括靜態文本框、按鈕、單行和多行編輯框、列表框、組合框、菜單按鈕、進度條、滑塊、屬性頁、工具欄、樹型控件、月歷控件、旋鈕控件、酷工具欄、網格控件、動畫控件等。
對話框和消息框支持。
其它 GUI 元素,包括菜單、加速鍵、插入符、定時器等。
界面皮膚支持,用戶可通過皮膚支持獲得華麗的圖形界面。
支持低端顯示設備(比如單色 LCD)和高端顯示設備(8 位色及以上顯示設備)。通過 MiniGUI 的圖形抽象層及圖形引擎技術,還可以支持特殊的顯示設備,比如 YUV 顯示設備。
提供有增強 GDI 函數,包括光柵操作、復雜區域處理、橢圓、圓弧、多邊形以及區域填充等函數。在提供有兼容于 C99 規范的數學庫平臺上,還提供有高級二維繪圖函數,可設置線寬、線型以及填充模式等。通過 MiniGUI 的圖形抽象層及圖形引擎技術,我們也可以讓上述高級 GDI 接口在低端顯示屏上實現。
Windows 的資源文件支持,如位圖、圖標、光標等。
各種流行圖像文件的支持,包括 Windows BMP、GIF、JPEG、PNG等(JPEG 及 PNG的支持通過 libjpeg 及 libpng 函數庫提供)。
多字符集和多字體支持,目前支持 ISO8859-1~ISO8859-15、GB2312、GBK、GB18030、BIG5、EUC-JP、Shift-JIS、EUC-KR、UNICODE(UTF-8、UTF-16 編碼)等字符集,支持等寬點陣字體、變寬點陣字體、Qt/Embedded 使用的嵌入式字體 QPF、TrueType 以及 Adobe Type1 等矢量字體(TrueType 及 Type1 的支持分別通過 freetype 1.3 及 libt1 函數庫提供)。同時,對于點陣字體 MiniGUI 也可以進行自動放大處理,并可針對電視等特殊顯示設備實現防鋸齒功能。
多種鍵盤布局的支持。MiniGUI 除支持常見的美式 PC 鍵盤布局之外,還支持法語、德語等西歐語種的鍵盤布局。
輸入法支持,用于提供各種可能的輸入形式;內建有適合 PC 平臺的漢字(GB2312)輸入法支持,包括內碼、全拼、智能拼音、五筆及自然碼等。
針對嵌入式系統的特殊支持,包括一般性的 I/O 流操作,字節序相關函數等。
副屏支持,當系統中有多個視頻設備時,可將一個作為MiniGUI的主屏,實現完整的多窗口系統;而其它設備作為副屏,在其上通過MiniGUI 的圖形接口來實現文字渲染、圖形顯示等功能。
和其它針對嵌入式產品的圖形系統相比,MiniGUI 在對系統的需求上具有如下幾大優勢:
可伸縮性強
MiniGUI 豐富的功能和可配置特性,使得它既可運行于 CPU 主頻只有 60MHz 的低端產品中,亦可運行于高端嵌入式設備中,并使用 MiniGUI 的高級控件風格及皮膚界面等技術,創建華麗的用戶界面。
MiniGUI 的跨操作系統特性,使得 MiniGUI 可運行在最簡單的嵌入式操作系統之上,如 uC/OS-II,也可以運行在具有現代操作系統特性的嵌入式操作系統之上,如 Linux,而且 MiniGUI 為嵌入式 Linux 系統提供了完整的多窗口圖形環境。這些特性,使得MiniGUI 具有非常強的可伸縮性。可伸縮性是 MiniGUI 從設計之初就考慮且不斷完善而來的。這個特性使得 MiniGUI 可應用于簡單的行業終端,也可應用于復雜的消費類電子產品。
輕型、占用資源少
MiniGUI 是一個定位于輕量級的嵌入式圖形庫,對系統資源的需求完全考慮到了嵌入式設備的硬件情況,如 MiniGUI 庫所占的空間最小可以裁剪到500K左右,對目前的嵌入式設備來說,滿足這一條件是綽綽有余的。此外,測試結果表明,MiniGUI 能夠在 CPU 主頻為30 MHz,僅有4M RAM的系統上正常運行(使用 uClinux 操作系統),這是其它針對嵌入式產品的圖形系統所無法達到的。
高性能、高可靠性
MiniGUI 良好的體系結構及優化的圖形接口,可確保最快的圖形繪制速度。在設計之初,我們就充分考慮到了實時嵌入式系統的特點,針對多窗口環境下的圖形繪制開展了大量的研究及開發,優化了 MiniGUI 的圖形繪制性能及資源占用。MiniGUI 在大量實際系統中的應用,尤其在工業控制系統的應用,證明 MiniGUI 具有非常好的性能。
從 1999 年 MiniGUI 的第一個版本發布以來,就有許多產品和項目使用 MiniGUI,MiniGUI 也不斷從這些產品或者項目當中獲得發展動力和新的技術需求,逐漸提高了自身的可靠性和健壯性。有關 MiniGUI 的最新成功案例,您可以訪問飛漫公司網站的典型案例部分:http://www.minigui.org/
可配置性
為滿足嵌入式系統各種各樣的需求,必須要求 GUI 系統是可配置的。和 Linux 內核類似,MiniGUI 也實現了大量的編譯配置選項,通過這些選項可定 MiniGUI 庫中包括哪些功能而同時不包括哪些功能。大體說來,我們可以在如下幾個方面對 MiniGUI 進行定制配置:
指定 MiniGUI 要運行的硬件平臺。 指定 MiniGUI 要運行的操作系統。 指定生成基于線程的 MiniGUI-Threads 運行模式還是基于進程的 MiniGUI-Processes 運行模式,或者只是最簡單的 MiniGUI-Standalone 運行模式。 指定需要支持的 GAL 引擎和 IAL 引擎,以及引擎相關選項。 指定需要支持的字體類型。 指定需要支持的字符集。 指定需要支持的圖像文件格式。 指定需要支持的控件類。 指定控件和窗口的整體風格,可以通過指定不同的渲染器完成。 這些配置選項大大增強了 MiniGUI 的靈活性,對用戶來講,可針對具體的應用需求量體裁衣,開發最適合產品需求的應用軟件。
QT官網,效果圖如下
Qt 是一個跨平臺的C++應用程序框架,支持Windows、Linux、Mac OS X、Android、iOS、Windows Phone、嵌入式系統等。也就是說,Qt 可以同時支持桌面應用程序開發、嵌入式開發和移動開發,覆蓋了現有的所有主流平臺。你只需要編寫一次代碼,發布到不同平臺前重新編譯即可。
Qt 不僅僅是一個GUI庫,它除了可以創建漂亮的界面,還有很多其他組件,例如,你不再需要研究STL,不再需要C++的頭文件,不再需要去找解析XML、連接數據庫、Socket 的各種第三方庫,這些 Qt 都已經內置了。Qt 是應用程序開發的一站式解決方案!Qt 雖然龐大,封裝較深,但它的速度并不慢,雖不及MFC,但比Java、C#要快。Qt 程序最終會編譯成本地代碼,而不是依托虛擬機。
使用Qt開發的軟件,相同的代碼可以在任何支持的平臺上編譯與運行,而不需要修改源代碼。會自動依平臺的不同,表現平臺特有的圖形界面風格。
Linux/X11:用于X Window System(如Solaris、AIX、HP-UX、Linux、BSD)。支持KDevelop和Eclipse IDE集成
Mac:用于Apple Mac OS X。基于Cocoa框架。支持Universal Binary。支持以Xcode編輯、編譯和測試。
Windows:用于Microsoft Windows。支持Visual Studio集成,也可以使用MinGW編譯
Embedded Linux:用于嵌入式Linux。可以通過編譯移除不常使用的組件與功能。通過自己的視窗系統QWS,不需依賴X Window System,直接寫入Linux幀緩沖。可以減少內存消耗。并提供虛擬幀緩沖QVFb,方便在桌面系統上進行嵌入式測試。
Windows CE / Mobile:用于Windows CE
Symbian:用于Symbian platform
Maemo/MeeGo:用于Maemo
Wayland:用于Wayland顯示服務器,Qt應用程序可以在運行時切換圖形后端,如X與Wayland。
Gtk+官網,效果圖如下
Gtk+(GIMP Tool Kit,GIMP工具包)是一個用于創造圖形用戶接口的圖形庫。Gtk+是基于LGPL授權的,因此可以用Gtk+開發開放源碼軟件、自由軟件,甚至商業的、非自由的軟件,并且不需要為授權費或版權費花費一分錢。Gtk已在大量軟件項目,包括Gnome中得到了廣泛應用。
Gtk+圖形庫使用一系列稱為“構件”的對象來創建應用程序的圖形用戶接口。它提供了窗口、標簽、命令按鈕、開關按鈕、檢查按鈕、無線按鈕、框架、列表框、組合框、樹、列表視圖、筆記本、狀態條等構件。可以用它們來構造非常豐富的用戶界面。
GTK本質上是面向對象的應用程序編程接口(API)。GObject 也就是這種面向對象的機制可以為 GTK+綁定很多種開發語言。雖然完全是用C寫成的,但它仍然是用類和回調函數(指向函數的指針)的方法實現的。因為Gtk+是用C語言編寫的,所以在開發Linux下的GUI程序時使用C語言是非常方便的。 在GTK下還可以使用圖形化編程工具Glade,一種GUI生成器,可以快速生成創建界面的C源程序。
自從Qt推出了嵌入式版本之后,雖然GTK+并非商業公司所發展,但也加緊腳步推出了GtkFB方案,其宗旨就是要為嵌入式系統推出一套基于GTK+的GUI解決方案。與Qt/Embedded類似,GtkFB也跳過X層直接與FrameBuffer溝通,因此也具有Qt/Embedded的幾項優點,不過由于不是商業軟件,在發展的速度上較為緩慢。
OpenGUI官網,效果圖如下
OpenGUI在Linux系統上存在已經很長時間了。這個庫是用C++編寫的,只提供C++接口。OpenGUI基于一個用匯編實現的x86圖形內核,提供了一個高層的C/C++圖形/窗口接口。OpenGUI提供了二維繪圖原語、消息驅動的API及BMP文件格式支持。OpenGUI功能強大,使用方便。OpenGUI 支持鼠標和鍵盤的事件,在Linux上基于FrameBuffer或者SVGALib實現繪圖。由于其基于匯編實現的內核并利用MMX指令進行了優化,OpenGUI運行速度非常快。正由于其內核用匯編實現,可移植性受到了影響。通常在驅動程序一級,性能和可移植性是矛盾的,必須找到一個折衷。OpenGUI采用LGPL條款發布。OpenGUI比較適合于基于x86平臺的實時系統,跨平臺的可移植性較差,目前發展較慢。
FLTK官網,效果圖如下
FLTK,如同其名字所表達的:The Fast Light Toolkit,一個輕量級的GUI開發庫。但這輕量級并不代表功能的羸弱,相反,FLTK在具有基本的GUI功能之外,還擁有一些特殊的功能,比如跨平臺、內置 OpenGL功能、速度更快、尺寸更小、協議(LGPL)寬松等。當然,缺點也是有的,比如對于復雜的界面構件支持不夠,資源支持的不足等。
FLTK的底層只提供一套完整的畫點、畫線功能,另外附帶了字體的顯示功能,但FLTK對字體的支持還很粗糙。
最大的缺點是:就是對非英文字體特別是中文的支持比較差,甚至是非常差,它不支持unicode編碼。需要到2.0版本才可能支持,還在開發當中。
MiniGUI和MicroWindows均為自由軟件,但這兩個系統的技術路線卻有所不同。MiniGUI的策略是建立在比較成熟的圖形引擎之上,比如Svgalib和LibGGI,開發的重點在于窗口系統、圖形接口之上。而MicroWindows的開發重點則在底層的圖形引擎之上,所以可以對裸顯示器直接操作,而窗口系統和圖形接口方面的功能還稍有欠缺。比如說,MiniGUI有一套用來支持多字符集和多編碼的函數接口,可以支持各種的字符集,包括GB、BIG5、UNI-CODE等。
Nano-X 的優點
與Xlib實現不同,Nano-X仍在每個客戶機上同步運行,這意味著一旦發送了客戶機請求包,服務器在為另一個客戶機提供服務之前一直等待,直到整個包都到達為止。這使服務器代碼非常簡單,而運行的速度仍非常快;占用很小的資源。
Nano-X 的缺點
1、聯網功能部件至今沒有經過適當地調整(特別是網絡透明性);
2、還沒有太多現成的應用程序可用;
3、沒有很多文檔說明而且沒有很好的支持
4、圖形引擎中存在許多低效算法,值得一提的是,該項目的許多控件是從 MiniGUI 中移植過去的,掃雷游戲也是從 MiniGUI 中移植過去的。由于該項目缺乏一個強有力的核心代碼維護人員,2010年Microwindows推出版本0.92后,該項目的發展開始陷于停滯狀態。
MiniGui優點
將現代窗口和圖形技術帶入到嵌入式設備的MiniGUI,是一個非常適合于實時嵌入式設備的高效、可靠、可定制、小巧靈活的圖形用戶界面支持系統,而且還有miniStudio集成開發環境
1、支持多種嵌入式操作系統,具備優秀的可移植性;
2、可伸縮的系統架構,易于擴展;
3、功能豐富,可靈活剪裁;
4、小體積高性能間的最佳平衡;
5、廣泛的應用領域。
MiniGui缺點
1、對圖形設備的抽象層次太高。
名稱MiniGuiMicroWindows備注
廠商飛漫(中國)世紀軟件(美國)?
開發語言CC?
開源協議GPLMPL?
體系結構類WIN32WIN32/Nano-X?
最新版本3.0.12(2012.01)0.92(2010.12)都很久沒有更新
資源占用最小500K100K~600K?
網上資源一般少?
技術資料一般較少,官網有?
開發環境vim、eclipsevim、eclipse?
移植難度相同相同移植難度都不太大
復雜度中中?
學習難度中中應用程序實現類似
應用范圍中中根據網上資料
MiniGui支持系統:Linux/uClinux、VxWorks、eCos、uC/OS-II、pSOS、ThreadX、Nucleus、OSE 等,同時還提供 Win32 平臺上的 SDK 開發包
MicroWindows支持系統:Linux、RTOS、裸機、X Window、MSDOS、能夠在支持readpixel,writepixel,drawhorzline和drawvertline和setpalette的任何系統上運行
QT優點
相對來說易學:Qt封裝的很好,幾行代碼就可以開發出一個簡單的客戶端,Qt是面向對象的,Qt對于用戶開發而言是十分方便的,因為Qt良好的封裝機制令Qt的模塊化程度非常高并且可重用性好。
資料豐富:資料豐富能夠成倍降低學習成本,否則只能去看源碼,
漂亮的界面:Qt很容易做出漂亮的界面和炫酷的動畫
獨立安裝:Qt程序最終會編譯為本地代碼,不需要其他庫的支撐,
跨平臺:如果程序需要運行在多個平臺下,同時又希望降低開發成本,Qt幾乎是必備的。
集成環境:Qt Creator為廣大開發者提供了免費而又友好的集成開發環境。
QT缺點
庫很大,Qt庫如果不進行裁剪的話,實在是太大了,Qt5中的icudt52.dll就有20多M
qt Embedded memeory requirememnts:
Architecture編譯器QtCoreQtGuiQtNetworkQtWebKit
最小正常最小正常最小正常最小正常
linux x86 g++GCC 4.2.41.7M2.7M3.3M9.9M653K1.1MN/A17M
linux arm g++GCC 4.1.11.9M3.2M4.1M11M507K1.0MN/A17M
linux mips g++ (MIPS32)GCC 4.2.42.0M3.2M4.5M12M505K1003KN/A?
GTK+優點
完全Cairo繪制:Cairo是什么?它是一個矢量的繪圖庫,GTK+2.8,Cairo才開始作為GTK的重要繪圖引擎,從來帶來矢量、抗鋸齒等特性
支持CSS的主題API,還支持簡單的動畫屬性
多點設備的支持,設計靈活、可擴展
GObject Introspection:它讓GTK+的語言擴展能力盡乎無限。以前,除了GTK+、GTKMM(C++)以外,還有一些動態語言的綁定,如Pygtk、perl-gtk。但這些實現是各種獨立的,維護成本非常高。但是GObject Introspection實現了GObject對象的統一調用,這意味著各種語言只要實現一個GObject Introspection的包裝,什么GTK+的API,都可以通過它來調用了。就像在Python里用ctype一樣,但是通過GI技術,能像使用原生API一樣來使用這些C庫。目前為止,對GI支持比較好的已經有Python、JavaScript了。GNOME 3.0的重要組件——GNOME Shell即是使用了JavaScript來實現其UI邏輯部分。
QT支持系統:Linux/X11、Mac、Windows、Android、IOS、Embedded Linux、Windows CE/Mobile、Maemo/MeeGo、Wayland,Qt 可以同時支持桌面應用程序開發、嵌入式開發和移動開發,覆蓋了現有的所有主流平臺
GTK+支持系統:GNU/Linux and Unix、Windows、Mac OS X、X11、Win32、HTML 5、Wayland