技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 應(yīng)用方案 > 嵌入式Linux環(huán)境下MiniGUI的研究與移植

嵌入式Linux環(huán)境下MiniGUI的研究與移植

時間:2009-08-19 13:53:08來源:taoyang

導(dǎo)語:?近幾年,嵌入式 Linux 系統(tǒng)已得到廣泛的應(yīng)用,相應(yīng)的圖形用戶界面的開發(fā)也日趨重要,MiniGUI正是其中的一個輕量級的圖形用戶界面支持系統(tǒng)。

摘 要:近幾年,嵌入式 Linux 系統(tǒng)已得到廣泛的應(yīng)用,相應(yīng)的圖形用戶界面的開發(fā)也日趨重要,MiniGUI正是其中的一個輕量級的圖形用戶界面支持系統(tǒng)。本文分析了嵌入式操作系統(tǒng)下圖形用戶界面MiniGUI 的結(jié)構(gòu)和特點,描述了將MiniGUI在ARM Linux下的移植方法與過程,并對這種基于MiniGUI的嵌入式系統(tǒng)開發(fā)做了展望。

關(guān)鍵詞:嵌入式Linux;圖形用戶界面;MiniGUI

Abstract:Recently, the embedded system on Linux has been used broadly. At the same time, the related development of graphic user interface is more and more important. MiniGUI is based on a lightweight GUI support system. This paper describes the structure and characteristics of MiniGUI, explains the method and process in porting of MiniGUI graphical system under the ARM Linux, and forecasts the embedded system based on MiniGUI.

Keywords: Embedded Linux; GUI; MiniGUI

0 前言

近年來隨著嵌入式設(shè)備與市場需求的廣泛結(jié)合,手機、PDA、DVD播放機等產(chǎn)品的應(yīng)用對可視化操作界面的簡潔和方便提出了更高的要求,這都需要一個穩(wěn)定可靠的高性能GUI系統(tǒng)來提供支持。圖形用戶界面(Graphic User Interface,簡稱GUI)的廣泛流行是當(dāng)今計算機技術(shù)的重要成就之一,它極大地方便了非專業(yè)用戶的使用,人們可以通過窗口、菜單方便地進行操作。由于嵌入式系統(tǒng)實時性要求高,同時嵌入式系統(tǒng)硬件配置又有限,所以對輕型GUI的需求更加突出。另外,嵌入式系統(tǒng)往往是一種訂制設(shè)備,它們對GUI的需求也各不相同,因此GUI也必須是可訂制的。綜上所述,嵌入式系統(tǒng)對GUI的基本要求應(yīng)包括輕型、占用資源少、高性能、高可靠性以及可配置。MiniGUI是目前比較常用的幾種GUI系統(tǒng)之一,與其他的GUI相比,MiniGUI最顯著的特點就是輕型、占用資源少,而且在這幾年的發(fā)展里,MiniGUI已經(jīng)非常成熟和穩(wěn)定了,在許多產(chǎn)品和項目中都已得到了實際應(yīng)用。

1 MiniGUI的特點和體系結(jié)構(gòu)

1. 1 MiniGUI的特點

MiniGUI是由原清華大學(xué)教師魏永明主持開發(fā)的輕量級圖形系統(tǒng),是一種面向嵌入式或?qū)崟r系統(tǒng)的圖形用戶界面支持系統(tǒng)。它遵循GPL公約,是基于SVGALib及LinuxThread庫的多窗口GUI支持系統(tǒng)。能跨多種操作系統(tǒng),主要運行于linux及一切具有POSIX線程支持的POSIX兼容系統(tǒng),包括普通嵌入式Linux、eCos、uC/OS-II、VxWorks等系統(tǒng),是國內(nèi)最早的自由軟件之一。

MiniGUI的主要特點有:

(1) 遵循GPL條款的純自由軟件;

(2) 提供了完備的多窗口機制;

(3) 多字符集和多字體支持,目前支持ISO8859-1、GB2312及Big5等字符集,并且支持各種光柵字體和TrueType、Type1等矢量字體;

(4) 全拼和五筆等漢字輸入法支持;

(5) BMP、GIF、JPEG及PCX等常見圖像文件的支持;

(6) Windows的資源文件支持,如位圖、圖標(biāo)、光標(biāo)、插入符、定時器及加速鍵等;

(7) 可移植性好。

1.2 MiniGUI的體系結(jié)構(gòu)

1.2.1多線程的分層設(shè)計

從整體結(jié)構(gòu)上看,MiniGUI是分層設(shè)計的,結(jié)構(gòu)如圖1所示。在最底層,GAL(圖形抽象層)和IAL(輸入抽象層)及鼠標(biāo)和鍵盤的驅(qū)動;中間層是MiniGUI的核心層,包括窗口系統(tǒng)必不可少的各個模塊;最頂層是API,即編程接口。GAL和IAL為MiniGUI提供了底層的Linux控制臺或者X Window上的圖形接口以及輸入接口,而Pthread用于提供內(nèi)核級線程支持的C函數(shù)庫。利用GAL和IAL,大大提高了MiniGUI的可移植性,并且使程序的開發(fā)和調(diào)試變得更加容易。可以在X Window上開發(fā)和調(diào)試自己的MiniGUI程序,通過重新編譯就可以讓MiniGUI應(yīng)用程序運行在特殊的嵌入式硬件平臺上。 MiniGUI本身運行在多線程模式下,它的許多模塊都以單獨的線程運行,同時,MiniGUI還利用線程來支持多窗口。從本質(zhì)上講,每個線程有一個消息隊列,消息隊列是實現(xiàn)線程數(shù)據(jù)交換和同步的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。一個線程向消息隊列中發(fā)送消息,而另一個線程從這個消息隊列中獲取消息,同一個線程中創(chuàng)建的窗口可共享同一個消息隊列。一個線程向消息隊列中發(fā)送消息,而另一個線程從這個消息隊列中獲取消息,同一個線程中創(chuàng)建的窗口可共享同一個消息隊列。利用消息隊列和多線程之間的同步機制,可以實現(xiàn)下面要講到的微客戶/服務(wù)器機制。

1.2.2微客戶/服務(wù)器結(jié)構(gòu)

在多線程環(huán)境中,與多進程間的通訊機制類似,線程之間也有交互和同步的需求。比如, 用來管理窗口的線程維持全局的窗口列表, 而其他線程不能直接修改這些全局的數(shù)據(jù)結(jié)構(gòu), 而必須依據(jù)“先來先服務(wù)”的原則,依次處理每個線程的請求,這就是一般性的客戶/服務(wù)器模式。MiniGUI利用線程之間的同步操作實現(xiàn)了客戶線程和服務(wù)器線程之間的微客戶/服務(wù)器機制。

2 開發(fā)環(huán)境

H2410EB開發(fā)板由北京恒頤高科技術(shù)有限公司設(shè)計開發(fā),它基于Samsung公司的S3C2410A20嵌入式ARM處理器。S3C2410A20內(nèi)嵌 ARM920T 核,帶有全性能的MMU,具有高性能、低功耗、低成本、小體積等優(yōu)點,適用于手持設(shè)備、汽車等領(lǐng)域。 H2410EB除帶有大容量的SDRAM和Flash以外,還擴展了RS-232C串行接口、10Mbps以太網(wǎng)接口、觸摸屏接口、音頻輸入/輸出接口、USB Host、USB Slave、UART接口、IIC接口、用戶自定義鍵盤、LCD顯示器,方便用戶使用和進行參考設(shè)計。它支持嵌入式Linux操作系統(tǒng)的運行,支持MP3/MPEG播放、GUI、Web 服務(wù)及其它服務(wù),同時可根據(jù)用戶需求開發(fā)特定軟件與設(shè)備驅(qū)動程序。 操作系統(tǒng)采用裁減后的Linux,Linux Kernel版本為v2.4.18,系統(tǒng)使用的交叉編譯器是arm-Linux-gcc。另外,還有驅(qū)動程序源碼和測試程序源碼等代碼模塊。

3 MiniGUI的移植

本文中使用的主機系統(tǒng)為Red Hat Linux 9.0,移植目標(biāo)系統(tǒng)為Linux2.4.18,MiniGUI的版本是1.6.9。在主機上交叉編譯MiniGUI鏈接庫,然后將針對目標(biāo)機編譯的庫文件,與根文件系統(tǒng)一起燒寫到目標(biāo)板的RAM空間,以后將運行在目標(biāo)板上的圖形用戶界面直接鏈接到該庫,脫離主機獨立運行。

3.1 Linux交叉編譯環(huán)境的構(gòu)建

GUI的編譯通常都是在PC機上執(zhí)行的,也就是說,編譯器本身能夠在PC機上執(zhí)行,同時編譯源代碼生成的二進制文件必須能在目標(biāo)機上執(zhí)行,這類編譯器通常稱為交叉編譯器。對于ARM平臺,我們安裝了cross-arm-binutils-2.10-1.i386.rpm、cross-arm-gcc-2.95.3 -2.i386.rpm、cross-arm-glibc-2.1.3-2.i386.rpm這三個包。這些包都可以從網(wǎng)上免費獲取。arm-binutils這個包一般包含了一些針對ARM平臺的二進制工具,比如arm-strip、arm-ar等命令;arm-glibc這個包包含的是標(biāo)準(zhǔn)C的函數(shù)庫的ARM的版本以及對應(yīng)的頭文件;arm-gcc中包含的則是生成ARM平臺代碼的x86上的交叉編譯器。執(zhí)行rpm命令將這些包安裝到PC機上,若不在系統(tǒng)默認(rèn)搜索目錄下,則必須將安裝目錄加到系統(tǒng)的PATH環(huán)境變量中,這樣在每次編譯時系統(tǒng)才能找得到編譯器。 以root用戶登陸Linux系統(tǒng),在主機上用rpm指令安裝交叉編譯工具,arm-linux-gcc將被安裝到/usr/local/arm/2.95.3/下面。此時,gcc為 /usr/local/arm/2.95.3/bin/arm-linux-gcc,而它的include為 /usr/local/arm/2.95.3/arm-linux/include,對應(yīng)的lib為 /usr/local/arm/2.95.3 -/arm-linux/lib。然后,在你的bashrc 中添加環(huán)境變量即可 vi .bashrc 最后一行加入:export PATH=$PATH:/usr/local/arm/2.95.3/bin路徑 保存退出后執(zhí)行source .bashrc 另外需要注意的是,編譯時所用的函數(shù)庫版本要與目標(biāo)版上運行時所用的函數(shù)庫版本一致。經(jīng)過上述步驟,就已經(jīng)建立了交叉編譯環(huán)境,接下來的就是進行MiniGUI的選項配置和交叉編譯。

3.2 MiniGUI的配置和交叉編譯

我們可以從網(wǎng)上http://www.minigui.com/download)免費得到MiniGUI-1.6.9的資源文件壓縮包,MiniGUI1.6.9的源程序包包括以下三個部分: libminigui-1.6.9.tar.gz-MiniGUI函數(shù)庫源代碼; miniguires-1.6.9.tar.gz-MiniGUI所使用的資源,包括基本字體、圖標(biāo)、位圖、輸入法等; mde-1.6.9.tar.gz-MiniGUI的綜合演示程序。

3.2.1 配置MiniGUI選項

把函數(shù)庫文件包解壓:tar zxf libminigui-1.6.9.tar.gz,進入libminigui-1.6.9這個目錄,執(zhí)行make menuconfig命令 -system wide options中選擇Build MiniGUI-Lite,并取消Use incore (built-in) resource選項; -Gal engine options 圖形引擎,根據(jù)目標(biāo)機的顯示方式確認(rèn),這里只勾選了 NEWGal engine on Linux FrameBuffer console,其它的不選; -Ial engine options輸入引擎,可用觸摸屏只選了SMDK2410 Touch Screen; -Font Options 中取消選擇Var bitmap font,可能是因為Bug的原因,當(dāng)選擇了該選項后,編譯測試?yán)拥臅r候總是提示unreferenced vfb_Courier …之類的錯誤; -Image options選擇了Includes SaveBitmap-related functions。GIF、JPG、PNG圖形格式也勾選上; -Development environment options 里使用Linux平臺,arm-linux-gcc編譯器,安裝路徑設(shè)置在 /usr/local/arm/2.95.3/arm-linux/。 其它的用缺省選項就可以了,保存退出。

3.2.2 MiniGUI函數(shù)庫的安裝和編譯

進入目錄libminigui-1.6.9,再運行./configure腳本: CC= arm-linux-gcc./configure——prefix=/mnt/nfs/local——build=i386-linux——host=arm-linux——target=arm-linux——disable-lite——disable-micemoveable——disable-cursor在這里,CC是用來指定所使用的編譯器,arm-linux-gcc即為安裝到主機上的交叉編譯工具。另外, --prefix為MiniGUI函數(shù)庫的安裝目標(biāo)路徑 --build是指執(zhí)行編譯的主機 --h(huán)ost交叉編譯后的程序?qū)⑦\行的系統(tǒng) --target是運行該編譯器所產(chǎn)生的目標(biāo)文件的平臺 --disable-lite建立MiniGUI-Threads版本的應(yīng)用程序 --disable-micemoveable禁止窗口移動 --disable-cursor由于系統(tǒng)采用觸摸屏,所以用此選項用來關(guān)閉鼠標(biāo)光標(biāo)顯示 如果運行./configure腳本成功通過,就可繼續(xù)進行下面的編譯了,執(zhí)行make和make install命令編譯安裝libminigui。這里要注意的是,執(zhí)行make install命令時要切換到Root用戶權(quán)限下,不然安裝時沒法把文件裝到指定目錄下。安裝成功后,MiniGUI 的函數(shù)庫和頭文件以及配置文件等資源將被安裝到/usr/local/arm/2.95.3/arm-linux/目錄中,具體情況為:函數(shù)庫被裝在lib/ 子目錄中;頭文件被裝在include/ 子目錄中;手冊被裝在man/ 子目錄中;配置文件被裝在etc/ 子目錄中。

3.2.3 MiniGUI資源的編譯安裝

主機上解壓資源文件:tar zxf miniguires-1.6.9.tar.gz,可生成miniguires-1.6.9目錄。在安裝之前先要修改目錄中的configure.linux文件,執(zhí)行vi configure.linux打開文件,把prefix選項部分的默認(rèn)值 /usr/local/ 改為 /usr/local/arm/2.95.3/arm-linux/,這樣運行make install安裝命令后MiniGUI資源將被安裝到目標(biāo)系統(tǒng)中的/usr/local/arm/2.95.3/arm-linux/lib/minigui- /res的目錄下。

3.2.4 實例程序的編譯安裝

解壓mde-1.6.9.tar.gz并進入該目錄,修改目錄下配置文件configure.in,把其中的AC_CHECK_HEADERS(minigui/commmon.h, have_libminigui=yes, foo=bar)改為 AC_CHECK_HEADERS($prefix/include/minigui/common.h,have_libminigui=yes,foo=bar),來指定交叉編譯時搜minigui的頭文件路徑,防止編譯時系統(tǒng)找不到頭文件;在所有LIB="$LIB后加入–L{prefix}/lib來指定編譯時所需要庫文件的路徑。并將libpopt-dev-arm-cross-1.6.tgz解壓所生成的頭文件和庫文件分別放入目標(biāo)目錄的include和lib中,用以支持mde中程序在ARM下的交叉編譯。 然后執(zhí)行./autogen.sh,重新生成configure腳本,使用上面配置的腳本然后執(zhí)行make命令,即可完成實例程序的編譯。

4 拷貝MiniGUI資源到開發(fā)板

編譯完MiniGUI和實例程序之后,需要把MiniGUI庫、資源和應(yīng)用程序拷貝到為目標(biāo)機器準(zhǔn)備的文件系統(tǒng)目錄中,然后生成文件系統(tǒng)映像,再下載到目標(biāo)板上運行??梢酝ㄟ^串口、USB口或以太網(wǎng)口將文件系統(tǒng)映像下載到目標(biāo)機器中。如果發(fā)現(xiàn)子目錄lib 中的MiniGUI 庫文件很大,很難全部拷貝到開發(fā)板上的話,可以對庫文件執(zhí)行arm-linux-strip操作,arm-linux-strip指令會除去文件中的調(diào)試信息,使文件體積大大縮小。另外需要注意的是,有些庫函數(shù)是鏈接文件,如果單純的拷貝,會將原先的鏈接信息丟失,造成不必要的麻煩。使用tar命令將所需拷貝的資源打包,其中包括etc子目錄下的配置文件MiniGUI.cfg;lib 子目錄下的libmgext-1.6.9.so.0.0、libminigui-1.6.9.so.0.0、libvcongui-1.6.9.so.0.0和minigui子目錄;mde-1.6.9目錄下的可執(zhí)行程序。將這些資源燒寫進ramdisk文件系統(tǒng)中,解壓后將MiniGUI的配置文件MiniGUI.cfg放入/usr/local/etc目錄中,MiniGUI的庫文件放入/usr/local/lib目錄中。在執(zhí)行程序之前,還有一件重要的事情要做,就是在開發(fā)板上的Linux中配置好MiniGUI的運行環(huán)境。

5 板載Linux的環(huán)境配置

MiniGUI可以使用多種圖形引擎進行圖像顯示,有qvfb、SVGALib、LibGGI等等,當(dāng)然也可以自己編寫一個圖形引擎供MiniGUI使用。這里我們使用qvfb來作為MiniGUI的圖形引擎進行圖像顯示。qvfb(vitural framebuffer)是在宿主機上模擬幀緩沖的,它是X Window用來運行和測試應(yīng)用程序的系統(tǒng)程序,允許我們在桌面及其上開發(fā)Qt嵌入式程序,而不需要在命令臺和程序之間來回切換。qvfb使用了共享存儲區(qū)域(虛擬的幀緩沖)來模擬幀緩沖并且在一個窗口中(qvfb)模擬一個應(yīng)用來顯示幀緩沖,顯示的區(qū)域被周期性的改變和更新。通過指定顯示設(shè)備的寬度和顏色深度,虛擬出來的緩沖幀和物理的顯示設(shè)備在每個像素上保持一致。這樣我們在每次調(diào)試應(yīng)用時不需要總是刷新嵌入式設(shè)備的FLASH存儲空間,從而加速了應(yīng)用的編譯、連接和運行周期。 首先對qvfb進行安裝,可以從這里下載http://www.minigui.com/downloads/dep-libs/qvfb -1.0.tar.gz),下載下來后進行解壓:tar zxf qvfb-1.0.tar.gz并進入到qvfb-1.0目錄,執(zhí)行./configure腳本后即可用make和make install命令進行編譯安裝。 更改MiniGUI的配置文件MiniGUI.cfg設(shè)置設(shè)備驅(qū)動程序,設(shè)置顯示區(qū)域及字體等內(nèi)容。修改/usr/local/etc目錄下的配置文件MiniGUI.cfg,將其中的驅(qū)動引擎gal_engine和ial_engine設(shè)置為qvfb,再將其中qvfb的defaultmode設(shè)置為合適的顯示模式。然后把qvfb加到可執(zhí)行路徑中去,執(zhí)行vi .bashrc命令,在 .bashrc最后面加上export PATH=/usr/local/arm/2.95.3/bin -:$PATH,保存退出后用source .bashrc命令執(zhí)行一下即可。 在X Window中,打開一個終端仿真程序,執(zhí)行qvfb &命令。在qvfb中選中File Configure,將qvfb設(shè)置成嵌入式開發(fā)系統(tǒng)的液晶屏的大小。合理設(shè)置MiniGUI的配置文件后,接著就可以運行MiniGUI應(yīng)用程序了。 執(zhí)行應(yīng)用程序順利的話,屏幕上可以看到程序的運行界面。至此,MiniGUI已經(jīng)成功移植到目標(biāo)系統(tǒng)上。此后,我們可以根據(jù)需要,繼續(xù)修改MiniGUI庫函數(shù)及各種資源,并且編寫自己的應(yīng)用程序,使圖形用戶界面更加完善。

6 結(jié)束語

隨著嵌入式產(chǎn)品應(yīng)用領(lǐng)域的日益增長,開發(fā)出優(yōu)秀的人機交互界面,是嵌入式發(fā)展的趨勢,擁有廣闊的市場前景。MiniGUI可以穩(wěn)定可靠的運行在Linux系統(tǒng)下,通過上述具體的移植和后續(xù)的MiniGUI下嵌入式軟件的開發(fā)過程,能快速構(gòu)建一個嵌入式可視化軟件系統(tǒng),相信這種嵌入式系統(tǒng)將會得到越來越多的應(yīng)用。

參考文獻(xiàn):

[1] 北京飛漫軟件.MiniGUI用戶手冊http://www.minigui.com.

[2] Beijing Feynman Software Technology Co. Ltd.

[3] 北京恒頤高科技術(shù)有限公司. H2410EB用戶手冊http://www.hyesco.com.

[4] 祁獻(xiàn)鵬,郭玉東.MiniGUI-面向嵌入式系統(tǒng)的GUI系統(tǒng)[J].信息工程大學(xué)學(xué)報,2001,2(3):8-10.

[5] 李善平,劉文峰,王煥龍等.Linux與嵌入式系統(tǒng)[M].北京:清華大學(xué)出版社,2003.

[6] 陳雷,鐘書毅等譯. 嵌入式Linux-硬件、軟件與接口[M].北京:電子工業(yè)出版社,2003.

[7] 方寧,馬忠梅.MiniGUI在AT91RM9200開發(fā)板上的移植[J].單片機與嵌入式系統(tǒng)應(yīng)用,2004(8):75-77.

標(biāo)簽:

點贊

分享到:

上一篇:西門子雷達(dá)液位計在儲罐的應(yīng)...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號