MiniGUI是由北京飞漫软体技术有限公司创办的开源Linux图形用户界面支持系统,经过近些年的发展,MiniGUI已经发展成为比较成熟的性能优良的、功能丰富的跨作业系统的嵌入式图形界面支持系统。“小”是MiniGUI的特色,它目前已经广泛套用于通讯、医疗、工控、电子、机顶盒、多媒体等领域。目前,MiniGUI的最新版本为MiniGUI 3.0。MiniGUI对中文的支持很友好。它支持GB2312与BIG5字元集,其他字元集也可以轻松加入。
基本介绍
中文名 :MiniGUI 创办商 :北京飞漫软体技术有限公司 属于 :开源Linux图形用户界面支持系统 套用范围 :通讯、医疗、工控、电子
简介,特点优势,技术特性,MiniGUI 的技术优势,MiniGUI V3.0,运行模式,MiniGUI-Threads,MiniGUI-Processes,MiniGUI-Standalone,软体架构,图形抽象层,输入抽象层,图形设备接口,讯息处理模组,多视窗处理模组和控制项,外观支持,
简介
MiniGUI 是一款面向嵌入式系统的高级视窗系统(Windowing System)和图形用户界面(Graphical User Interface,GUI)支持系统,由魏永明先生于 1998 年底开始开发。2002 年,魏永明先生创建北京飞漫软体技术有限公司,为 MiniGUI 提供商业技术支持,同时也继续提供开源版本,飞漫软体是中国地区为开源社区贡献代码最多的软体企业。最后一个采用 GPL 授权的 MiniGUI 版本是 1.6.10,从 MiniGUI 2.0.4 开始 MiniGUI 被重写并使用商业授权。 历经十余年时间, MiniGUI 已经成为性能优良、功能丰富的跨作业系统嵌入式图形用户界面支持系统,支持Linux/uClinux、eCos、 uC/OS-II、VxWorks、ThreadX、Nucleus 、pSOS、OSE 等作业系统和数十种 SoC晶片,已验证的硬体平台包括 ARM-based SoCs、MIPS based SoCs、IA-based SoCs、PowerPC、M68K(DragonBall /ColdFire)、Intel x86 等等,广泛套用于通讯、医疗、工控、电力、机顶盒、多媒体终端等领域。使用 MiniGUI 成功开发产品的企业有华为、中兴通讯、大唐移动、长虹、TCL、联想、迈瑞、南瑞、炬力、D2 等。这些用户广泛分部在中国大陆、台湾、新加坡、韩国、美国、德国、义大利、印度、以色列等国家和地区。 值得一提的是,在中国自主开发的 3G 通讯标准 TD-SCDMA中,约有 60% 获得入网许可证的 TD-SCDMA 手机使用 MiniGUI 作为其嵌入式图形平台,以支撑浏览器、可视电话等 3G 套用软体的运行,其中有联想TD30t、海信 T68、中兴通讯 U85 等大家熟悉的 TD 手机型号。 在 MiniGUI 的基础上,飞漫软体研发了 mDolphin (基于开源的浏览器核心 WebKit 的嵌入式浏览器,满分通过 Acid3 的基准测试)、mPeer (为使用 Java 技术的嵌入式设备提供高效的 J2SE AWT/Swing 实现支持),并且开发了基于 Eclipse CDT 的可视化集成开发环境,为开发人员提供所见即所得(WYSIWYG)的界面设计环境。 2010年,飞漫软体把最新版的 MiniGUI、mDolphin、mPeer、mStudio 等系统整合在一起,推出了合璧作业系统(HybridOS)解决方案,是一整套专为嵌入式设备打造的快速开发平台,集成了飞漫软体10年的嵌入式行业研发经验和众多成熟的产品,使众多的希望在嵌入式设备上做开发的中小型企业,摆脱了“不稳定的核心以及驱动程式”、“交叉编译工具链、基础函式馆存在大量缺陷”、“不恰当的开源软体”、“高水平嵌入式开发工程师缺乏”等这些问题的困扰,从而能够在一个运行稳定、功能强大的小巧系统核心基础上,专注开发产品。合璧作业系统(HybridOS)采用新的商业授权模式,性价比颇高。 截止2010年9月,MiniGUI 的最新版本是3.0.10, MiniGUI 将作为合璧作业系统(HybridOS)的一个组成部分而不断演进,推荐新老用户使用合璧作业系统(Hybridos)作为嵌入式开发平台,必将节省大量的开发成本和时间。 (概述内容来源:)
特点优势
MiniGUI 为嵌入式 Linux 系统提供了完整的图形系统支持,是全球针对嵌入式 Linux仅有的两个商用嵌入式GUI系统之一。MiniGUI为嵌入式Linux 系统提供了完整的多进程支持;可以 MiniGUI-Processes、MiniGUI-Threads或者MiniGUI-Standalone 三种运行模式运行。
技术特性
硬体适配性 : 可运行于各种含有 MMU(记忆体管理单元)的 32 位处理器架构之上,如 ix386、ARM、MIPS、PowerPC 等。 支持低端显示设备(比如单色 LCD)和高端显示设备(8 位色及以上显示设备)。通过 MiniGUI 的图形抽象层及图形引擎技术,还可以支持特殊的显示设备,比如 YUV 显示设备。对显示设备解析度无最大和最小限制。 副屏支持。当系统中有多个视频设备时,可将一个作为 MiniGUI 的主屏,实现完整的多视窗系统;而其它设备作为副屏,在其上通过 MiniGUI 的图形接口来实现文字渲染、图形显示等功能。 可支持各种输入设备,如 PC 键盘、PC 滑鼠、小键盘(Keypad)、触控萤幕、遥控器等等。 多种键盘布局的支持。MiniGUI 除支持常见的美式 PC 键盘布局之外,还支持法语、德语等西欧语种的键 盘布局。
资源消耗 : MiniGUI 的静态存储随配置选项的不同而不同,最少需占用 1MB 静态存储空间。 MiniGUI 启动后,初始占用 1MB 动态存储空间。建议系统记忆体为 8MB 以上。
作业系统适配性 : 支持 Linux 作业系统(非 uClinux 作业系统),可以 MiniGUI-Processes、MiniGUI-Threads 或者 MiniGUI-Standalone 三种运行模式运行。 内建资源支持。可以将 MiniGUI 所使用的资源,诸如点阵图、图示和字型等编译到函式馆中,该特性可提高 MiniGUI 的初始化速度,并且非常适合无档案系统支持的实时嵌入式作业系统。 针对嵌入式系统的特殊支持,包括一般性的 I/O 流操作,位元组序相关函式等。
视窗子系统特性 : 完备的多视窗机制和讯息传递机制。使用 MiniGUI-Threads 运行模式时,可在不同执行绪中创建主视窗,并支持执行绪间的讯息传递;使用 MiniGUI-Processes 运行模式时,支持完整的多进程视窗系统。 对话框和讯息框支持。 提供常用的控制项类,包括静态文本框、按钮、单行和多行编辑框、列表框、组合框、选单按钮、进度条、滑块、属性页、工具列、树型控制项、月历控制项、旋钮控制项、酷工具列、格线控制项、动画控制项等。 其它 GUI 元素,包括选单、加速键、插入符、定时器等。
图形子系统特性 : 提供有增强 GDI 函式,包括光栅操作、复杂区域处理、椭圆、圆弧、多边形以及区域填充等函式。在提供有兼容于 C99 规范的数学库平台上,还提供有高级二维绘图函式,可设定线宽、线型以及填充模式等。通过 MiniGUI 的图形抽象层及图形引擎技术,也可以让上述高级 GDI 接口在低端显示屏上实现。 各种流行图像档案的支持,包括 Windows BMP、GIF、JPEG、PNG等(JPEG 及 PNG的支持通过 libjpeg 及 libpng 函式馆提供)。 Windows 的资源档案支持,如点阵图、图示、游标等。 多字元集和多字型支持,目前支持 ISO8859-1~ISO8859-15、GB2312、GBK、GB18030、BIG5、EUC-JP、Shift-JIS、EUC-KR、UNICODE(UTF-8、UTF-16编码)等字元集,支持等宽点阵字型、变宽点阵字型、Qt/Embedded 使用的嵌入式字型 QPF、TrueType矢量字型(对 TrueType 的支持通过 freetype 1.3 函式馆提供)。 输入法支持,用于提供各种可能的输入形式;内建有适合 PC 平台的汉字(GB2312)输入法支持,包括内码、全拼、智慧型拼音、五笔及自然码等。
MiniGUI 的技术优势
和其它针对嵌入式产品的图形系统相比,MiniGUI 在对系统的需求上具有如下几大优势:
可伸缩性强 。MiniGUI 丰富的功能和可配置特性,使得它既可运行于 CPU 主频只有 60MHz 的低端产品中,亦可运行于高端嵌入式设备中,并使用 MiniGUI 的高级控制项风格及皮肤界面等技术,创建华丽的用户界面。MiniGUI 的跨作业系统特性,使得 MiniGUI 可运行在最简单的嵌入式作业系统之上,如 uC/OS-II,也可以运行在具有现代作业系统特性的嵌入式作业系统之上,如 Linux,而且 MiniGUI 为嵌入式 Linux 系统提供了完整的多视窗图形环境。这些特性,使得 MiniGUI 具有非常强的可伸缩性。可伸缩性是 MiniGUI 从设计之初就考虑且不断完善而来的。这个特性使得 MiniGUI 可套用于简单的行业终端,也可套用于复杂的消费类电子产品。
轻型、占用资源少 。MiniGUI 是一个定位于轻量级的嵌入式图形库,对系统资源的需求完全考虑到了嵌入式设备的硬体情况,如 MiniGUI 库所占的空间最小可以裁剪到 500K 左右,对目前的嵌入式设备来说,满足这一条件是绰绰有余的。此外,测试结果表明,MiniGUI 能够在 CPU 主频为 30 MHz,仅有 4M RAM 的系统上正常运行(使用 uClinux 作业系统),这是其它针对嵌入式产品的图形系统所无法达到的。
高性能、高可靠性。 MiniGUI 良好的体系结构及最佳化的图形接口,可确保最快的图形绘制速度。在设计之初,就充分考虑到了实时嵌入式系统的特点,针对多视窗环境下的图形绘制开展了大量的研究及开发,最佳化了 MiniGUI 的图形绘制性能及资源占用。MiniGUI 在大量实际系统中的套用,尤其在工业控制系统的套用,证明 MiniGUI 具有非常好的性能。从 1999 年 MiniGUI 的第一个版本发布以来,就有许多产品和项目使用 MiniGUI,MiniGUI 也不断从这些产品或者项目当中获得发展动力和新的技术需求,逐渐提高了自身的可靠性和健壮性。有关 MiniGUI 的最新成功案例,您可以访问飞漫公司网站的典型案例部分。
可配置性 。为满足嵌入式系统各种各样的需求,必须要求 GUI 系统是可配置的。和 Linux 核心类似,MiniGUI 也实现了大量的编译配置选项,通过这些选项可指定 MiniGUI 库中包括哪些功能而同时不包括哪些功能。大体说来,可以在如下几个方面对 MiniGUI 进行定制配置: 指定 MiniGUI 要运行的硬体平台。 指定 MiniGUI 要运行的作业系统。 指定生成基于执行绪的 MiniGUI-Threads 运行模式还是基于进程的 MiniGUI-Processes 运行模式,或者只是最简单的 MiniGUI-Standalone 运行模式。 指定需要支持的 GAL 引擎和 IAL 引擎,以及引擎相关选项。 指定需要支持的字型类型。 指定需要支持的字元集。 指定需要支持的图像档案格式。 指定需要支持的控制项类。 指定控制项和视窗的整体风格,可以通过指定不同的渲染器完成。这些配置选项大大增强了 MiniGUI 的灵活性,对用户来讲,可针对具体的套用需求量体裁衣,开发最适合产品需求的套用软体。 总之,将现代视窗和图形技术带入到嵌入式设备的MiniGUI,是一个非常适合于实时嵌入式设备的高效、可靠、可定制、小巧灵活的图形用户界面支持系统,其主要优点可以总结如下: 支持多种嵌入式作业系统,具备优秀的可移植性; 可伸缩的系统架构,易于扩展; 功能丰富,可灵活剪裁; 小体积高性能间的最佳平衡; 广泛的套用领域。
MiniGUI V3.0
在以前版本的基础上新增了如下新特性:
主视窗双缓冲区 (Double Buffering Main Window) 当 MiniGUI 3.0 的主视窗具有双缓冲区时,可以在自定义缓冲区中获得整个主视窗的渲染结果。在此基础上,可以利用高级 2D 图形接口或者 3D 图形接口获得主视窗的各种特殊显示效果,如推拉切换、翻页切换、卷曲效果等等。
外观渲染器 (Look and Feel Renderer)支持。MiniGUI V3.0 改变了以往只支持三种控制项风格的方式,引入了渲染器(Look and Feel)这一全新的模式。渲染器是定义如何绘制视窗元素的渲染器,是在MiniGUI V2.0.X的基础上继续完善的。视窗元素包括框线、标题栏、标题栏按钮、滚动条、选定项目、无效项目、高亮项目、突出项目、三维对象等;视窗元素的外观属性,包括视窗元素的颜色、尺寸、字型等信息;视窗元素渲染器是对视窗元素进行定制大小、颜色、图形、字型,便于用户设计个性化的外观显示风格。用户可以指定某个主视窗或某个控制项使用特定的渲染器,也可定制非客户区渲染器、视窗元素的尺寸、颜色、字型、图示,同时增强资源管理功能,从而获得更加华丽的图形界面。MiniGUI实现了几种默认整体显示风格:Classic 、Flat、Fashion 和Skin。用户可以在配置 MiniGUI 时指定相应的选项来将 MiniGUI 编译成特定的一种显示风格。 Classic: 这种风格的界面是标准的Window 95风格界面,也是最广泛使用的风格了。 Fashion: 此种风格的界面,采用 MiniGUI 3.0 组件 mGPlus 提供的颜色渐变填充技术,因此,可获得非常炫丽的界面效果; Flat: 此种风格的视窗界面,线条清晰,简洁,因此适用于单色或者灰度显示屏。因为绘制简单,因此该渲染器占用资源最少,运行速度最快; Skin: 上面三种外观渲染器基本上都是由代码绘制出来的,具有小巧灵活的特点。但是,在嵌入式套用领域,设备的差别非常大。有些设备,已经具备了非常高的运算性能。在这种情况下,可以考虑使用皮肤外观渲染器来美化界面。皮肤外观渲染器需要一整套和界面相关的图片,因此需要占用一些存储资源。皮肤外观渲染器的最大的特点是允许用户定制界面,用户可以使用自己设计的图片替换系统原有的图片,展现在用户面前的就将是你自己设计的界面效果。
双向文本(BIDI Text)的显示与输入 。大家知道,除了大家熟知的从左向右书写的文字(如英语、汉语等)之外,还有许多语言采用从右向左的书写习惯,如阿拉伯文和希伯来文等。为了支持这些语言,MiniGUI 3.0中增加了对这两种语言所属字元集的处理,并增加了阿拉伯和希伯来键盘布局的支持,从而实现了对双向文本的输入输出处理。阿拉伯文以及希伯来文的显示。
不规则视窗 。MiniGUI V3.0实现了不规则视窗与控制项,可满足用户对视窗外观各种不同的需求。不规则视窗通过一个Region数据结构来表示可见区域,或者通过8位MYBITMAP中的透明值形成不可见区域。
字型 。在 MiniGUI 3.0 中,飞漫软体发明了一种新的 UNICODE 字型档格式,称为“UPF”字型。这种字型的最大特点,是便于在多进程环境下使用,从而极大地节约了记忆体的使用。同时,飞漫软体增强了VBF字型格式,将VBF 字型升级到了3.0,扩大了其能适用的字元集范围,以便支持阿拉伯文等语言文字的显示。
其他增强 。MiniGUI 3.0实现了桌面的可定制。通过桌面的外部编程接口,用户可以在桌面放置图示并回响桌面事件,实现类似Windows桌面的界面效果。除此之外,MiniGUI 3.0 还增强了透明控制项的实现,使之效率更高,且不依赖于控制项的内部实现代码。MiniGUI 3.0 还提供独立的滚动条控制项,提供统一的虚拟帧缓冲区程式支持等等。另外最新的MiniGUI V3.0新增加了两个新的组件:mGUtils和mGPlus,把字型、点阵图、图示、游标等资源进行统一管理,资源的内嵌和非内嵌方式并不影响模组的组成,由此抽象出系统资源管理模组。
运行模式
和 Linux 这样的类 UNIX 作业系统相比,一般意义上的传统嵌入式作业系统具有一些特殊性。举例而言,诸如 uClinux、uC/OS-II、eCos 等作业系统,通常运行在没有 MMU(记忆体管理单元,用于提供虚拟记忆体支持)的 CPU 上;这时,往往就没有进程的概念,而只有执行绪或者任务的概念,这样,MiniGUI 的运行环境也就大相迳庭。因此,为了适合不同的作业系统环境,可将 MiniGUI 配置成三种不同的运行模式:
MiniGUI-Threads
运行在 MiniGUI-Threads 上的程式可以在不同的执行绪中建立多个视窗,但所有的视窗在一个进程或者地址空间中运行。这种运行模式主要用来支持大多数传统意义上的嵌入式作业系统,比如 VxWorks 、ThreadX、Nucleus、OSE、pSOS、uC/OS-II、eCos等等。当然,在 Linux 和 uClinux 上,MiniGUI 也能以 MiniGUI-Threads 的模式运行。
MiniGUI-Processes
和 MiniGUI-Threads相反,MiniGUI-Processes 上的每个程式是单独的进程,每个进程也可以建立多个视窗,并且实现了多进程视窗系统。MiniGUI-Processes 适合于具有完整 UNIX 特性的嵌入式作业系统,比如嵌入式 Linux。该运行模式在 MiniGUI V2.0 中提供。
MiniGUI-Standalone
这种运行模式下,MiniGUI 可以以独立任务的方式运行,既不需要多执行绪也不需要多进程的支持,这种运行模式适合功能单一的套用场合。比如在一些使用 uClinux 的嵌入式产品中,因为各种原因而缺少执行绪支持,这时,就可以使用 MiniGUI-Standalone 来开发套用软体。 一般而言,MiniGUI-Standalone 模式的适应面最广,可以支持几乎所有的作业系统(目前只用来提供对 Linux/uClinux 作业系统的支持);MiniGUI-Threads 模式的适用面次之,可运行在支持多任务的实时嵌入式作业系统,或者具备完整 UNIX 特性的普通作业系统;MiniGUI-Processes 模式的适用面较小,它仅适合于具备完整 UNIX 特性的嵌入式作业系统,比如 Linux。但不论采用哪种运行模式,MiniGUI 为上层套用软体提供了最大程度上的一致性;只有少数几个涉及初始化的接口在不同运行模式上有所不同。
软体架构
MiniGUI 由如下几个模组组成:MiniGUI软体架构图
minigui软体架构图 图形抽象层
(Graphics Abstraction Layer,GAL)。图形抽象层将来自不同作业系统或设备的图形接口进行抽象,为 MiniGUI 上层提供统一的图形接口。在图形抽象层内,包含有针对 Linux FB 设备、eCos LCD 设备等的软体组成部分。这些软体组成部分通过调用底层设备的接口来实现具体的图形抽象层操作,如打开设备、设定解析度及显示模式、关闭设备等。将这些用于适配图形抽象层接口的软体组成部分称为“引擎(engine)”,其概念和作业系统中的设备驱动程式类似。
输入抽象层
(Input Abstraction Layer,IAL)。和 GAL 类似,输入抽象层将 MiniGUI 涉及的所有输入设备,如键盘(keyboard)、小键盘(keypad)、滑鼠(mouse)、触控萤幕(touch screen)等抽象了出来,为上层提供一致的接口。要支持不同的键盘、触控萤幕或者滑鼠接口,则通过为 IAL 编写不同的输入引擎实现。MiniGUI 通过 IAL 及其输入引擎,提供对 Linux 控制台(键盘及滑鼠)、触控萤幕、遥控器、小键盘等输入设备的支持。
图形设备接口
(Graphics Device Interfaces,GDI)。该模组基于图形抽象层为上层应用程式提供图形相关的接口,如绘制曲线、输出文本、填充矩形等等。图形设备接口中含包含其他比较独立的子模组,如字型字元集(font and charset)支持、图像(image)支持等。
讯息处理模组
(Messaging Module)。该模组在输入抽象层基础上,实现了 MiniGUI 的讯息处理机制,为上层提供了完备的讯息管理接口。众所周知,几乎所有的GUI 系统本质上都是事件驱动的,系统自身的运行,以及GUI 应用程式的运行,都依赖于讯息处理模组。
多视窗处理模组和控制项
(Windowing Module)和(Control 或 Widget)。基于图形设备接口和讯息处理模组,MiniGUI 实现了多视窗处理模组。该模组为上层应用程式提供了创建主视窗和控制项的基本接口,并负责维护控制项类。控制项类是用来实现控制项代码重用的重要概念,利用控制项类(control class),可以创建属于某个控制项类的多个控制项实例(instance),从而让这些控制项实例使用同一个控制项类的代码,这样,就实现了类似 C++ 那样的类和实例概念,从而可以最大程度上重复利用已有代码,并提高软体的可维护性。MiniGUI 的控制项模组实现了常见的 GUI 控制项,如静态框、按钮、编辑框、列表框、下拉框等等。
外观支持
(Look and Feel)。这个模组是 MiniGUI V3.0 提供给上层应用程式的接口,可用来定制 MiniGUI 视窗、控制项的绘制。在 MiniGUI V3.0 之前的版本中,对主视窗和控制项的定制能力,还没有被抽离出来形成独立的模组,但仍然可以通过配置选项让 MiniGUI 的主视窗、控制项具有三种显示风格,分别是:类似 PC 的三维风格(PC3D )、平板风格(FLAT)、流行风格(FASHION)。在 MiniGUI 3.0 中,主视窗和控制项的外观可完全由应用程式自行定制,在创建主视窗或者控制项时,指定外观渲染器(renderer)的名称,就可以让主视窗或者控制项具有各自不同的外观。 在 MiniGUI 核心(Core)接口之上,还为应用程式提供若干组件,这些组件分别为应用程式提供某些特殊的功能特性:
mGi 是 MiniGUI 的输入法组件,该组件目前提供了软键盘输入法和手写输入法框架,并提供给用户管理输入法的容器,通过这个容器,用户还可以添加自定义的输入法。
mGp 是针对 MiniGUI 应用程式的一个列印组件,该组件使用户的 MiniGUI 程式具有列印输出功能,可以将 MiniGUI 程式中的点阵图或文字输出到印表机。
mG3d 是一个为 MiniGUI 的应用程式提供 3D 接口的组件,通过这些接口,用户可以给自己的应用程式添加三维图像、文字渲染、场景渲染等效果,从而可以具有三维效果的人机界面。
mGUtils 组件为用户提供了一些常用的对话框模板,有了这些模板,用户就不用为一些常用的功能编写重复代码了。本组件提供的功能模板有:普通档案对话框、颜色设定对话框、字型设定对话框、信息设定对话框等。
mGPlus 组件是对 MiniGUI 图形绘制接口的一个扩充和增强,主要提供对二维矢量图形和高级图形算法的支持,如路径、渐变填充和颜色组合等。
mGEff 组件提供常规的页面特效支持。