基于AT91SAM9261的MiniGUI移植
1、圖形用戶界面MiniGUI 簡(jiǎn)介
MiniGUI 是遵循GPL條款發(fā)布的自由軟件,其目標(biāo)是為基于Linux的實(shí)時(shí)嵌入式系統(tǒng)提供一個(gè)輕量級(jí)的圖形用戶界面支持系統(tǒng)。與QT/Embedded、MicoroWindows等其它GUI 相比,MiniGUI的*顯著特點(diǎn)就是輕型、占用資源少。據(jù)稱MiniGUI 能夠在CPU主頻為30MHz,僅有4MBRAM 的系統(tǒng)上正常運(yùn)行,這是其它多種GUI所無法達(dá)到的。目前,MiniGUI已經(jīng)非常成熟和穩(wěn)定,并且在許多實(shí)際產(chǎn)品和項(xiàng)目中得到了應(yīng)用。
2、MiniGUI在AT91SAM9261開發(fā)板上的移植過程
(1) 構(gòu)建Linux 交叉編譯環(huán)境
使用的交叉編譯工具鏈?zhǔn)莂rm-linux-gcc-3.4.1.tar.bz2。
詳細(xì)步驟:
[root@localhost /]# tar zxvfarm-linux-gcc-3.4.1.tar.bz2
[root@localhost /]# vi ~/.bashrc
在.bashrc 添加一行 export PATH=/usr/local/arm/3.4.1/bin/:$PATH
保存退出后執(zhí)行
[root@localhost /]# source~/.bashrc
至此交叉編譯環(huán)境已經(jīng)建立好了。
(2) 交叉編譯MiniGUI
首先,從網(wǎng)上http://www.minigui.com/download/cindex.shtml) 得到MiniGUI 的源程序包,包括三個(gè)部分:
libminigui-1.6.2.tar.gz——MiniGUI函數(shù)庫源代碼;
miniguires-1.6.2.tar.gz——MiniGUI所使用的資源,包括基本字體、圖標(biāo)、位圖等;
mg-samples-str-1.6.2.tar.gz——MiniGUI的演示程序。
首先進(jìn)行M i ni G U I函數(shù)庫的編譯和安裝。解開libminigui-1.6.2.tar.gz軟件包,進(jìn)入該目錄,運(yùn)行./configure腳本
CC=arm-linux-gcc \
./configure--prefix=/usr/local/arm/3.4.1/arm-linux \
--build=i386-linux \
--host=arm-linux \
--target=arm-linux
生成定制的Makefile 文件,然后可以繼續(xù)執(zhí)行make 和makeinstall命令編譯并安裝libminigui,安裝成功后,MiniGUI的函數(shù)庫和頭文件以及配置文件等資源將被安裝到/usr/local/arm/3.4.1/arm-linux目錄中,具體情況為:函數(shù)庫被裝在lib/子目錄中;頭文件被裝在include/ 子目錄中;手冊(cè)被裝在man/子目錄中;配置文件被裝在etc/ 子目錄中。
下面進(jìn)行MiniGUI資源的編譯安裝。解壓minigui-res-1.6.2.tar.gz,進(jìn)入相應(yīng)目錄。這里需要說明的是,在執(zhí)行makeinstall操作之前,需要對(duì)目錄中的configure.linux文件做一些修改。打開configure.linux文件,你會(huì)發(fā)現(xiàn)prefix選項(xiàng)部分的默認(rèn)值為$(TOPDIR)/usr/local,需要將這里修改為prefix=$(TOPDIR)/usr/local/arm/3.4.1/arm-linux/,這樣執(zhí)行make install操作之后,安裝腳本會(huì)自動(dòng)把MiniGUI資源文件安裝到/usr/local/arm/3.4.1/arm-linux/lib/minigui/res/目錄下。
*后,編譯并安裝MiniGUI 的演示程序。解壓mg-samples-str-1.6.2. tar.gz,執(zhí)行腳本:
CC=arm-linux-gcc \
CFLAGS=-I/usr/local/arm/3.4.1/arm-linux/include \
LDFLAGS=-L/usr/local/arm/3.4.1/arm-linux /lib\
./configure \
--build=i386-linux \
--target=arm-linux \
--host=arm-linux \
執(zhí)行make操作,完成演示程序的編譯。
(3) 拷貝MiniGUI 資源到開發(fā)板
進(jìn)入/usr/local/arm/3.4.1/arm-linux/目錄,在etc,lib子目錄下有我們需要拷貝到目標(biāo)機(jī)上的資源。將lib下的libminigui.a,libminigui.la兩個(gè)庫文件拷貝到9261板子的文件系統(tǒng)/usr/local/lib,將lib/minigui/res/的所有文件也拷貝到9261板子的文件系統(tǒng)/usr/local/lib/minigui/res下,*后將配置文件MiniGUI.cfg拷貝至9261板子文件系統(tǒng)的/usr/local/etc/目錄下。重新制作文件系統(tǒng),燒寫至9261板子的NANDFLASH中。
(4) 板載Linux 的環(huán)境配置
修改MiniGUI.cfg文件,主要幾個(gè)參數(shù)如下:
[system]
ial_engine=console
mdev=/dev/input/mouse0
mtype=PS2
[fbcon]
defaultmode=480x272-16bpp
板子的輸入設(shè)備是USB的鼠標(biāo)、鍵盤,輸出設(shè)備是群創(chuàng)4.3寸TFT液晶屏。
(5) MiniGUI運(yùn)行
拷貝mg-samples-str-1.6.2/src/下的顯示程序到9261板子上,運(yùn)行button程序,效果如下。
3、增加MiniGUI 1.6的中文支持
minigui-res-1.6.2版本里的字體中是沒有中文字庫的,不能正常顯示中文,我們需要通過移花接木來增加MiniGUI1.6對(duì)中文的支持。
minigui-res-1.3.3里面的font就有兩個(gè)中文字庫,分別是song-12-gb2312.bin和song-16-gb2312.bin,把這兩個(gè)字庫復(fù)制到我們的res編譯的路徑/usr/local/arm/3.4.1/arm-linux/lib/minigui/res/font下。因?yàn)橐@示中文,用上剛才下載的字庫(內(nèi)建資源),就要使內(nèi)建資源可用,這個(gè)是在執(zhí)行./configure時(shí)設(shè)置的。編譯mg-libminigui-1.6.2時(shí)的./configure另外加上選項(xiàng)--enable-incoreres=yes--enable-rbfgb12=yes --enable-rbfgb16=yes 。重新編譯安裝。
修改/usr/local/arm/3.4.1/arm-linux/lib/minigui/res/font/font.name文件,在其中增加兩行:
song-12-gb2312.bin Raw BitmapFont rbf-fixed-rrncnn-12-12-GB2312.1980-0
song-16-gb2312.bin Raw BitmapFont rbf-fixed-rrncnn-16-16-GB2312.1980-0
MiniGUI的配置文件中進(jìn)行修改,MiniGUI的應(yīng)用程序便可顯示中文了。
MiniGUI.cfg的[systemfont]和[rambitmap font]就要做相應(yīng)的改動(dòng),如下:
# The first system font mustbe a logical font using RBF device font.
[systemfont]
font_number=3
font0=rbf-fixed-rrncnn-8-16-ISO8859-1
font1=rbf-fixed-rrncnn-12-12-GB2312.1980-0
font2=rbf-fixed-rrncnn-16-16-GB2312.1980-0
default=1
wchar_def=1
fixed=1
caption=2
menu=1
control=1
[rawbitmapfonts]
font_number=3
name0=rbf-fixed-rrncnn-8-16-ISO8859-1
fontfile0=/usr/local/lib/minigui/res/font/8x16-iso8859-1.bin
name1=rbf-fixed-rrncnn-12-12-GB2312.1980-0
fontfile1=/usr/local/lib/minigui/res/font/song-12-gb2312.bin
name2=rbf-fixed-rrncnn-16-16-GB2312.1980-0
fontfile2=/usr/local/lib/minigui/res/font/song-16-gb2312.bin
重新編譯mg-sample-src-1.6.2時(shí)的./configure,要加上選項(xiàng)--with-lang=zhcn。再將MiniGUI資源拷貝到開發(fā)板,重新運(yùn)行例程,就可顯示中文了。
4、增加觸摸屏輸入
在libminigui-str-1.6.2/src/ial目錄下添加觸摸屏的接口驅(qū)動(dòng)程序,我是將libminigui-str-1.6.2自帶的S3C2410觸摸屏的代碼進(jìn)行適當(dāng)修改,并在編譯libminigui-str-1.6.2前./configure時(shí)增加--enable-smdk2410ial=yes,編譯進(jìn)了2410.c2410.h這兩個(gè)文件。修改配置文件MiniGUI.cfg文件,
[system]
# GAL engine
gal_engine=fbcon
# IAL engine
ial_engine=SMDK2410
#ial_engine=console
mdev=/dev/input/ts0
#mdev=/dev/input/mouse0
還要對(duì)觸摸屏進(jìn)行校準(zhǔn),可以移植tslib進(jìn)行校準(zhǔn)(參考tslib移植文檔)。
5、結(jié)語
MiniGUI 移植過程已通過實(shí)踐檢驗(yàn)。對(duì)于其它型號(hào)的開發(fā)板而言,移植過程大體相似??梢钥隙?,帶有簡(jiǎn)潔、美觀圖形用戶界面的嵌入式系統(tǒng)將會(huì)在更多的領(lǐng)域具有更好的實(shí)用價(jià)值。