基于AT91SAM9261的MiniGUI移植
1、圖形用戶界面MiniGUI 簡介
MiniGUI 是遵循GPL條款發布的自由軟件,其目標是為基于Linux的實時嵌入式系統提供一個輕量級的圖形用戶界面支持系統。與QT/Embedded、MicoroWindows等其它GUI 相比,MiniGUI的*顯著特點就是輕型、占用資源少。據稱MiniGUI 能夠在CPU主頻為30MHz,僅有4MBRAM 的系統上正常運行,這是其它多種GUI所無法達到的。目前,MiniGUI已經非常成熟和穩定,并且在許多實際產品和項目中得到了應用。
2、MiniGUI在AT91SAM9261開發板上的移植過程
(1) 構建Linux 交叉編譯環境
使用的交叉編譯工具鏈是arm-linux-gcc-3.4.1.tar.bz2。
詳細步驟:
[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
保存退出后執行
[root@localhost /]# source~/.bashrc
至此交叉編譯環境已經建立好了。
(2) 交叉編譯MiniGUI
首先,從網上http://www.minigui.com/download/cindex.shtml) 得到MiniGUI 的源程序包,包括三個部分:
libminigui-1.6.2.tar.gz——MiniGUI函數庫源代碼;
miniguires-1.6.2.tar.gz——MiniGUI所使用的資源,包括基本字體、圖標、位圖等;
mg-samples-str-1.6.2.tar.gz——MiniGUI的演示程序。
首先進行M i ni G U I函數庫的編譯和安裝。解開libminigui-1.6.2.tar.gz軟件包,進入該目錄,運行./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 文件,然后可以繼續執行make 和makeinstall命令編譯并安裝libminigui,安裝成功后,MiniGUI的函數庫和頭文件以及配置文件等資源將被安裝到/usr/local/arm/3.4.1/arm-linux目錄中,具體情況為:函數庫被裝在lib/子目錄中;頭文件被裝在include/ 子目錄中;手冊被裝在man/子目錄中;配置文件被裝在etc/ 子目錄中。
下面進行MiniGUI資源的編譯安裝。解壓minigui-res-1.6.2.tar.gz,進入相應目錄。這里需要說明的是,在執行makeinstall操作之前,需要對目錄中的configure.linux文件做一些修改。打開configure.linux文件,你會發現prefix選項部分的默認值為$(TOPDIR)/usr/local,需要將這里修改為prefix=$(TOPDIR)/usr/local/arm/3.4.1/arm-linux/,這樣執行make install操作之后,安裝腳本會自動把MiniGUI資源文件安裝到/usr/local/arm/3.4.1/arm-linux/lib/minigui/res/目錄下。
*后,編譯并安裝MiniGUI 的演示程序。解壓mg-samples-str-1.6.2. tar.gz,執行腳本:
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 \
執行make操作,完成演示程序的編譯。
(3) 拷貝MiniGUI 資源到開發板
進入/usr/local/arm/3.4.1/arm-linux/目錄,在etc,lib子目錄下有我們需要拷貝到目標機上的資源。將lib下的libminigui.a,libminigui.la兩個庫文件拷貝到9261板子的文件系統/usr/local/lib,將lib/minigui/res/的所有文件也拷貝到9261板子的文件系統/usr/local/lib/minigui/res下,*后將配置文件MiniGUI.cfg拷貝至9261板子文件系統的/usr/local/etc/目錄下。重新制作文件系統,燒寫至9261板子的NANDFLASH中。
(4) 板載Linux 的環境配置
修改MiniGUI.cfg文件,主要幾個參數如下:
[system]
ial_engine=console
mdev=/dev/input/mouse0
mtype=PS2
[fbcon]
defaultmode=480x272-16bpp
板子的輸入設備是USB的鼠標、鍵盤,輸出設備是群創4.3寸TFT液晶屏。
(5) MiniGUI運行
拷貝mg-samples-str-1.6.2/src/下的顯示程序到9261板子上,運行button程序,效果如下。
3、增加MiniGUI 1.6的中文支持
minigui-res-1.6.2版本里的字體中是沒有中文字庫的,不能正常顯示中文,我們需要通過移花接木來增加MiniGUI1.6對中文的支持。
minigui-res-1.3.3里面的font就有兩個中文字庫,分別是song-12-gb2312.bin和song-16-gb2312.bin,把這兩個字庫復制到我們的res編譯的路徑/usr/local/arm/3.4.1/arm-linux/lib/minigui/res/font下。因為要顯示中文,用上剛才下載的字庫(內建資源),就要使內建資源可用,這個是在執行./configure時設置的。編譯mg-libminigui-1.6.2時的./configure另外加上選項--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的配置文件中進行修改,MiniGUI的應用程序便可顯示中文了。
MiniGUI.cfg的[systemfont]和[rambitmap font]就要做相應的改動,如下:
# 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時的./configure,要加上選項--with-lang=zhcn。再將MiniGUI資源拷貝到開發板,重新運行例程,就可顯示中文了。
4、增加觸摸屏輸入
在libminigui-str-1.6.2/src/ial目錄下添加觸摸屏的接口驅動程序,我是將libminigui-str-1.6.2自帶的S3C2410觸摸屏的代碼進行適當修改,并在編譯libminigui-str-1.6.2前./configure時增加--enable-smdk2410ial=yes,編譯進了2410.c2410.h這兩個文件。修改配置文件MiniGUI.cfg文件,
[system]
# GAL engine
gal_engine=fbcon
# IAL engine
ial_engine=SMDK2410
#ial_engine=console
mdev=/dev/input/ts0
#mdev=/dev/input/mouse0
還要對觸摸屏進行校準,可以移植tslib進行校準(參考tslib移植文檔)。
5、結語
MiniGUI 移植過程已通過實踐檢驗。對于其它型號的開發板而言,移植過程大體相似。可以肯定,帶有簡潔、美觀圖形用戶界面的嵌入式系統將會在更多的領域具有更好的實用價值。