随着嵌入式系统的迅速发展,图形用户界面(Graphic User Interface,GUI)需求越来越明显。MiniGUI是面向实时嵌入式系统的轻量级图形用户界面支持系统,以轻型、占用资源少、高性能、可配置等特点广泛应用于通信、医疗、工控、电子、机顶盒、多媒体等领域。本文正是针对这种需求,介绍如何在S3C240上移植MiniGUI的全过程。
1 图形用户界面MiniGUI
MiniGUI是由原清华大学教师魏永明主持开发的轻量级图形系统,遵循GPL公约。所支持的操作系统已不仅仅限于Linux,它还可以在μCli nux,μC/OS-Ⅱ,eCos和VxWorks等系统上运行。已验证的硬件平台包括Intelx86,ARM(ARM7/AMR9/StrongARM/xScale),Power-PC,MIP S,M68K(DragonBall/ColdFire)等。
1.1 MiniGUI与嵌入式系统的关系
MiniGUI具有良好的软件架构,通过抽象层将MiniGUI上层和底层操作系统隔离开来。如图1所示,基于MiniGUI的应用程序一般通过ANSIC库以及MiniGUI自身提供的API来实现自己的功能;MiniGUI中的“可移植层”可将特定操作系统及底层硬件的细节隐藏起来,而上层应用程序则无需关系底层的硬件平台输出和输入设备。
1.2 MiniGUI体系结构
从结构上看,MiniGUI是分层设计的,层次结构如图2所示。在底层,GAL和IAL为MiniGUI提供了底层的Linux控制台或者X Window上的图形接口以及输入接口。中间层是MiniGUI的核心层,其中包括了窗口系统必不可少的各个模块。最顶层的API向应用设计提供编程接口。
2 S3C2440开发平台简介
本文使用的目标平台是三星公司推出的高度集成的S3C2440(ARM920T core with MMC),最高主频可达532 MHz微处理器,提供64MB SDRA M,64 MBNAND FLASH以及2 MB NOR FLASH的存储设备,另外包括IDE和PCMICA接口的丰富的外围电路和多功能的扩展接口。S3C2440采用高性能ARM9微处理器以其优化的片上性能,在视频会议、楼宇的对讲系统、网络监控、GPS定位/导航仪、医疗电子设备、多媒体终端产品等应用领域有广泛应用。
3 MiniGUI的移植
宿主主机系统为redhat Linux 9.0,要求完全安装,移植步骤如下:
3.1 建立交叉编译环境
在移植之前首先建立好交叉编译环境,简单地说是指在一个平台上可以生成能在另一个平台上运行的代码,编译工具为arm-linux-gcc-3.3.2。
#tar-xvjf rm-linux-gcc-3.3.2
默认的安装路径是/usr/local,为了避免每次设置PATH,在.bash_profile文件中增加PATH=/usr/local/arm/3.4.1bin:MYMPA TH,并运行以下命令:
#source.bash_profile
3.2 源代码准备
从http://www.minigui.org/res.shtml下载源代码包如下:
(1)libminigui-1.6.10.tar.gz:MiniGUI函数库源代码。
MiniGUI由3个函数库的组成,它们分别是libminigui,libmgext和libvcongui。libminigui是提供窗口管理和图形接口的核心函数库,也提供了大量的标准控件;libmgext是libminigui的一个扩展库,提供了一些高级控件及“文件打开”、“颜色选择”对话框等;libvcon gui则为Linux操作系统提供了一个应用程序可用的虚拟控制台窗口,从而可以方便地在MiniGUI环境中运行字符界面的应用程序,libmgext和libvcongui库已经包含在这个源代码包中。
(2)minigui-res-1.6.10.tar.gz:MiniGUI所使用的资源,包括基本字体、图标、位图和鼠标光标。
(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函数库的安装路径,默认的安装路径是/usr/local,这里应该是所使用的交叉编译环境中系统头文件目录include库目录lib所在的目录,本例中是/home,这样一来,MiniGUI的函数库和头文件也将被分别安装到lib和include目录中。在后续进行MiniGUI应用程序的交叉编译时,就可以正确地找到MiniGUI的头文件和函数库。其中:
target选项用于指定目标平台,这里使用arm-linux;
host选项用来指明宿主机的类型,这里使用i386-redhat-linux;
build选项指定了交叉编译的系统环境,这里使用arm-linux;
CC用来指定使用的交叉编译器,这里使用arm-linux-gcc。
运行.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)编译安装配套应用程序
# tar mg-smaples-1.6.10.tar.gz-C/minigui
# cd/minigui/mg-smaples-1.6.10# make install
3.4 拷贝MiniGUI资源到开发板
把/home/lib目录下的所有库文件(注:-prefix=/home/)拷贝到开发板的/lib目录下;把/minigui/res目录下的所有文件拷贝到开发板上/usr/local/lib目录下,其开发板上的目录如下形式/usr/local/lib/minigui/res/……;把/home/etc下的MiniGUI.c fg拷贝到开发板上的/etc目录下;最后把配套应用程序拷贝到开发板目录下。
3.5 配置开发板的运行环境
(1)/etc目录下建立ld.so.conf文件,并添加如下内容:
/usr/local/lib
/lib
这样程序运行的时候可以找到相应的库文件。
(2)修改开发板上的/etc/MiniGUI.cfg文件,主要修改是图形引擎和输入引擎。本开发平台的Linux中自带有VESAFrameBuffer设备驱动程序,并且初始状态已经激活。FrameBuffer是Linux内核中的一种驱动程序接口,这种接口将显示设备抽象为帧缓冲区,用户可以将它看成是显示内存的一个映像。将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反映在屏幕上。这样,MiniGUI就可以使用FrameBuffer作为图形引擎进行图像显示。LCD显示器的像素为240x320,因此图形引擎的显示模式defaultmode为240x320-16bpp。并在输入引擎中添加usb鼠标设备文件和鼠标协议。修改如下:
同时在/etc/init.d/rcS脚本文件里添加鼠标设备,内容如下:
/bin/ln-s/devr/vc/0/dev/tty0
/bin/ln-s/dev/input/mouse0/dev//mouse
4 结语
把图形用户界面移植到嵌入式设备中是嵌入式系统发展的趋势,本文详细介绍了MiniGUI移植到S3C2440的过程,并最终能稳定得在目标平台上运行。该方法对于移植到其他的目标平台有良好的借鉴作用。MiniGUI作为源代码开放的自由软件,在嵌入式图形用户界面领域将有更好的实用价值,并随着MiniGUI的功能日趋强大,应用将越来越广泛。