1. 引言
随着嵌入式系统应用越来越来广泛,以及嵌入式系统资源的日益丰富、性能的大幅度提
高,人们对嵌入式系统中的人机交互接口的要求也越来越高。配备图形用户接口,在一些消
费类产品中已经不可缺少,比如常见的手机、PDA、手持设备等。
嵌入式领域中出现了专门的公司致力于开发Linux 下的GUI,从而大大提升了嵌入式
GUI 的研发速度。随着GUI 的不断完善,在嵌入式 Linux 中出现了一批高性能、轻量级的
GUI 系统,主要包括:紧缩的XWindow、MiniGUI、Microwindows、OpenGUI、Qt/Embeded
等。相比较而言,MiniGUI 得到许多厂商的青睐,并有着良好的发展势头,目前已经在很
多项目中得以应用。
MiniGUI 是一个比较成熟的图形用户接口支持系统,是一个能广泛应用于各种嵌入式系
统的高效、可靠、可定制、小巧灵活的图形用户接口支持系统;其分层体系结构设计使得其
具有较好的可移植性。在MiniGUI 的开发中,应用程序是最上层的开发,其交互界面直接
通过MiniGUI 图形系统的API 接口函数实现。MiniGUI 屏蔽了底层显示、输入设备编程的
细节,使程序员更能专注于信息终端界面的功能特色,从而缩短了编程投入时间。MiniGUI
图形系统经编译安装后一般以库的形式存放在操作系统中。基于MiniGUI 的系统框架结构
如图1-1 所示[1]。
用户应用程序
MiniGUI 图形用户界面
Linux 操作系统
硬件平台
图1-1 系统框架图

2. MiniGUI 的交叉编译
2.1 MiniGUI 的体系结构与可移植性
MiniGUI 具有许多的特点,例如:提供完备的多窗口机制和消息传递机制,提供常用的控
件类、对话框和消息框支持,界面皮肤支持, Windows 资源文件和图像文件支持,多字符集和
多字体支持,汉字(GB2312)输入法支持等等。
从整体上看,如图2-1 所示[5],MiniGUI 是分层设计的:最顶层的API 是提供给用户使用
的编程接口;中间层 MiniGUI 核心则包括了窗口系统的各个模块;最底层的GAL 和IAL
为MiniGUI 提供了底层的Linux 或者XWindow 上的图形接口支持以及输入设备如鼠标、键
盘等的驱动;而PThread 则是提供了内核级线程支持的函数库。MiniGUI 的分层体系结构中
的GAL 和IAL,大大提高了MiniGUI 的可移植性,并且使程序的开发和调试变得更加容易:
可以在Windows 使用接口的模拟器wvfb,当MiniGUI 程序调试成功后会加载到嵌入式Linux
的文件系统中。但无论是何种开发平台,MiniGUI 的开发都是基于标准C 语言的,调用标
准C 语言格式的API 函数来实现MiniGUI 核心部分的操作,从MiniGUI 体系结构看,API
是与平台无关的。
图 2-1 MiniGUI 体系结构
本文是基于S3C2440ARM9 开发板和Linux 来移植MiniGUI1.3.3 版本的,在移植的过
程中采取了宿主机和目标板的开发模式。
2.2 建立交叉编译环境
在宿主机(虚拟机Linux)上建立MiniGUI 的交叉编译环境,首先要获得支持目标平台的
交叉编译工具链这里使用的是arm-linux-gcc-2.95.3.tgz,将该文件拷到宿主PC 机上,执行以
下命令:
# tar -xvzf arm-linux-gcc-2.95.3.tgz –C /

这样将默认安装到 /usr/local/arm/2.95.3/bin,然后将该目录添加到系统环境量PATH 中执行:
# vi /root/.bashrc 并且在最后一行添加语句export PATH=$PATH:/usr/local/arm/2.95.3/bin。接
着执行# source /root/.bashrc,以使环境变量生效。
2.3 交叉编译MiniGUI 库函数,并进行配置安装
MiniGUI 是利用Automake 和Autoconf 接口实现自动配置、编译和安装。无论是基于
X86 的 PC 平台还是其他目标平台,用户配置、编译和安装MiniGUI 的过程都是大致相同
的,用户只要使用“./configure”、“make”、“make install”三条命令就可以把程序或函数编译并
安装到系统中。惟一不同的是在运行“./configure” 命令时要根据上一步所安装、设置的交叉
编译环境及不同的目标平台设置不同的命令行参数。
2.3.1 MiniGUI 资源程序包的安装
对源程序包进行安装之前,首先在/opt 目录下建立一source 目录以存放源代码包。即执
行以下命令建立相应的目录[4]:
# mkdir –p /opt/source
先将minigui-res-1.3.3.tar.gz 源代码包拷贝到/opt/source 下,所需的资源文件源代码包位于
/opt/source 目录下。安装资源文件时进入到 minigui-res-1.3.3.tar.gz 所在目录执行以下命令进
行解压并安装:
# tar -zxvf minigui-res-1.3.3.tar.gz
# cd minigui-res-1.3.3
# make install
这样资源文件就安装到默认路径/usr/local/lib/minigui 下,这个文件夹内是一些MiniGUI
程序运行时使用的资源,例如位图、图标、光标之类的。
2.3.2 MiniGUI 库文件的交叉编译
先将 libminigui-1.3.3.tar.gz 源代码包拷贝到/opt/source 下,所需的资源文件源代码包位
于/opt/source 目录下。安装资源文件时进入到 minigui-res-1.3.3.tar.gz 所在目录执行以下指令
进行解压:# tar -zxvf minigui-res-1.3.3.tar.gz
MiniGUI 的应用程序运行时要有动态库的支持,而最后无论是应用程序还是动态共享
库连接都要在 ARM 平台上运行,MiniGUI 库函数要利用ARM 的编译器进行交叉编译。所
以在编译应用程序之前,要配置MiniGUI 的lib 库。在libinigui-1.3.3 目录中配置lib,增加开
关项如下所示:
./configure --host=arm-unknown-linux --enble-jpgsupport=no --enable-pngsupport=no
--enble-gifsupport=no --disable-lite --prefix=/usr/local/arm/2.95.3/arm-linux
--enable-smdk2440ial=yes 以上几个选项的具体意义如下:
(1) --host=arm-unknown-linux:指定宿主机平台类型,即交叉编译器本身运行所在的机器类型。
一般情况下是指x86 体系的PC 机,通常系统能自动识别,也可不指定;
(2) --prefix=/usr/local/arm/2.95.3/arm-linux:指定MiniGUI 函数库、头文件及参考手册的安装
路径。它应该是所使用的交叉编译环境中系统头文件目录include 和库目录 lib 所在的目录,
使得执行 make install 后,相应文件自动安装在该路径下的各个子目录下(lib、include、res 等);
(3) 以--disable-FEATURE 或--enable-FEATURE 的形式出现,它是功能特性开关选项,从而
使用户可以根据目标需求选择MiniGUI 的功能特性,而且编译完成后还可以用交叉编译工具

链中的/usr/local/arm/2.95.3/bin/arm-linux-strip *来对 MiniGUI 函数库进行剪裁;
(4) --smdk2440ial=yes 指明使用smdk2440ial 功能,对LCD 相关操作支持在src/ial/2440.c。这
一项的选择主要是由于使用的目标板是 ARM2440 开发板。
为了让其适合于本文的平台还要修改lib 库的相关选项,修改 configure 配置文件, 在文
件开头增加指定编译器路径。
(1) CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
(2) CPP=/usr/local/arm/2.95.3/bin/arm-linux-cpp
(3) LD=/usr/local/arm/2.95.3/bin/arm-linux-ld
(4) AR=/usr/local/arm/2.95.3/bin/arm-linux-ar
(5) RANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlib
(6) STRIP=/usr/local/arm/2.95.3/bin/arm-linux-strip
接下来依次执行指令make, make install,这样就会在/usr/local/arm/2.95.3/arm-linux/生成
MiniGUI 函数库、头文件和参考手册,删除目录下的lib 中的*.a,*.la 文件,执行:
# arm-linux-strip *来实现对MiniGUI 的剪裁,由于*.a,*.la 文件是MiniGUI 得到静态链接库,
而目标板所用的是动态链接库所以删除它们可以减小MiniGUI 库的大小。
其实在实际编译应用程序的过程中,MiniGUI 的编译需要一些其他库文件的支持,缺省
我们的gcc 基本上都有这些库文件,所以不需要安装,可是现在要交叉编译了,交叉编译器可是
不带这些库文件的,所以我们得自己编译这些库文件并装到交叉编译器中去。比如说
zlib-1.2.3.tar.gz、libpng-1.0.10rc1.tar.gz、jpegsrc.v6b.tar.gz、freetype-1.3.1.tar.gz 等,这些文件
的安装和编译与MiniGUI 资源文件和库文件安装类似,可以参考以上的安装过程,在此不
再赘述。
2.3.3 移植MiniGUI
在嵌入式系统开发过程中,编译完MiniGUI 和应用程序后,要把MiniGUI 库、资源和应用
程序生成在目标系统可执行的文件,而后再将其移到目标板上,这样一个完整的项目移植才算
完成[3]。
假设你已经有一个可以在板子上跑的Linux 系统了,并且已经有一个可以用的根文件系
统了,并且已经有了板子相对应的LCD 的驱动程序,这里简单介绍怎么在你的根文件系统里
加上MiniGUI 使得你的板子有图形界面的显示。
假设可用根文件系统目录叫rootfs,若当前路径已经在rootfs 目录下,则利用以下指令在
rootfs 目录下建立相应的子目录如下所示:# mkdir –p ./usr/local/[lib,etc]
然后将/usr/local/arm/2.95.3/arm-linux/lib 中相应的库拷到rootfs/usr/local/lib 目录下,同时
修改rootfs/etc/ld.so.conf,在ld.so.conf 文件中添加路径/usr/local/lib,然后执行# ldconfig
–r ./rootfs,这样库文件准备完毕,下面把资源文件也拷过来,资源文件被安装在
/usr/local/lib/minigui 目录下# cp –r –a /usr/local/lib/minigui rootfs/usr/local/lib 连目录一起拷
过去,目录结构和主机保持一致,把配置文件也拷过去# cp /usr/local/etc/MiniGUI.cfg
rootfs/usr/local/etc 同时修改一下该配置文件以使LCD 能够正常显示。板子文件系统构建完
毕。
通过 NFS 启动系统,当 NFS 服务设置好并启动后,我们就可以把 NFS 作为根文件系
统来启动开发板了。通过使用NFS 作为根文件系统,开发板的“硬盘”就可以变得很大,因
为您使用的是主机的硬盘,这是使用linux 系统作为开发工具经常使用的方法。
将 MiniGUI 成功地移植到S3C2440 开发板上后,就可把注意力集中在MiniGUI 的图形

用户接口程序的开发工作上,而这需要深入了解MiniGUI 的工作机制,熟悉其应用程序框
架及丰富的 API 函数接口等。
3. MiniGUI 应用示例
3.1 开发方法
MiniGUI1.3.3 图形界面的运行流程如图3-1 所示[2],跟Windows 下GUI 程序设计原理
相近,有Windows 下GUI 编程经验的人几乎不费什么功夫就能实现经典的“Hello World”程
序。
Y
N
N
图 3-1 MiniGUI 应用程序开发流程图
3.2 应用举例
以下示例是利用MiniGUI 做好的一个界面,如图3-2 所示[],其功能是实时采集GPS 数
据,并在电子地图上显示,同时能够上下左右平移电子地图,也能够实时显示当前的经纬度
信息,能够实现地图的缩小和放大功能[6]。
对话框函数
程序入口点
MiniGUIMain
MiniGUI 为lite 版本
创建主窗口
开始主窗口消息循环
显示所创建的窗口
窗口过程函数
屏幕输出
程序退出
设置显示区域
SetDesktopRect
调用对话框回调函数

4. 总结
MiniGUI 是一个非常适合于嵌入式系统的,移植MiniGUI 的过程往往是系统开发时的
一大难点, MiniGUI 体系结构随着应用的发展不断变化,旧版本在开发中出现诸多不便,本
文针对 MiniGUI1.3.3 版本以 S3C2440(ARM9)开发板为例,详细阐述了其移植的过程,并
对 MiniGUI 应用程序设计的基本框架进行了相应阐述, 给出 MiniGUI 电子地图的显示应
用示例, 本文的研究也可为其他基于Linux 和 MiniGUI 的嵌入式系统的开发提供参考。

基于嵌入式Linux 系统的MiniGUI 的移植与应用相关推荐

  1. linux复现数据库,基于嵌入式Linux系统平台并可应用于监控组态软件实时数据库的设计方案详解...

    1 引言 实时数据库(real-me database, RTDB)作为组态软件设计与实现的核心内容解决了其所 应对的现代工业生产现场环境中生产数据与控制数据类型复杂多样,数据处理与事件调度时 间约束 ...

  2. sock 文件方式控制宿主机_基于嵌入式Linux系统实现YAFFS2文件系统存储方案的设计...

    随着嵌入式技术的不断发展,嵌入式系统的应用越来越广泛,人们对于嵌入式系统功能的要求也越来越高,相应地其大容量数据存储和管理变得越来越重要.相对硬盘而言,FLASH等非易失性存储器具有体积小.功耗低.成 ...

  3. 基于嵌入式Linux系统的3G/4G路由器设计——iptables nat 模式

    1. 3G/4G路由器设计方案 本路由器的设计是基于三个模块来实现的,分别为3G模块.WiFi模块和Linux硬件平台,如图1所示.3G模块的功能是利用运营商的无线数据卡进行PPP拨号,使得路由器能通 ...

  4. 基于Linux下嵌入式网关,基于嵌入式Linux系统的无线网络网关设计

    嵌入式网关.嵌入式web服务器(boa).嵌入式sqlite数据库.通用网关接口 1.概述 传统网关在功能上主要完成协议转换及部分系统管理功能,而采用嵌入式无线网关作为无线网络设备接入有线网络的接入部 ...

  5. linux下网络收音机,基于嵌入式Linux的流媒体网络收音机系统的设计与研究

    摘要: 本文研究并设计了基于嵌入式Linux系统的流媒体网络收音机,让广大的普通家庭,特别那些不习惯于操作PC的儿童或中老年人,也能享受到网络,数字媒体,计算机技术所带来的乐趣.该系统在高性能32位处 ...

  6. 实时嵌入式 Linux 系统上GUI的发展与展望

    实时嵌入式 Linux 系统上GUI的发展与展望 GUI与嵌入式 ----在常见的PDA等小型手持式设备上,由于硬件条件等的限制,我们看到的用户界面都非常简单,几乎看不到PC机的华丽美观的GUI支持. ...

  7. 基于嵌入式linux和s32410平台的视频采集

    随着多媒体技术.网络技术的迅猛发展和后PC机时代的到来,利用嵌入式系统实现远程视频监控.可视电话和视频会议等应用已成为可能.为了实现这些应用,实时获得视频数据是一个重要环节.针对这一点,本文在基于嵌入 ...

  8. linux 农业分析,基于嵌入式Linux的农业信息采集系统设计与研究

    摘要: 精准农业是现代化农业发展的方向,将嵌入式数据采集技术应用到农业生产过程中,既可以节省人力物力成本,还可以提高农作物产量和质量,减少农药污染和提高生产效率.在精准农业生产过程中,需要采集和监测农 ...

  9. linux开组态软件,基于嵌入式Linux的组态软件实时数据库的设计

    1 引言 实时数据库(real-TIme database, RTDB)作为组态软件设计与实现的核心内容解决了其所 应对的现代工业生产现场环境中生产数据与控制数据类型复杂多样,数据处理与事件调度时 间 ...

最新文章

  1. 平方变换载波同步 matlab,matlab源码-costas载波同步环.docx
  2. 关于成功的因素-----谨记
  3. 【pytorch】torch.mean的使用
  4. 【干货】大中型企业网络搭建
  5. Spring MVC--接收JSON格式的数据
  6. VRRP浮动路由(浮动路由原理,了解HSRP路由选举原理,实验过程与总结)
  7. .NET 5 的 Target Framework 详解[上篇]
  8. python的命令解析getopt.getopt()函数分析
  9. 谈一谈Java编程开发中虚拟机的内存区域划分?猿们怎么看?
  10. systemtap执行过程中报probe timer.profile registration error
  11. hibernate 多条件组合查询之sql拼接
  12. 初步接触Oracle 11g(1)
  13. TCGA(三)--采用GDC API进行数据查询和获取
  14. 拖动无边框窗体(VB6代码)
  15. 《高质量程序设计指南---C++/C语言》 下载
  16. Windows 系统彻底卸载 SQL Server 通用方法
  17. MATLAB求图像的均值、中值、众数、方差、协方差、相关系数
  18. 在手机上运行 Python,这款工具比 QPython 还好用~
  19. UniApp设置APP图标配置,不自动生成所有图标问题
  20. ora 01033 oracle initialization,ora-01033:oracle initialization or shutdown in progress 解决方法

热门文章

  1. ue4 物品随机生成
  2. 估算北京市有多少家酒店
  3. 19c 数据高可用实用配置 RAC + SingleADG
  4. 首信进军电子商务领域
  5. android adidl回调,合工大Android开发课程报告.docx
  6. go -- 指针和引用
  7. Linux split命令
  8. Linux下 用cmp工具备份,Linux常用命令梳理——文件管理(一)
  9. S7-1500T 飞锯(追剪应用)
  10. VBA-Excel中编写简单的加法运算(示例)