第6章 嵌入式linux圖形用戶接口(miniGUI)_第1頁
第6章 嵌入式linux圖形用戶接口(miniGUI)_第2頁
第6章 嵌入式linux圖形用戶接口(miniGUI)_第3頁
第6章 嵌入式linux圖形用戶接口(miniGUI)_第4頁
第6章 嵌入式linux圖形用戶接口(miniGUI)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第6章

(第二部分)

圖形用戶接口——MiniGUI主要內容1426MiniGUI簡介MiniGUI在Linux下運行環(huán)境的建立Linux下S3C2410FrameBuffer的啟動MiniGUI輸入引擎IAL的開發(fā)7在S3C2410上運行簡單的繪圖程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真應用MiniGUI簡介

MiniGUI是一種在嵌入式系統(tǒng)中提供圖形及圖形用戶界面支持的中間件技術,是面向嵌入式系統(tǒng)的輕量級圖形用戶界面支持系統(tǒng),國內著名的自由軟件項目之一。MiniGUI是一個自由軟件項目。其目標是提供一個快速、穩(wěn)定、跨操作系統(tǒng)的圖形用戶界面(GUI)支持系統(tǒng),尤其是基于Linux/uClinux、eCos以及其他傳統(tǒng)RTOS(如VxWorks、ThreadX、uC/OS-II、Nucleus

等)的實時嵌入式操作系統(tǒng)。MiniGUI的演進1998年12月,飛漫軟件創(chuàng)始人魏永明開始開發(fā)MiniGUI,并遵循GPL(GNUGeneralPublicLicense)發(fā)布MiniGUI。2002年9月,MiniGUI的核心開發(fā)者組件了北京飛漫軟件技術有限公司(飛漫軟件),并開始嘗試MiniGUI的商業(yè)化經營。現(xiàn)在,飛漫軟件仍然以自由軟件項目形式維護和發(fā)展MiniGUI2008年10月,飛漫軟件發(fā)布MiniGUI3.0版網址:應用領域電信(手機、多媒體設備、IPTV)工業(yè)儀表醫(yī)療儀器軍工等。功能特性完備的多窗口機制和消息傳遞機制。常用的控件類,包括靜態(tài)文本框、按鈕、單行和多行編輯框、列表框、組合框、進度條、屬性頁、工具欄、拖動條、樹型控件、月歷控件等。支持對話框和消息框以及其它GUI元素,包括菜單、加速鍵、插入符、定時器等。通過兩種不同的內部軟件結構支持低端顯示設備(比如單色LCD)和高端顯示設備(比如彩色顯示器)。前者小巧靈活,而后者在前者的基礎上提供了更加強大的圖形功能。支持Windows的資源文件,如位圖、圖標、光標等。支持各種流行的圖像文件,包括JPEG、GIF、PNG、TGA、BMP等等。支持多字符集和多字體。針對嵌入式系統(tǒng),支持一般性的I/O操作和文件操作等。MiniGUI

的技術優(yōu)勢和其它針對嵌入式產品的圖形系統(tǒng)相比,MiniGUI具有如下幾大技術優(yōu)勢:1.占用資源少2.高性能、高可靠性3.可定制配置4.跨操作系統(tǒng)支持硬件支持理論上講,MiniGUI的運行和具體的硬件平臺無關;只要某個硬件平臺上運行有MiniGUI

所支持的某個操作系統(tǒng),MiniGUI就能在這個平臺上運行。在業(yè)界使用的眾多硬件平臺中,其中已驗證可運行MiniGUI

的硬件平臺包括Intelx86、ARM、PowerPC、MIPS、DragonBall、ColdFire等。對系統(tǒng)資源的占用情況MiniGUI

本身的占用空間非常小,以嵌入式Linux操作系統(tǒng)為例,MiniGUI的典型存儲空間占用情況如下:Linux內核:300KB~500KB(由系統(tǒng)需求決定);文件系統(tǒng):500KB~2MB(由系統(tǒng)需求決定);MiniGUI

支持庫:500KB~900KB(由編譯選項確定);MiniGUI

字體、位圖等資源:典型400KB(由應用程序需求確定,最低可在200KB以內);應用程序:100KB~2MB(由具體的應用需求確定)??傮w的系統(tǒng)占有空間在2MB到4MB左右。在某些系統(tǒng)上,尤其是在傳統(tǒng)嵌入式操作系統(tǒng)中,功能完備的MiniGUI

系統(tǒng)本身所占用的空間可進一步縮小到1MB以內。MiniGUI的軟件架構MiniGUI

運行模式

MiniGUI-Threads。運行在MiniGUI-Threads上的程序可以在不同的線程中建立多個窗口,但所有的窗口在一個進程或者地址空間中運行。主要用來支持大多數(shù)傳統(tǒng)意義上的嵌入式操作系統(tǒng),比如VxWorks、ThreadX、Nucleus、OSE、pSOS、uC/OS-II、eCos等等。在Linux和uClinux上也能運行。MiniGUI-Processes。每個程序是單獨的進程,每個進程也可以建立多個窗口,并且實現(xiàn)了多進程窗口系統(tǒng)。MiniGUI-Processes適合于具有完整UNIX特性的嵌入式操作系統(tǒng),比如嵌入式Linux。該運行模式在MiniGUIV2.0.x中提供,在MiniGUIV3.0中得到進一步增強。

各操作系統(tǒng)上可運行的MiniGUI

運行模式

表4.1MiniGUI

在操作系統(tǒng)上的運行模式操作系統(tǒng)

MiniGUI版本

所支持的運行模式

LinuxMiniGUIV3.0.xMiniGUI-Processes

MiniGUI-Threads

MiniGUI-StandaloneLinuxMiniGUIV2.0.xMiniGUI-Processes

MiniGUI-Threads

MiniGUI-StandaloneuClinuxMiniGUIV1.6.xMiniGUI-Threads

MiniGUI-StandaloneVxWorks6.xMiniGUIV1.6.xMiniGUI-ThreadsThreadX

MiniGUIV1.6.xMiniGUI-ThreadsNucleusMiniGUIV1.6.xMiniGUI-ThreadsOSEMiniGUIV1.6.xMiniGUI-ThreadseCosMiniGUIV1.6.xMiniGUI-ThreadsuC/OS-IIMiniGUIV1.6.xMiniGUI-ThreadspSOSMiniGUIV1.6.x

MiniGUI-ThreadsMiniGUI-Threads運行模式的消息通訊機制MiniGUI

運行模式

MiniGUI-Standalone。MiniGUI可以以獨立任務的方式運行,既不需要多線程也不需要多進程的支持,這種運行模式適合功能單一的應用場合。比如在一些使用uClinux的嵌入式產品中,因為各種原因而缺少線程支持,這時,就可以使用MiniGUI-Standalone來開發(fā)應用軟件。總之:MiniGUI-Standalone模式的適應面最廣,可以支持幾乎所有的操作系統(tǒng);MiniGUI-Threads模式的適用面次之;MiniGUI-Processes支持Linux。MiniGUI目前的開發(fā)方式基于MiniGUI

的開發(fā)可以在Linux或Windows操作系統(tǒng)下進行。由于MiniGUI

完全用C來編寫,具有非常好的移植性,也使得MiniGUI

應用程序的交叉編譯工作十分方便。為嵌入式設備編寫的應用程序可以在任何安裝在針對該設備的交叉編譯工具鏈的平臺上進行編譯。最常見的方式是在Linux環(huán)境下安裝gcc的交叉編譯器,對應用程序進行編譯。對于某些嵌入式系統(tǒng)(如VxWorks,uC/OS-II),則一般在Windows下安裝相應的編譯環(huán)境(如Tornado、ADS等),對應用程序進行編譯。如果MiniGUI

應用程序在Linux環(huán)境下開發(fā),它可以有兩種運行方式。一種是直接在內核支持的FrameBuffer控制臺下運行,一種則是在一個模擬FrameBuffer?

的X11應用程序(qvfb)下運行并完成調試。如果MiniGUI

應用程序在Windows下開發(fā),則可以使用VisualStudio集成開發(fā)環(huán)境進行開發(fā)及編譯,并在模擬FrameBuffer?

的Windows應用程序(wvfb)下運行應用程序并調試(如圖5.1所示)。主要內容1426MiniGUI簡介MiniGUI在Linux下運行環(huán)境的建立Linux下S3C2410FrameBuffer的啟動MiniGUI輸入引擎IAL的開發(fā)7在S3C2410上運行簡單的繪圖程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真應用6.2.1MiniGUI在Linux下的運行環(huán)境在運行Linux的PC機上,MiniGUI應用程序可以通過以下兩種方式運行:在XWindow上,在虛擬FrameBuffer的QVFB中運行;在Linux的字符控制臺上,在Linux內核提供的FrameBuffer驅動上運行。QVFBFrameBuffer設備驅動QVFB是Qt(Qt是Linux窗口管理器KDE使用的底層函數(shù)庫)提供的一個虛擬的FrameBuffer工具。在XWindow環(huán)境下,進行基于QVFB之上的MiniGUI模擬開發(fā)、調試是常用的開發(fā)調試手段。對于大部分兼容VESA標準顯卡的PC機,使用RedHat內核中包含的VESAFrameBuffer驅動程序就可以運行MINIGUI了。如果自己編譯內核,則需要選中FrameBuffer的支持。

6.2.2安裝資源文件在Linux環(huán)境下,把該文件復制到/opt/emulation目錄下(emulation目錄為創(chuàng)建的目錄)。執(zhí)行如下解壓縮命令:[root@localhostemulation]#tarzxvfminigui-res-1.3.3.tar.gz該命令將建立minigui-res-1.3.3目錄,然后進入該目錄:[root@localhostemulation]#

cdminigui-res-1.3.3最后,通過makeinstall命令安裝資源文件:[root@localhostminigui-res-1.3.3]#makeinstall這樣,資源文件就安裝到/usr/local/lib/minigui/res目錄。

6.2.3配置安裝MiniGUI庫文件MiniGUI是以庫的形式提供給用戶的,通過將MiniGUI的庫文件編譯進應用程序來使用MiniGUI。步驟如下:1、下載壓縮的庫文件libminigui-1.3.3.tar.gz2、解壓縮

tarzxvflibminigui-1.3.3.tar.gz

3、配置圖形界面

makemenuconfig4、安裝庫文件makemakeinstall

主要內容1426MiniGUI簡介MiniGUI在Linux下運行環(huán)境的建立Linux下S3C2410FrameBuffer的啟動MiniGUI輸入引擎IAL的開發(fā)7在S3C2410上運行簡單的繪圖程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真應用在QVFB上運行示例程序的步驟

mg-samples-1.3.1目錄下包含了MiniGUI提供的多個示例程序,通過在mg-samples-1.3.1目錄下依次執(zhí)行./configure命令和make命令,可以將這些示例程序編譯生成可執(zhí)行程序。1.按照如下配置,修改/usr/local/etc目錄下的配置文件MiniGUI.cfg。[system]gal_engine=fbcon改為gal_engine=qvfbial_engine=console改為ial_engine=qvfb[qvfb]defaultmode=320x240-8bpp

2.使用qvfb&命令啟動已經安裝的qvfb,并在File菜單下配置qvfb為320x240-8bpp模式。3.運行/opt/emulation/mg-samples/src/目錄中的可執(zhí)行程序。在QVFB上運行自己編寫的應用程序的步驟

假設文件名為demo.c,需要的步驟如下:1.進入mg-samples-1.3.1目錄,執(zhí)行./configure;

2.把文件demo.c復制到/opt/emulation/mg-samples-1.3.1/src目錄下;3.打開該目錄下的文件Makefile.am:在COMMON_PROGS=的內容末尾填加可執(zhí)行文件名demo。然后,在noinst_PROGRAMS=$(COMMON_PROGS)$(LITE_PROGS)下填加demo_SOURCES=demo.c。4.在目錄/opt/emulation/mg-samples-1.3.1/src下,執(zhí)行make命令,生成可執(zhí)行文件demo;

5.修改/usr/local/etc目錄下MiniGUI的配置文件MiniGUI.cfg6.在/opt/emulation/mg-samples-1.3.1/src目錄下執(zhí)行qvfb&命令;7.執(zhí)行demo程序:[root@localhostsrc]#./demo主要內容1426MiniGUI簡介MiniGUI在Linux下運行環(huán)境的建立Linux下S3C2410FrameBuffer的啟動MiniGUI輸入引擎IAL的開發(fā)7在S3C2410上運行簡單的繪圖程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真應用

6.4.1FrameBuffer簡介

FrameBuffer是出現(xiàn)在linux2.2.xx及以上內核當中的一種驅動程序接口。這種接口將顯示設備抽象為幀緩沖區(qū)。用戶可以將它看成是顯示內存的一個映像,將其映射到進程地址空間之后,就可以直接進行讀寫操作,寫操作可以立即反映在屏幕上。該驅動程序的設備文件一般是/dev/fb0、/dev/fb1等等。在應用程序中,若想使用FrameBuffer,一般需要把FrameBuffer設備文件映射到進程地址空間。操作方法是首先打開/dev/fb0設備,然后通過mmap系統(tǒng)調用進行地址映射,接下來就可以對Framebuffer進行操作了。

6.4.2FrameBuffer驅動的添加將支持S3C2410的FrameBuffer驅動的源程序S3C2410fb.c編譯進內核。為了保證編譯成功,還需要對如下相關文件進行修改:kernel/drivers/video/Config.in這個文件包含許多與顯示相關的配置信息。

kernel/drivers/video/Makefile在該文件中設置如果配置時選擇了CONFIG_FB_S3C2410,就會將S3C2410FrameBuffer的驅動程序加入linux內核。

kernel/drivers/video/fbmem.c該文件的作用是告訴內核如何調用相應的FrameBuffer驅動。

6.4.3FrameBuffer設備文件的添加Linux要在嵌入式系統(tǒng)上運行,還需要文件系統(tǒng)的支持。應用程序對FrameBuffer驅動程序的使用是通過設備文件來進行的。所以,必須在文件系統(tǒng)中創(chuàng)建FrameBuffer相應的設備文件,才能讓應用程序使用FrameBuffer驅動。由于設備文件使用了設備文件系統(tǒng),因此,可以不必考慮其主次設備號,只需要考慮驅動程序調用的是設備fb0即可,但又因為設備文件系統(tǒng)生成的設備文件為fb/0,所以需要在文件系統(tǒng)中做一個符號連接,也就是當找到fb/0時,直接連接到fb0。要實現(xiàn)以上的符號連接,只需要在文件系統(tǒng)的/usr/etc/rc.local文件中添加

ln-sfb/0fb0

6.4.4FrameBuffer測試程序編寫

FrameBuffer程序移植完成后,需要對其進行測試,確保沒有問題后才能進行下一步MiniGUI的移植。測試程序的主要功能是:在文件系統(tǒng)中添加一個應用程序,通過系統(tǒng)調用打開/dev/fb0設備文件,顯示相應的信息,并向映射的緩存寫入顯示數(shù)據(jù),在LCD屏上顯示間隔相等的多種顏色條紋。主要內容1426MiniGUI簡介MiniGUI在Linux下運行環(huán)境的建立Linux下S3C2410FrameBuffer的啟動MiniGUI輸入引擎IAL的開發(fā)7在S3C2410上運行簡單的繪圖程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真應用

6.5.1安裝MiniGUI的資源文件1、在PC機上對資源文件minigui-res-1.3.3.tar.gz解壓縮;

[root@localhosttarget]#tarzxvfminigui-res-1.3.3.tar.gz2、進入minigui-res-1.3.3目錄,安裝資源文件;[root@localhostminigui-res-1.3.3]#makeinstall

3、把/opt/target/minigui/usr/local/lib目錄下的minigui目錄拷貝到要制作的cramfs文件系統(tǒng)的文件夾中。

6.5.2配置安裝MiniGUI庫文件1、確認安裝了交叉編譯器,即armv4l-unknown-linux系列的交叉編譯器;2、改變目錄到/opt/target/libminigui-1.3.3下,鍵入命令makemenuconfig進行配置;3、安裝庫文件:

makemakeinstall

4、去除庫文件libminigui-1.3.so.3.0.0和libmgext-1.3.so.3.0.0中的調試信息和符號信息。armv4l-unknown-linux-striplibminigui-1.3.so.3.0.0

6.5.3MiniGUI的移植步驟要將MiniGUI移植到S3C2410,通常需要按照如下步驟進行:1.把已經去除調試信息和符號信息的MiniGUI庫文件libminigui-1.3.so.3.0.0和libmgext-1.3.so.3.0.0,以及它們的符號連接文件,一同復制到要制作成cramfs文件系統(tǒng)的目錄root_tech中的/lib下。2.把/opt/tgt/minigui/usr/local/lib下的minigui目錄復制到要制作cramfs文件系統(tǒng)的目錄中。比如放到該目錄的/usr/sbin/下。當嵌入式系統(tǒng)運行時,應用程序在該minigui目錄下調用相關的資源文件。3.在root_tech文件夾內,使用如下命令創(chuàng)建一個目錄:mkdir–p/opt/host/armv4l/armv4l-unknown-linux/接下來,創(chuàng)建文件夾的符號連接:ln–s/lib/opt/host/armv4l/armv4l-unknown-linux/lib4.修改/opt/host/armv4l/armv4l-unknown-linux/etc目錄下的MiniGUI.cfg文件,把存放資源的路徑改為root_tech目錄下對應的路徑,從而使應用程序能夠找到它使用的資源文件。修改后的MiniGUI.cfg文件要放到root_tech目錄的/mnt/etc目錄下。5.最后,把準備好的root_tech文件夾,利用mkcramfs命令,生成cramfs文件系統(tǒng)。生成的文件系統(tǒng),可以通過imagewrite命令,利用NFS網絡文件系統(tǒng)或U盤下載到目標系統(tǒng)中。主要內容1426MiniGUI簡介MiniGUI在Linux下運行環(huán)境的建立Linux下S3C2410FrameBuffer的啟動MiniGUI輸入引擎IAL的開發(fā)7在S3C2410上運行簡單的繪圖程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真應用

6.6.1IAL引擎簡介

MiniGUI引入了輸入抽象層(GraphicsandInputAbstractLayer,即GAL和IAL)的概念。抽象層的概念類似于Linux虛擬文件系統(tǒng)的概念。它定義了一組不依賴于任何特殊硬件的抽象接口,所有頂層的輸入處理都建立在抽象接口之上。由于實現(xiàn)這一輸入抽象接口的底層代碼是一種類似于操作系統(tǒng)驅動程序的“輸入引擎”,所以它的設計實際上是一種面向對象的程序結構。利用這種抽象接口,可以將MiniGUI方便地移植到其它POSIX系統(tǒng)上。一般嵌入式Linux操作系統(tǒng)都具有FrameBuffer的支持,所以針對特定嵌入式設備,只需要編寫輸入引擎IAL即可。

6.6.2IAL引擎的開發(fā)以4×4鍵盤為例,介紹IAL引擎的開發(fā)。BOOLInitADSInput(INPUT*input,constchar*mdev,constchar*mtype){ //只讀形式打開鍵盤設備

kbd_fd=open("/dev/Kbd7279",O_RDONLY);if(kbd_fd<0){fprintf(stderr,"IAL:Cannotopentouchscreen!\n");returnFALSE;} //關閉鍵盤鎖燈

led_off(); //輸入引擎與虛擬接口間的聯(lián)系

input->update_mouse=mouse_update;input->get_mouse_xy=mouse_getxy;input->set_mouse_xy=NULL;input->get_mouse_button=mouse_getbutton;input->set_mouse_range=NULL;input->update_keyboard=keyboard_update;input->get_keyboard_state=keyboard_getstate;input->set_leds=NULL;input->wait_event=wait_event;

mousex=0;

mousey=0;returnTRUE;}主要內容1426MiniGUI簡介MiniGUI在Linux下運行環(huán)境的建立Linux下S3C2410FrameBuffer的啟動MiniGUI輸入引擎IAL的開發(fā)7在S3C2410上運行簡單的繪圖程序5MiniGUI在S3C2410上的移植3在QVFB上的仿真應用6.7.1MiniGUI的基本繪圖函數(shù)voidGUIAPISetPixel(HDChdc,intx,inty,gal_pixelc);

//設定像素值

voidGUIAPISetPixelRGB(HDChdc,intx,inty,intr,intg,intb);

//設定像素RGB值

gal_pixelGUIAPIGetPixel(HDChdc,intx,inty);//得到像素的坐標

voidGUIAPIGetPixelRGB(HDChdc,intx,inty,int*r,int*g,int*b);

//得到像素的RGB值voidGUIAPILineTo(HDChdc,int

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論