西安科技大学硕士学位论文
4.4.1 MiniGUI的功能特点
作为操作系统和应用程序之间的中间件,MiniGUI将底层操作系统及硬件平台差别隐藏起来,并对上层应用程序提供了一致的功能特性。这些功能特性如下[33]:
(1) 遵循GPL条款的自由软件,全部源代码已经用户手册、编程指南、API参考手册等相关资料均可从internet上以近乎免费的成本获得。
(2) 提供了完备的多窗口机制和消息传递机制。
(3) 提供常用的控件类,包括静态文本框、按钮、单行和多行编辑框、列表框、组合框、进度条、属性页、工具栏、拖动条、树型控件、月历控件等。
(4) 对话框和消息框支持。
(5) 其它GUI元素,包括菜单、加速键、插入符、定时器等。
(6) 界面皮肤支持。用户可以通过皮肤支持获得外观非常华丽的图形界面。 (7) 通过两种不同的内部软件结构支持低端显示设备(比如单色LCD)和高端显示设备(比如彩色显示器),后者在前者的基础上提供了更加强大的图形功能。
(8) Windows的资源文件支持,如位图、图标、光标等。
(9) 各种流行图像文件的支持,包括JPEG、GIF、PNG、TGA、BMP等等。 (10) 多字符集和多字体的支持,目前支持ISO8859-1~ISO8859-15、GB2312、GBK、GB18030、BIG5、EUC-JP、Shift-JIS、EUC-KP、UNICODE等字符集,支持等宽点阵字体、变宽点阵字体、Qt/Embedded使用的嵌入式字体QPF、TrueType以及Adobe Typel等矢量字体。
(11) 多种键盘布局的支持。MiniGUI除支持常见的美式PC键盘布局之外,还支持法语、德语等西欧语种的键盘布局。
(12) 汉字(GB2312)输入法支持,包括内码、全拼、智能拼音等。用户还可以从飞漫软件获得五笔、自然码等输入法支持。
(13) 针对嵌入式系统的特殊支持,包括一般性的I/O流操作,字节序相关函数等。 (14) 层的支持。可以使用JoinLayer将一个客户程序加入到某个已由其它客户程序创建好的层中。如果成功,则处于同一层中的客户能够同时向屏幕上进行图形输出(该功能增加在MiniGUI-Lite版本中)。
(15) 借鉴著名的跨平台游戏和多媒体函数库SDL(Simple DirectMedia Layer)的新GAL接口即NEWGAL。提供了快速和增强的位块操作,视频加速支持以及Alpha混合等功能。
(16) 增强的新GDI函数,包括光栅操作、复杂区域处理、椭圆、圆弧、多边形以及区域填充等函数。
28
4 收款保险箱系统软件平台设计 (17) 图形抽象层(GAL)以及输入抽象层(IAL)。利用GAL和IAL,MiniGUI可以在许多图形引擎上运行,并且可以非常方便地将MiniGUI移植到其它POSIX系统上,而这只需要根据我们的抽象层接口实现新的图形引擎即可。基于QVFB图形引擎,MiniGUI应用程序可以运行在X Windows上,这将大大方便应用程序的调试。
4.4.2 MiniGUI的优势
比较目前几个面向实时嵌入式Linux系统的GUI,目前比较成熟同时得到最多开发人员认可的有MicroWindows、Qt/Embedded以及MiniGUI等三个系统[34]。相比较而言,MiniGUI在以下几个方面有其独特的优势。 (1) 轻型、占用资源少
MiniGUI本身的占用空间非常小,基于Linux和MiniGUI的嵌入式系统主要存储空间计算如下:
● Linux内核:300K~500K(由系统决定) ● 文件系统:500K~2MB(由系统需求决定) ● MiniGUI支持库:300K~500K(由编译选项确定)
● MiniGUI字体、位图等资源:400K(由应用程序确定,可缩小到200K以内) ● GB2312输入法码表:200K(不是必需的,由应用程序确定) ●应用程序:1M~2M(由系统决定)
总计应该在2M~4M左右。如果不需要某些特征,系统容量还可以更少。 (2) 高性能
MicroWindows采用的传统的基于UNIX套接字的客户/服务器系统结构。在这种体系结构下,客户建立窗口、绘制等都要通过套接字传递到服务器,由服务器完成实质工作。这样,系统非常依赖于UNIX套接字通讯;而UNIX套接字的数据传递,要经过内核,然后再传递到另外一个程序。这样,大量的数据在客户/内核/服务器之间传递,从而增加了系统负荷,也占用了许多系统资源。加上MicroWindows的图形引擎代码未经任何优化,因此,MicroWindows的图形效率很低。
Qt/Embedded是C++的函数库,影响其图形效率的原因,主要是C++的臃肿和由此造成的系统资源的极度浪费。从对用户操作的响应能力、应用程序的启动速度等方面看,Qt/Embedded的速度是最慢的。
MiniGUI为提高整体性能,首先采用了独特的体系结构,其次对图形系统进行了大规模的优化。 (3) 高可靠性
29
西安科技大学硕士学位论文
从1999年MiniGUI的第一个版本发布以来,就有许多产品和项目使用MiniGUI,MiniGUI本身也不断从这些产品或者项目中获得发展动力和新的技术要求,不断提高了自身的可靠性和健壮性。 (4) 可配置
嵌入式系统千变万化要求GUI系统可配置。通过Linux下的Automake和Autoconf接口,实现了大量的编译配置选项,通过这些选项可指定MiniGUI库中包括哪些功能而同时不包括哪些功能。大体说来,可以在如下几个方面对MiniGUI进行定制配置:
● 指定MiniGUI要运行的操作系统;
● 指定生成基于线程的MiniGUI-Threads版本还是基于进程的MiniGUI-Lite版本; ● 指定要采用老的GAL/GDI接口(低端显示设备)还是新的GAL/GDI接口(高端显示设备);
● 指定需要支持的GAL引擎和IAL引擎,以及引擎相关选项; ● 指定需要支持的字体类型; ● 指定需要支持的字符集; ● 指定需要支持的图像文件格式; ● 指定需要支持的控件类;
● 指定控件的整体风格,是三维风格还是平面风格; ● 其它。
总之,MiniGUI是一个非常适合于工业控制实时系统以及嵌入式系统的高效、可靠、可定制、小巧的图形用户界面支持系统。
4.4.3 MiniGUI图形界面的开发
1) MiniGUI在PC环境搭建
这里搭建的环境是让MiniGUI在PC机上运行,由于本系统应用程序开发时是在PC上开发的,在PC机交叉编译,把交叉编译好的可执行文件下载到板子上就可以了。
(1) 安装MiniGUI库文件
本系统使用libminigui-1.3.3.tar.gz这个包安装MiniGUI库文件。 (2) 安装qvfb
可以使用Ubuntu8.04内置的新立得软件包管理器来安装qvfb,点击显示器屏幕上方菜单栏的系统?系统管理?新立得软件包管理器,当管理器界面打开后点击搜索输入qvfb然后点击搜索,在搜索结果中选中qt3-dev-tools-embedded。然后点击应用安装完毕即可。
30
4 收款保险箱系统软件平台设计 (3) 安装MiniGUI资源文件
本系统使用minigui-res-1.3.3.tar.gz包安装MiniGUI资源文件[35]。 至此MiniGUI的PC环境搭建完毕。 2) MiniGUI交叉编译环境的搭建
MiniGUI的应用程序运行时要有动态库的支持,而最后无论是应用程序还是动态共享库都要在ARM平台上运行的,所以MiniGUI的库要利用ARM的编译器进行交叉编译。这里介绍MiniGUI交叉环境的搭建。
(1) 安装zlib库
本系统使用zlib-1.2.3.tar.gz包安装zlib库。由于zlib库的configure脚本不支持交叉编译选项,必须手动临时把gcc修改成指向我们的交叉编译器arm-linux-gcc。
(2) 安装png库
这个库是用来显示PNG图形的,MiniGUI里很多图片都是PNG的,如果没有这个库,MiniGUI将无法正常工作。本系统使用libpng-1.0.10rc1.tar.gz包安装png库。
(3) 安装jpeg库
安装jpeg库是用来显示JPG图形的,MiniGUI里有JPG图片,如果没有安装这个库,(4) 安装ttf字体支持库
最后安装libttf库,这个是TrueType字体的支持库,在嵌入式开发中还是经常会用的,最好也装上。系统中使用freetype-1.3.1.tar.gz包安装ttf字体库。
(5) 交叉编译MiniGUI
安装交叉编译MiniGUI前,首先要选择好编译器arm-linux-gcc,配置相关选项,如target目标平台选项选择arm-linux、build选项用来指明宿主机的类型这里使用i686-pc-linux-gnu、prefix选项用于指定MiniGUI函数库的安装路径等。配置好相关选项后,就可以编译和安装了,这里安装其实是给交叉编译器安装libminigui的库,为将来交叉编译含MiniGUI代码的程序做好准备。
(6) 安装MiniGUI资源文件
资源文件无需安装,只要将安装PC环境的所有MiniGUI资源文件拷贝到交叉编译环境的资源目录下即可。
至此MiniGUI交叉编译环境搭建完毕。
MiniGUI也将无法正常工作。本系统使用jpegsrc.v6b.tar.gz包安装jpeg库。
4.5 嵌入式数据库的设计与开发
在第1章绪论中,嵌入式数据库的设计方案中提出本嵌入式系统选用Berkeley DB
31
西安科技大学硕士学位论文
作为嵌入式数据库。Berkeley DB在数据存取方面非常高效。其高效性主要来自下面的两个方面[11]:
其一,使用Berkeley DB时,应用程序实际上是链接一个Berkeley DB提供的C库,这样运行时应用程序和所使用的数据库系统即C库都运行在同一个进程空间当中,而不是向远程服务器发送消息,从而消除了常见的客户端-服务器体系结构中所需要的进程间通信所导致的性能损耗。
其二,Berkeley DB提供简单的API来完成所有的数据库操作,而不是使用SQL语言,这样就减少了对结构化查询语言进行解析和处理所需的开销,提高了数据读取和查询效率。
Berkeley DB交叉编译环境的搭建,建立可以在ARM-Linux平台上运行的Berkeley DB库。本系统使用db-4.7.25.NC包安装数据库。
4.6 本章小结
本章主要介绍收款保险箱系统软件平台的设计,在介绍了收款保险箱系统软件平台的组成和软件平台的开发流程后,分别详细讲述了如何一步一步地构建嵌入式软件平台,包括Linux操作系统在9200上的移植分析、GUI图形界面的设计与开发和嵌入式数据库的设计与开发。
32