📄 面向实时嵌入式系统的图形用户界面支持系统――minigui 编译、安装和配置 .htm
字号:
<html><head><!-- ***** comments #1: Meta Information - can be editted *****--><title>面向实时嵌入式系统的图形用户界面支持系统――MiniGUI编译、安装和配置</title><meta content="text/html; charset=GB2312" http-equiv="Content-Type" /><meta name="ROBOTS" content="index,follow"/><meta content="linux, linux tutorials, linux training, linux standards, linux code, linux resources, linux programming, open source standards, linux how to, IBM, linux 教程, linux 培训,Linux 文章, Linux 论文, linux 标准, Linux 白皮书 linux 代码, linux 参考资料, linux 编程, 开放源码标准" name="KEYWORDS" /><meta content="实时,嵌入,图形用户界面,MiniGUI,编译,安装,配置" name="KEYWORDS" /><meta content="对开放源码的自由软件来说,程序员得到的通常是源代码。在编译源代码并正确安装和配置的过程中,往往会涉及到许多工具和函数库,因此其过程经常显得有些繁复,从而也导致许多程序员望而生畏。本文重点介绍了 MiniGUI 的编译、安装和配置过程,解释了该过程中要使用的工具,并说明了 MiniGUI 的配置选项。本文可帮助程序员快速正确地安装和配置 MiniGUI。" name="ABSTRACT" /><meta content="papers_html" name="dWCategory" /><meta content="Linux" name="zone" /><meta content="对开放源码的自由软件来说,程序员得到的通常是源代码。在编译源代码并正确安装和配置的过程中,往往会涉及到许多工具和函数库,因此其过程经常显得有些繁复,从而也导致许多程序员望而生畏。本文重点介绍了 MiniGUI 的编译、安装和配置过程,解释了该过程中要使用的工具,并说明了 MiniGUI 的配置选项。本文可帮助程序员快速正确地安装和配置 MiniGUI。" name="DESCRIPTION" /><meta content="public" name="SECURITY" /><meta content="2000xxxx" name="LAST UPDATED" /><!-- ***** end Meta Information *****--><!-- ***** DO NOT EDIT FOLLOWING CODE *****--><script language="JavaScript"><!-- function nav_pulldown(list) {top.document.location.href = list.options[list.selectedIndex].value;} function wB(){var br="BR";if((navigator.userAgent.indexOf('Mozilla')!= -1)&&((navigator.userAgent.indexOf('Spoofer')==-1)&&(navigator.userAgent.indexOf('compatible')==-1))){br="NS"}return br} function wV(br){var bv=0;bv=navigator.appVersion.substring(0,1);if(br=="IE"){(parseInt(bv));}if(br=="NS"){(parseInt(bv));}return bv;} function wP(){var os="OS";if(navigator.userAgent.indexOf("OS/2")!=-1){os='os/2'}return os;}b=wB();v=wV(b);o=wP(); function change_bgColor() {if (b=="NS" && v==2 && o != "os/2"){document.bgColor="#999999"}} function gotosite() {var L = document.formSpinbox.pickWW.selectedIndex; location.href = document.formSpinbox.pickWW.options[L].value; return false;}//--> </script></head><body><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr colspan="3"><td width="8"><!-- gutter--><img height="1" src="/developerWorks/cn/i/c.gif" width="8" alt=""/></td><td><font face="helvetica, helv, arial" size="-1"> </font></td></tr><!-- ***** comments #3: bread crumb trail *****--><!-- ***** comments #4: enter the pdf link and size *****--><tr><td valign="top" width="8"><!-- gutter--><img height="1" src="/developerWorks/cn/i/c.gif" width="8" alt=""/></td><td valign="top"><!-- ***** comments #5: enter the Title, subtitle, author name, job title, and month/year article was initially published *****--><br /><p><strong class="title">面向实时嵌入式系统的图形用户界面支持系统――MiniGUI</strong><br /><strong class="subtitle">编译、安装和配置</strong></p><p>魏永明<br /> 蓝点软件(北京)研发中心技术主管<br /> 2000/10/27</p><!-- END title and author lines--><!-- Editor #5: Begin Table of Contents--><p><table align="right" border="0" cellpadding="0" cellspacing="0" width="137"><tr><td align="center" bgcolor="#cc6633"><font color="#ffffff" face="helvetica,helv,arial" size="-1"><b>内容:</b> </font></td></tr><tr><td bgcolor="#000000" width="100%"><font face="helvetica,helv,arial" size="-3"><img alt="" border="0" height="1" src="/developerWorks/cn/i/c.gif" width="1" /> </font></td></tr><tr><td bgcolor="#ffffff" width="100%"><font face="helvetica,helv,arial" size="-3"><img alt="" border="0" height="4" src="/developerWorks/cn/i/c.gif" width="1" /> </font></td></tr><tr><td><font face="helvetica,helv,arial" size="-2"><a herf="#1">Linux </a> </font><a href="#1"><font size="-2"> 下的软件维护和建立工具 </font></a></td></tr><tr><td><font face="helvetica,helv,arial" size="-2"><a herf="#2">MiniGUI </a> </font><a href="#2"><font size="-2"> 的依赖库 </font></a></td></tr><tr><td><font face="helvetica,helv,arial" size="-2"><a herf="#3"></a> </font><a href="#3"><font size="-2">安装 </font><font face="helvetica,helv,arial" size="-2"> MiniGUI </font><font size="-2"> 的依赖库 </font></a></td></tr><tr><td><font face="helvetica,helv,arial" size="-2"><a herf="#4"></a> </font><font size="-2">编译并安装 </font><font face="helvetica,helv,arial" size="-2"> MiniGUI </font></td></tr><tr><td><font face="helvetica,helv,arial" size="-2"><a herf="#resources">MiniGUI </a> </font><a href="#resources"><font size="-2"> 的配置 </font></a></td></tr><tr><td><font face="helvetica,helv,arial" size="-2"><a herf="#author"></a> </font><a href="#author"><font size="-2">作者 </font></a></td></tr><tr><td bgcolor="#000000"><font size="-3"><img height="3" src="/developerWorks/cn/i/c.gif" width="137" alt=""/> </font></td></tr></table><!-- End Table of Contents--><!-- comments #6: html content of the paper--></p><p><em>对开放源码的自由软件来说,程序员得到的通常是源代码。在编译源代码并正确安装和配置的过程中,往往会涉及到许多工具和函数库,因此其过程经常显得有些繁复,从而也导致许多程序员望而生畏。本文重点介绍了 MiniGUI 的编译、安装和配置过程,解释了该过程中要使用的工具,并说明了 MiniGUI 的配置选项。本文可帮助程序员快速正确地安装和配置 MiniGUI。</em></p><a name="1"><p><strong class="subhead">1 Linux 下的软件维护和建立工具</strong><br />对开放源码的自由软件来说,程序员得到的通常是源代码。在编译源代码并正确安装和配置的过程中,往往会涉及到许多工具和函数库,因此其过程经常显得有些繁复。MiniGUI也不例外。为了说明 MiniGUI 的正确编译和安装过程,我们有必要首先了解 Linux 系统下用于软件维护和建立的工具。</p><br />1.1 make 和 makefile <br /><br />make 是 Linux 下最常用的二进制程序、函数库的建立生成工具。make 运行时要根据当前目录下的 makefile 文件(一般是 Makefile),确定要生成什么样的二进制文件,以及对应的命令。我们还可以在 makefile 文件中建立要生成的目标与源代码之间的依赖关系,从而可以让 make 工具根据时间自动判断是否需要通过中间过程而生成最终目标。尽管通过 makefile 文件可以组织一个大的项目,但往往手工编写一个 makefile 文件并不是一件轻松的事情,并且在需要维护一个源代码的目录树时,makefile 文件的维护工作就会大大增加。为此,GNU 又开发了 Autoconfi/Automake 工具,可以用来自动生成 makefile 文件,并且能够检查系统的配置信息,从而帮助提供源代码的可移植性。 <br />1.2 Autoconf/Automake <br />GNU 的 Autoconf 及 Automake 这两个软件实际是由若干 Shell 脚本组成的,它可以帮助程序员轻松产生 makefile 文件。现在的各种自由软件,如Apache、MySQL 等都是利用Autoconf,Automake 实现自动配置和编译的。MiniGUI 也采用了 Autoconf/Automake 接口。用户只要使用"./configure"、"make"、"make install" 就可以把程序编译并安裝到系统中。 <br />为了更好地了解 Autoconf 和 Automake,我们需要对 makefile 作一简单回顾。Makefile 基本上就是"目标"(target)、"依赖性"(dependencies)和"动作"三者所组成的一系列规则。而 make 就是根据 makefile 文件的规则决定如何编译(compile)和连接 (link)程序或者其它动作。当然,make 可做的不只是编译和连接程序,例如 FreeBSD 的 port collection 中,Makefile还可以做到自动下载远程程序,解压缩(extract),打补丁 (patch),然后编译并安装到系统中。 <br />Makefile 基本结构虽然很简单,但是妥善运用这些规则就可以变换出许多不同的花样。却也因为这样,许多人刚开始学写makefile 时会觉得没有规范可以遵循,每个人写出来的makefile都不大一样,不知道从哪里下手,而且常常会受到开发环境的限制,只要环境参数不同或者路径更改,可能 makefile 就得跟着修改。虽然有GNU Makefile Conventions (GNU Makefile惯例)制订出一些在进行 GNU 程序设计时编写 makefile 的一些标准和规范,但是其内容很长而且很复杂,并且经常作一些调整,为了减轻程序开发人员维护makefile 的负担,就出现了Automake。 <br />利用Automake,编程者只需要写一些预先定义好的宏(macro),提交给Automake处理,就会产生一个可以供 Autoconf 使用的 Makefile.in文件。再配合使用 Autoconf产生的自动配置文件 configure 即可产生一份符合 GNU Makefile 惯例的 Makeifle 了。 <br /> 在开始使用 Automake 之前,首先确认你的系统安装有如下软件: <ul><li> GNU Automake </li><li> GNU Autoconf </li><li> GNU m4 </li><li> perl </li><li> GNU Libtool (如果你需要产生共享库) </li></ul><br />最好也使用 GNU C/C++ 编译器、GNU Make 以及其它 GNU 的工具程序来作为开发的环境,这些工具都是属于 GPL 的自由软件,不但免费而且功能强大。如果你是使用 Red Hat Linux,可以找到所有上述软件的 rpm 文件。 <br /> 利用 configure 所产生的 Makefile文件有几个预先设定的目标可供使用,这里只对其中几个简述如下。 <ul><li> make all 产生设定的目标。只敲入make 也可以,此时会开始编译源代码,然后连接并产生执行文件。 </li><li> make clean 清除之前所编译的可执行文件及目标文件(*.o)。 </li><li>make distclean 除了清除可执行文件和目标文件以外,也把 configure 所产生的 Makefile 清除掉。 通常在发布软件前执行该命令。 </li><li> make install 将程序安装到系统中,若源码编译成功,且执行结果正确,便可以把程序安装到系统预先设定的执行文件存放路径中,若用 bin_PROGRAMS 宏的话,程序会被安装到 /usr/local/bin下。 </li><li> make dist 将程序和相关的文档包装为一个压缩文档以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz 为名称的文件。PACKAGE 和 VERSION 这两个参数是根据 configure.in 文中 AM_INIT_AUTOMAKE(PACKAGE, VERSION) 的定义。 </li><li> make distcheck 和 make dist 类似,但是加入检查包装以后的压缩文件是否正常,这个目标除了把程序和相关文档包装成 tar.gz 文件外,还会自动把这个压缩文件解开,执行 configure,并执行 make all ,确认编译无错误以后,方显示这个 tar.gz 文件已经准备好并可以发布了。 </li></ul><br /> 要注意的是,利用 Autoconf 及 Automake 所产生出來的软件套件是可以在没有安装 Autoconf 及 Automake 的环境使用的,因为 configure 是一个 shell script,它己被设计为可以在一般 Unix 的 sh 这个 shell 下执行。但是如果要修改 configure.in 及 Makefile.am 文件再产生新的 configure 及 Makefile.in 文件时就一定要有 Autoconf 及 Automake 了。 <br /> 1.3 ldd 和 ldconfig <br />ldd 是用来检查可执行文件所需要的共享库。例如: <table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>$ ldd /bin/ls libtermcap.so.2 => /lib/libtermcap.so.2 (0x4001c000) libc.so.6 => /lib/libc.so.6 (0x40020000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)</pre></td></tr></table><br />我们在 /bin/ls 程序上运行 ldd 命令,就可以检查该程序所使用的共享库。注意在 ldd 命令打印的结果中,“=>”左边的表示该程序需要连接的共享库之 so 名称,右边表示由 Linux 的共享库系统找到的对应的共享库在文件系统中的具体位置。默认情况下,/etc/ld.so.conf 文件中包含有默认的共享库搜索路径,例如: <table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>/usr/X11R6/lib/usr/lib/usr/i486-linux-libc5/lib/usr/lib/qt-2.0.1/lib/usr/lib/qt-1.44/lib/usr/lib/qt-2.1.0/lib/usr/kerberos/lib/usr/lib/qt-1.45/lib</pre></td></tr></table><br />如果 ldd 没有找到对应的共享库文件的具体位置,可能是两种情况引起的: <ol><li>共享库没有安装在该系统中; </li><li>共享库保存在 /etc/ld.so.conf 文件列出的搜索路径之外的位置。 </li></ol><br />通常情况下,许多开放源代码的程序或函数库都会默认将自己安装到 /usr/local 目录下的相应位置(/usr/local/bin 或 /usr/local/lib),以便与系统自身的程序或函数库相区别。而许多 Linux 系统的 /etc/ld.so.conf 文件中默认又不包含 /usr/local/lib。因此,往往会出现已经安装了共享库,但是却无法找到共享库的情况。这时,就应该检查 /etc/ld.so.conf 文件,如果其中缺少 /usr/local/lib 目录,就应该添加进去。 <br />在修改了 /etc/ld.so.conf 文件或者在系统中安装了新的函数库之后,还要运行一个命令,即 ldconfig。该命令用来刷新系统的共享库缓存,即 /etc/ld.so.cache 文件。为了减少共享库系统的库搜索时间,共享库系统维护了一个共享库 so 名称的缓存文件。因此,在安装新的共享库之后,一定要运行 ldconfig 刷新该缓存。 <a name="2"><p><strong class="subhead">2 MiniGUI 的依赖库</strong><br />为了正确安装 MiniGUI,需要了解 MiniGUI 的正常运行需要哪些函数库,也即 MiniGUI 的依赖库。在编译 MiniGUI 之前,首先要确保正确安装了所需的依赖库。 </p><br />2.1 LibGGI 或者 SVGALib <br />这两个函数库可以为 MiniGUI 提供底层图形支持,我们称之为“图形引擎”。其中 SVGALib 是一个比较老的函数库,只提供对 Linux 控制台的支持;LibGGI 是一个比较新的图形函数库,提供了对 Linux 控制台、X Window 等的支持,并且接口相对简单。要正确使用 MiniGUI,需要安装 LibGGI 或者 SVGALib 的修订版。笔者建议安装 LibGGI,因为它提供了对 Linux 控制台和 X 的支持。在 Linux 下,建立在 LibGGI 之上的程序既可以运行在 Linux 控制台上,也可以运行在 X Window 上,从而可以提高程序的可移植性。并且对 MiniGUI 来说,如果能够运行在 X Window 上,就可以大大方便程序的调试。LibGGI 的另外一个好处就是在 Linux 控制台上,它可以运行在 Linux 2.2 内核所提供的 FrameBuffer 驱动程序之上,而不需要对显示芯片进行直接的硬件编程,因而也不需要超级用户权限去运行程序。这点和 SVGALib 不同,SVGALib 不支持 FrameBuffer,同时需要超级用户权限。 <br />如果读者使用的是 Linux 内核 2.0.xx,就必须使用 SVGALib。这个函数库实际是两个库组成的,即 vga 和 vgagl。MiniGUI 使用的是 vgagl,该函数库在 vga 之上运行,提供了较好的图形函数。但是,我们不能使用标准的 SVGALib 函数库,因为该函数库和 Linux 上的 Pthread 函数库相冲突――它们均使用了 SIGUSR1 和 SIGUSR2 这两个由操作系统保留给应用程序的信号,从而会导致不可预料的结果。为此,我们对 SVGALib 进行了修改。读者应该使用经过我们修改的 SVGALib 函数库,该函数库同时提供了用于处理 GB2312 字体显示的函数。还要注意的是,标准 SVGALib 的 vgagl 库不提供对标准 VGA 16 色模式的支持,因此,如果要在 VGA 16 色模式下运行 MiniGUI,需要下载 vgagl4 函数库。 <br />以上提到的函数库可以从如下 URL 处下载: <table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>ftp://ftp.minigui.org/pub/dep-libs/libggi-2.1beta2.0-20000316.tgzftp://ftp.minigui.org/pub/dep-libs/ svgalib-1.4.0-hz.tar.gzftp://ftp.minigui.org/pub/dep-libs/ vgagl4-0.1.0.tar.gz</pre></td></tr></table><br />也可以访问上述两个自由软件项目的站点: <table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>http://www.ggi-project.orghttp://www.svgalib.org</pre></td></tr></table> 2.2 LibTTF 和 LibT1 <br />这两个函数库分别提供对 TrueType 字体和 Adobe Type1 字体的支持。对 MiniGUI 来说,这两个函数库是可选的。如果需要 TrueType 和 Adobe Type1 字体的支持,则需要首先安装这两个函数库,否则就不必安装。MiniGUI 的 configure 脚本可以自动检查系统中是否安装有这两个函数库,如果没有安装,则会取消对 TrueType 和 Adobe Type1 字体的支持。 <br />现在的 Linux 发行版默认会安装 LibTTF(即 FreeType 库)。但是,需要注意的是 MiniGUI 所使用的 LibTTF 是 1.3.xx 版本的。如果已安装的 LibTTF 版本不同,则可能因为兼容性问题而无法正确编译 MiniGUI。因此,需要事先确认 LibTTF 的版本号,可通过 <table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>$ ls -l /usr/lib/libttf*</pre></td></tr></table><br />命令来检查已安装的 LibTTF 库的版本号,其中的共享库文件名中包含了该函数库的版本号。 <br />以上提到的函数库可以从如下 URL 处下载: <table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>ftp://ftp.minigui.org/pub/minigui/freetype-1.3.1.tar.gzftp://ftp.minigui.org/pub/minigui/t1lib-1.0.1.tar.gz</pre></td></tr></table> 2.3 其他函数库 <br />其他 MiniGUI 所依赖的函数库包括 libjpeg,提供 POSIX 兼容线程支持的 LinuxThreads,用来分析命令参数的 popt 库等等。一般的 Linux 发行版中均已包含有这些函数库。 </a> <a name="3"><p><strong class="subhead">3 安装 MiniGUI 的依赖库 </strong><br />除 SVGALib 之外,上面提到的 MiniGUI 的依赖库提供有 automake/autoconf 接口,从而可以非常方便地编译并安装这些依赖库。其中 LibGGI 稍微有些例外,该函数库已经提供了一个批处理脚本,可以帮助你编译并安装 LibGGI 的所有函数库,其中包括用来处理输入(键盘、鼠标等)的 libgii,用来处理图形输出的 libggi 等。对 MiniGUI 来说,只需安装 libgii 和 libggi。在下载 libggi-2.1beta2.0-20000316.tgz 文件之后,运行 </p><table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>$ tar zxf libggi-2.1beta2.0-20000316.tgz</pre></td></tr></table><br />可解开该 tgz 包,并在当前目录中建立 degas 子目录。进入 degas/lib/ 目录,运行 ./buildall 脚本,就可以编译并安装 libgii、libggi 等函数库。注意应该以 root 身份运行 buildall 脚本。如果要单独编译某个函数库,可以进入相应的目录,然后按照正常的编译过程进行编译。比如,要重新编译 libggi,可运行如下命令: <table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>$ cd libggi$ ./autogen.sh$ ./configure$ make$ su -c make install</pre></td></tr></table><br />注意在编译 libggi 之前,首先要编译并安装 libgii 库。 <br />对 SVGALib 来说,只要解开软件包并运行 make 就可以编译并安装函数库。 <br />注意在安装完成每个函数库之后,要运行 ldconfig 命令更新共享库的搜索缓存,并确保将 /usr/local/lib 目录添加到 /etc/ld.so.conf 文件。 </a> <a name="4"><p><strong class="subhead">4 编译并安装 MiniGUI </strong><br />在安装好 MiniGUI 的上述依赖库之后,就可以编译并安装 MiniGUI 了。首先下载 MiniGUI 的三个 tgz 压缩包: </p><table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>ftp://ftp.minigui.org/pub/minigui/0.9.92/libminigui-0.9.92.tar.gzftp://ftp.minigui.org/pub/minigui/0.9.92/miniguiapps-0.9.92.tar.gzftp://ftp.minigui.org/pub/minigui/0.9.92/miniguiexec-0.9.92.tar.gzftp://ftp.minigui.org/pub/minigui/0.9.92/miniguires-0.9.92.tar.gz</pre></td></tr></table><br />其中的libminigui-x.x.xx.tar.gz 是 MiniGUI 函数库本身。其中包含有三个函数库,即 libminigui、libmywins、和 libvcongui。miniguiapps-x.x.xx.tar.gz 是基于 MiniGUI 的应用程序软件包,目前包含两个游戏,即 bomb(扫雷)和 russia(俄罗斯方块),以及一个基于 MiniGUI 的 Linux 控制台仿真程序,即 vcongui,注意这些程序在安装到系统之后才能正常运行。miniguiexec-0.9.92.tar.gz 是基于 MiniGUI 的一些演示程序,不需要安装到系统中。miniguires-0.9.92.tar.gz 是 MiniGUI 程序要使用的一些资源,在运行任何基于 MiniGUI 的程序之前,要首先安装资源,其中包括位图、图标、鼠标等等。 4.1 编译并安装 libminigui <br />用如下命令解开libminigui-x.x.xx.tar.gz 软件包(以下的实例均以 0.9.92 版,即 MiniGUI 最新版为例): <table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>$ tar zxf libminigui-0.9.92.tar.gz</pre></td></tr></table><br />该命令将在当前目录建立 libminigui-0.9.92 目录。进入该目录,然后运行如下命令: <table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>$ cd libminigui-0.9.92$ ./autogen.sh</pre></td></tr></table><br />autogen.sh 是一个简单的脚本程序,该脚本将执行 automake 和 autoconf,并在当前目录生成 configure 脚本。 <br />运行 ./configure --help脚本将给出如下一个可用的命令行参数清单,注意该命令的最后几行清单说明: <table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td><pre>$ ./configure -help
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -