隨著嵌入式系統(tǒng)的迅速發(fā)展,,圖形用戶界面(Graphic User Interface,GUI)需求越來越明顯,。MiniGUI是面向?qū)崟r嵌入式系統(tǒng)的輕量級圖形用戶界面支持系統(tǒng),,以輕型、占用資源少,、高性能,、可配置等特點(diǎn)廣泛應(yīng)用于通信、醫(yī)療,、工控,、電子、機(jī)頂盒,、多媒體等領(lǐng)域,。本文正是針對這種需求,介紹如何在S3C240上移植MiniGUI的全過程,。
1 圖形用戶界面MiniGUI
MiniGUI是由原清華大學(xué)教師魏永明主持開發(fā)的輕量級圖形系統(tǒng),,遵循GPL公約。所支持的操作系統(tǒng)已不僅僅限于Linux,,它還可以在μCli nux,,μC/OS-Ⅱ,eCos和VxWorks等系統(tǒng)上運(yùn)行,。已驗證的硬件平臺包括Intelx86,,ARM(ARM7/AMR9/StrongARM/xScale),Power-PC,,MIP S,,M68K(DragonBall/ColdFire)等。
1.1 MiniGUI與嵌入式系統(tǒng)的關(guān)系
MiniGUI具有良好的軟件架構(gòu),,通過抽象層將MiniGUI上層和底層操作系統(tǒng)隔離開來,。如圖1所示,基于MiniGUI的應(yīng)用程序一般通過ANSIC庫以及MiniGUI自身提供的API來實(shí)現(xiàn)自己的功能,;MiniGUI中的“可移植層”可將特定操作系統(tǒng)及底層硬件的細(xì)節(jié)隱藏起來,,而上層應(yīng)用程序則無需關(guān)系底層的硬件平臺輸出和輸入設(shè)備,。
1.2 MiniGUI體系結(jié)構(gòu)
從結(jié)構(gòu)上看,MiniGUI是分層設(shè)計的,,層次結(jié)構(gòu)如圖2所示,。在底層,GAL和IAL為MiniGUI提供了底層的Linux控制臺或者X Window上的圖形接口以及輸入接口,。中間層是MiniGUI的核心層,,其中包括了窗口系統(tǒng)必不可少的各個模塊。最頂層的API向應(yīng)用設(shè)計提供編程接口,。
2 S3C2440開發(fā)平臺簡介
本文使用的目標(biāo)平臺是三星公司推出的高度集成的S3C2440(ARM920T core with MMC),,最高主頻可達(dá)532 MHz微處理器,提供64MB SDRA M,,64 MBNAND FLASH以及2 MB NOR FLASH的存儲設(shè)備,,另外包括IDE和PCMICA接口的豐富的外圍電路和多功能的擴(kuò)展接口。S3C2440采用高性能ARM9微處理器以其優(yōu)化的片上性能,,在視頻會議,、樓宇的對講系統(tǒng)、網(wǎng)絡(luò)監(jiān)控,、GPS定位/導(dǎo)航儀,、醫(yī)療電子設(shè)備,、多媒體終端產(chǎn)品等應(yīng)用領(lǐng)域有廣泛應(yīng)用,。
3 MiniGUI的移植
宿主主機(jī)系統(tǒng)為redhat Linux 9.0,要求完全安裝,,移植步驟如下:
3.1 建立交叉編譯環(huán)境
在移植之前首先建立好交叉編譯環(huán)境,,簡單地說是指在一個平臺上可以生成能在另一個平臺上運(yùn)行的代碼,編譯工具為arm-linux-gcc-3.3.2,。
#tar-xvjf rm-linux-gcc-3.3.2
默認(rèn)的安裝路徑是/usr/local,,為了避免每次設(shè)置PATH,在.bash_profile文件中增加PATH=/usr/local/arm/3.4.1bin:MYMPA TH,,并運(yùn)行以下命令:
#source.bash_profile
3.2 源代碼準(zhǔn)備
從http://www.minigui.org/res.shtml下載源代碼包如下:
(1)libminigui-1.6.10.tar.gz:MiniGUI函數(shù)庫源代碼,。
MiniGUI由3個函數(shù)庫的組成,它們分別是libminigui,,libmgext和libvcongui,。libminigui是提供窗口管理和圖形接口的核心函數(shù)庫,也提供了大量的標(biāo)準(zhǔn)控件,;libmgext是libminigui的一個擴(kuò)展庫,,提供了一些高級控件及“文件打開”、“顏色選擇”對話框等,;libvcon gui則為Linux操作系統(tǒng)提供了一個應(yīng)用程序可用的虛擬控制臺窗口,,從而可以方便地在MiniGUI環(huán)境中運(yùn)行字符界面的應(yīng)用程序,,libmgext和libvcongui庫已經(jīng)包含在這個源代碼包中。
(2)minigui-res-1.6.10.tar.gz:MiniGUI所使用的資源,,包括基本字體,、圖標(biāo)、位圖和鼠標(biāo)光標(biāo),。
(3)mg-smaples-1.6.10.tar.gz:配套示例程序,。
3.3 編譯安裝
(1)建立工作目錄
# mkdir/minigui
# cd/minigui
(2)編譯安裝MiniGUI庫
# cd/minigui
# tar xzvf libminigui-1.6.10.tar.gz-C/minigui
# cd/minigui/libminigui-1.6.10
#./configure-prefix=/home/-host=i386-redhat-linux-target=arm-linux--build=arm-linuxCC=arm-linux-gcc--disa-ble-vbfsu pport
prefix選項用于指定MiniGUI函數(shù)庫的安裝路徑,默認(rèn)的安裝路徑是/usr/local,,這里應(yīng)該是所使用的交叉編譯環(huán)境中系統(tǒng)頭文件目錄include庫目錄lib所在的目錄,,本例中是/home,這樣一來,,MiniGUI的函數(shù)庫和頭文件也將被分別安裝到lib和include目錄中,。在后續(xù)進(jìn)行MiniGUI應(yīng)用程序的交叉編譯時,就可以正確地找到MiniGUI的頭文件和函數(shù)庫,。其中:
target選項用于指定目標(biāo)平臺,,這里使用arm-linux;
host選項用來指明宿主機(jī)的類型,,這里使用i386-redhat-linux,;
build選項指定了交叉編譯的系統(tǒng)環(huán)境,這里使用arm-linux,;
CC用來指定使用的交叉編譯器,,這里使用arm-linux-gcc。
運(yùn)行.configure腳本成功后,,就成了定制的Make-file文件,,接下來只需編譯和安裝即可。
# make
# make install
(3)編譯安裝MiniGUI資源文件
# tar xzvf minigui-res-1.6.10.tar.gz-C/minigui
# cd/minigui/minigui-res-1.6.10
# make install
(4)編譯安裝配套應(yīng)用程序
# tar mg-smaples-1.6.10.tar.gz-C/minigui
# cd/minigui/mg-smaples-1.6.10# make install
3.4 拷貝MiniGUI資源到開發(fā)板
把/home/lib目錄下的所有庫文件(注:-prefix=/home/)拷貝到開發(fā)板的/lib目錄下,;把/minigui/res目錄下的所有文件拷貝到開發(fā)板上/usr/local/lib目錄下,,其開發(fā)板上的目錄如下形式/usr/local/lib/minigui/res/……;把/home/etc下的MiniGUI.c fg拷貝到開發(fā)板上的/etc目錄下,;最后把配套應(yīng)用程序拷貝到開發(fā)板目錄下,。
3.5 配置開發(fā)板的運(yùn)行環(huán)境
(1)/etc目錄下建立ld.so.conf文件,并添加如下內(nèi)容:
/usr/local/lib
/lib
這樣程序運(yùn)行的時候可以找到相應(yīng)的庫文件,。
(2)修改開發(fā)板上的/etc/MiniGUI.cfg文件,,主要修改是圖形引擎和輸入引擎。本開發(fā)平臺的Linux中自帶有VESAFrameBuffer設(shè)備驅(qū)動程序,,并且初始狀態(tài)已經(jīng)激活,。FrameBuffer是Linux內(nèi)核中的一種驅(qū)動程序接口,這種接口將顯示設(shè)備抽象為幀緩沖區(qū),用戶可以將它看成是顯示內(nèi)存的一個映像,。將其映射到進(jìn)程地址空間之后,,就可以直接進(jìn)行讀寫操作,而寫操作可以立即反映在屏幕上,。這樣,,MiniGUI就可以使用FrameBuffer作為圖形引擎進(jìn)行圖像顯示。LCD顯示器的像素為240x320,,因此圖形引擎的顯示模式defaultmode為240x320-16bpp,。并在輸入引擎中添加usb鼠標(biāo)設(shè)備文件和鼠標(biāo)協(xié)議。修改如下:
同時在/etc/init.d/rcS腳本文件里添加鼠標(biāo)設(shè)備,,內(nèi)容如下:
/bin/ln-s/devr/vc/0/dev/tty0
/bin/ln-s/dev/input/mouse0/dev//mouse
4 結(jié)語
把圖形用戶界面移植到嵌入式設(shè)備中是嵌入式系統(tǒng)發(fā)展的趨勢,,本文詳細(xì)介紹了MiniGUI移植到S3C2440的過程,并最終能穩(wěn)定得在目標(biāo)平臺上運(yùn)行,。該方法對于移植到其他的目標(biāo)平臺有良好的借鑒作用,。MiniGUI作為源代碼開放的自由軟件,在嵌入式圖形用戶界面領(lǐng)域?qū)⒂懈玫膶?shí)用價值,,并隨著MiniGUI的功能日趨強(qiáng)大,,應(yīng)用將越來越廣泛。