📄 基于 linux 和 minigui 的嵌入式系统软件开发指南(八).htm
字号:
API,包括线条、矩形、圆弧等,并且兼容于 Borland 的 BGI API。第三层用 C++ 编写,提供了完整的 GUI 对象集。</P>
<P>OpenGUI 采用 LGPL 条款发布。OpenGUI 比较适合于基于 x86 平台的实时系统,可移植性稍差,目前的发展也基本停滞。</P>
<P><A id=3.3 name=3.3><B>3.3 Qt/Embedded</B></A><BR>Qt/Embedded是著名的 Qt
库开发商 TrollTech(<A href="http://www.trolltech.com/"
target=_blank>http://www.trolltech.com/</A>)发布的面向嵌入式系统的 Qt 版本。因为 Qt 是 KDE
等项目使用的 GUI 支持库,所以有许多基于 Qt 的 X Window 程序可以非常方便地移植到 Qt/Embedded 版本上。因此,自从
Qt/Embedded 以 GPL 条款形势发布以来,就有大量的嵌入式 Linux 开发商转到了 Qt/Embedded 系统上。比如韩国的
Mizi 公司,台湾省的某些嵌入式 Linux 应用开发商等等。</P>
<P>不过,在笔者看来,Qt/Embedded 还有一些问题值得开发者注意:</P>
<OL class=n01>
<LI>目前,该系统采用两种条款发布,其中包括 GPL 条款。对函数库使用 GPL 条款,意味着其上的应用需要遵循 GPL
条款。当然了,如果要开发商业程序,TrollTech 也允许你采用另外一个授权条款,这时,就必须向 TrollTech 交纳授权费用了。
<LI>Qt/Embedded 是一个 C++ 函数库,尽管 Qt/Embedded 声称可以裁剪到最少 630K,但这时的
Qt/Embedded 库已经基本上失去了使用价值。低的程序效率、大的资源消耗也对运行 Qt/Embedded 的硬件提出了更高的要求。
<LI>Qt/Embedded
库目前主要针对手持式信息终端,因为对硬件加速支持的匮乏,很难应用到对图形速度、功能和效率要求较高的嵌入式系统当中,比如机顶盒、游戏终端等等。
<LI>Qt/Embedded 提供的控件集风格沿用了 PC 风格,并不太适合许多手持设备的操作要求。
<LI>Qt/Embedded 的结构过于复杂,很难进行底层的扩充、定制和移植,尤其是那个用来实现 signal/slot 机制的著名的 moc
文件。 </LI></OL><BR><BR>
<P>因为上述这些原因,目前所见到的 Qt/Embedded 的运行环境,几乎是清一色基于 StrongARM 的 iPAQ。</P>
<P><A id=3.4 name=3.4><B>3.4 MiniGUI</B></A><BR>MiniGUI(<A
href="http://www.minigui.org/"
target=_blank>http://www.minigui.org/</A>)是由笔者主持,并由许多自由软件开发人员支持的一个自由软件项目(遵循
LGPL 条款发布),其目标是为基于 Linux 的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。该项目自 1998 年底开始到现在,已历经
3 年多的开发过程。到目前为止,已经非常成熟和稳定。目前,我们已经正式发布了稳定版本 1.0.9,并且开始了新版本系列的开发,即 MiniGUI
Version 1.1.x,该系列的正式版也即将发布。</P>
<P>在 MiniGUI 几年的发展过程中,有许多值得一提的技术创新点,正是由于这些技术上的创新,才使得 MiniGUI
更加适合实时嵌入式系统;而且 MiniGUI
的灵活性非常好,可以应用在包括手持设备、机顶盒、游戏终端等等在内的各种高端或者低端的嵌入式系统当中。这些技术创新包括:</P>
<OL class=n01>
<LI>图形抽象层。图形抽象层对顶层 API 基本没有影响,但大大方便了 MiniGUI
应用程序的移植、调试等工作。目前包含三个图形引擎,SVGALib、LibGGI 以及直接基于 Linux FrameBuffer 的
Native Engine,利用 LibGGI 时,可在 X Window 上运行 MiniGUI
应用程序,并可非常方便地进行调试。与图形抽象层相关的还有输入事件的抽象层。MiniGUI 现在已经被证明能够在基于
ARM、MIPS、StrongARM 以及 PowerPC 等的嵌入式系统上流畅运行。
<LI>多字体和多字符集支持。这部分通过设备上下文(DC)的逻辑字体(LOGFONT)实现,不管是字体类型还是字符集,都可以非常方便地进行扩充。应用程序在启动时,可切换系统字符集,比如
GB、BIG5、EUCKR、UJIS。利用 DrawText
等函数时,可通过指定字体而获得其他字符集支持。对于一个窗口来说,同时显示不同语种的文字是可能的。MiniGUI 的这种字符集支持不同于传统通过
UNICODE 实现的多字符集支持,这种实现更加适合于嵌入式系统。
<LI>两个不同架构的版本。最初的 MiniGUI 运行在 PThread
库之上,这个版本适合于功能单一的嵌入式系统,但存在系统健壮性不够的缺点。在 0.9.98 版本中,我们引入了 MiniGUI-Lite
版本,这个版本在提高系统健壮性的同时,通过一系列创新途径,避免了传统 C/S 结构的弱点,为功能复杂的嵌入式系统提供了一个高效、稳定的 GUI
系统。 </LI></OL><BR><BR>
<P>在 MiniGUI 1.1.0 版本的开发中,我们参照 SDL 和 Allegro
的图形部分,重新设计了图形抽象层,并增强了图形功能,同时增强了 MiniGUI-Lite 版本的某些特性。这些特性包括:</P>
<OL class=n01>
<LI>MiniGUI-Lite 支持层的概念。同一层可容纳多个能够同时显示的客户程序,并平铺在屏幕上显示。
<LI>新的 GAL 能够支持硬件加速能力,并能够充分使用显示内存;新 GAL 之上的新 GDI 接口得到进一步增强。新的 GDI 接口可以支持
Alpha 混和、透明位块传输、光栅操作、YUV覆盖、Gamma 校正,以及高级图形功能(椭圆、多边形、样条曲线)等等。
</LI></OL><BR><BR>
<P>MiniGUI 新版本在图形方面的增强和提高,将大大扩展它的应用领域,希望能够对嵌入式 Linux 上的多媒体应用、游戏开发提供支持。</P>
<P>纵观嵌入式 Linux 系统上的各种图形系统方案,我们发现,许多图形系统(如 Qt/Embedded 和
MicoroWindows),只注重手持设备上的需求,却不太注重其他应用领域的需求,而其他许多需要图形支持的嵌入式 Linux
系统却需要许多独特的、高级的图形功能,而不仅仅是图形用户界面。为此,在接下来的开发中,我们还将在如下领域继续开发 MiniGUI:</P>
<OL class=n01>
<LI>提供运行在 MiniGUI 上的 JAVA 虚拟机 AWT 组件的实现。
<LI>提供 MiniGUI 上的 OpenGL 实现。
<LI>提供类 QT 控件集的 C++ 封装。
<LI>提供窗口/控件风格主题支持。
<LI>在 MiniGUI-Lite 当中增加对矢量字体的支持。 </LI></OL><BR><BR>
<P><A id=4 name=4><SPAN class=atitle2>4 小结</SPAN></A><BR>综上所述,笔者认为在嵌入式
Linux 图形领域,还有许多有待开发人员仔细研究和解决的问题。MiniGUI
的新的发展,也正源于对这些需求的认识之上。我们也衷心希望能够有更多的自由软件开发人员加盟 MiniGUI 的开发,一同开发新的嵌入式 Linux
的图形系统。</P><!-- Make author heading singular or plural as needed -->
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A id=author1 name=author1><SPAN class=atitle2>关于作者</SPAN></A>
<BR>魏永明(<A
href="mailto:ymwei@minigui.org">ymwei@minigui.org</A>),男,27
岁,工学硕士。国内最有影响的自由软件项目之一--MiniGUI 的创始人及主要开发人员。著有《Linux 实用教程》与《学用 Linux
与 Windows NT》,并主持翻译了《Red Hat Linux 奥秘》、《Linux 编程宝典》 等大量优秀的 Linux
技术著作。是清华大学 AKA Linux
编程技术系列讲座的主讲人。</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><!-- END PAPER BODY -->
<TABLE>
<TBODY>
<TR>
<TD width=10><IMG height=1 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(八).files/c.gif" width=10
border=0></TD></TR></TBODY></TABLE><BR clear=all><IMG height=10 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(八).files/c.gif" width=100 border=0><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD align=right width="100%"><A
href="http://www-900.ibm.com/developerWorks/cn/linux/embed/minigui/guide/part8/index.shtml#top">到页首</A></TD>
<TD width=5><IMG height=1 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(八).files/c.gif" width=5
border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#000000 colSpan=2><IMG height=1 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(八).files/c.gif" width=100
border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff colSpan=2><IMG height=8 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(八).files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=10 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD>
<FORM action=/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument
method=post><INPUT type=hidden value="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南:主题八"
name=ArticleTitle> <INPUT type=hidden value=linux name=Zone> <INPUT
type=hidden value=/developerWorks/cn/thankyou/feedback-linux.html
name=RedirectURL> <A id=rating name=rating><B>您对这篇文章的看法如何?</B></A>
<TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD colSpan=5><IMG height=8 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(八).files/c.gif" width=100
border=0></TD></TR>
<TR vAlign=top>
<TD width="16%"><INPUT type=radio value=5 name=Rating>真棒!(5)</TD>
<TD width="20%"><INPUT type=radio value=4 name=Rating>好材料 (4)</TD>
<TD width="24%"><INPUT type=radio value=3 name=Rating>一般;尚可 (3)</TD>
<TD width="22%"><INPUT type=radio value=2 name=Rating>需提高 (2)</TD>
<TD width="18%"><INPUT type=radio value=1 name=Rating>太差!
(1)</TD></TR></TBODY></TABLE><BR><B>建议?</B><BR><TEXTAREA name=Comments rows=5 wrap=virtual cols=60></TEXTAREA><BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff><IMG height=8 alt=""
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(八).files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=right>(c) Copyright IBM Corp. 2001, (c) Copyright IBM China
2001, All Right Reserved</TD></TR>
<TR vAlign=top>
<TD class=bbg height=21> <A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/index.shtml&origin=dwhead">关于
IBM</A><SPAN class=divider> | </SPAN><A
class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/privacy/index.shtml&origin=dwhead">隐私条约</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/legal/index.shtml&origin=dwhead">使用条款</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/contact/index.shtml&origin=dwhead">联系
IBM</A></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2
src="基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(八).files/stats.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt=""
src="D:\新建文件夹\基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(八).files\c(1).gif" width=1
border=0></NOSCRIPT> </A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -