基于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 移植过程已通过实践检验。对于其它型号的开发板而言,移植过程大体相似。可以肯定,带有简洁、美观图形用户界面的嵌入式系统将会在更多的领域具有更好的实用价值。