MiniGUI 2.0.4/1.6.10常见问题及解答之一般性技术问题
1 MiniGUI 可以运行在哪些操作系统之上?
1.1 较短回答
MiniGUI 可以在 Linux、uClinux、VxWorks、ThreadX、eCos、Nucleus、uC/OS-II、pSOS、OSE 等操作系统以及 Win32 平台之上运行。 同时,在不同操作系统上的
MiniGUI,提供完全兼容的 API 接口。
1.2 较长回答
理论上,MiniGUI 可以运行在任意一个支持多任务的嵌入式操作系统上;目前已经过验证的操作系统包括Linux/uClinux、!VxWorks、eCos、uC/OS- II、pSOS、!ThreadX、Nucleus 和 OSE。MiniGUI 也可以在 Win32 平台上运行。同时,在不同操作系统上的
MiniGUI,提供完全兼容的 API 接口。在 Win32 平台上运行
MiniGUI,可帮助开发人员在 Windows 环境下设计
MiniGUI 的应用程序界面,从而提高开发效率。
1.3 完整回答
为什么
MiniGUI 能够在如此众多的嵌入式操作系统上运行?这是因为
MiniGUI 具有良好的软件架构,通过抽象层将
MiniGUI 上层和底层操作系统隔离开来。如下图所示,基于
MiniGUI 的应用程序一般通过 ANSI C 库、操作系统和驱动程序接口以及
MiniGUI 自身提供的 API 来实现自己的功能;MiniGUI 中的“可移植层”可将特定操作系统及底层硬件的细节隐藏起来,而上层应用程序则无需关心底层的硬件平台输出和输入设备。
另外,MiniGUI 特有的运行模式概念,也为跨操作系统的支持提供了便利。
如前所述,和 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、!VxWorks 6 等 。该运行模式在 MiniGUI V2.0.3 中提供。
- MiniGUI-Standalone。这种运行模式下,MiniGUI 可以以独立任务的方式运行,既不需要多线程也不需要多进程的支持,这种运行模式适合功能单一的应用场合。比如在一些使用 uClinux 的嵌入式产品中,因为各种原因而缺少线程支持,这时,就可以使用 MiniGUI-Standalone 来开发应用软件。
一般而言,MiniGUI-Standalone 模式的适应面最广,可以支持几乎所有的操作系统 ;MiniGUI-Threads 模式的适用面次之,可运行在支持多任务的实时嵌入式操作系统,或者具备完整 UNIX 特性的普通操作系统;MiniGUI-Processes 模式的适用面较小,它仅适合于具备完整 UNIX 特性的嵌入式操作系统,比如 Linux 和 VxWorks 6。
但不论采用哪种运行模式,MiniGUI 为上层应用软件提供了最大程度上的一致性;只有少数几个涉及初始化的接口在不同运行模式上有所不同。
下表给出了
MiniGUI V2.0.x 和 V1.6.x 在各操作系统上可支持的运行模式。
2.1 较短回答
理论上讲,MiniGUI 的运行和具体的硬件平台无关;只要某个硬件平台上运行有
MiniGUI 所支持的某个操作系统,MiniGUI 就能在这个平台上运行。
2.2 较长回答
MiniGUI 已验证可支持的 CPU 体系架构包括 x86、ARM、PowerPC、MIPS 等。已验证可运行
MiniGUI 的具体 CPU 包括 Intel x86、ARM(ARM7/ARM9/StrongARM/xScale/MX1)、PowerPC、MIPS、M68K (DragonBall/ColdFire)、富士通 FRV 等。
2.3 完整回答
理论上讲,MiniGUI 的运行和具体的硬件平台无关;只要某个硬件平台上运行有
MiniGUI 所支持的某个操作系统,MiniGUI 就能在这个平台上运行。MiniGUI 已验证可支持的 CPU 体系架构包括 x86、ARM、PowerPC、MIPS 等。已验证可运行
MiniGUI 的具体 CPU 包括 Intel x86、ARM(ARM7/ARM9/StrongARM/xScale/MX1)、PowerPC、MIPS、M68K (DragonBall/ColdFire)、富士通 FRV 等。已支持的典型嵌入式开发板包括:PC104、Intel DMG、Sigma Designs
RealMagic? EM85xx/EM86XX、S3C2410、S3C2440 开发板等等。
3.1 较短回答
MiniGUI 本身占用不到 2MB 的内存空间。
3.2 较长回答
MiniGUI 占用的内存和您在配置
MiniGUI 时使用的选项有关,也和
MiniGUI 配置文件中指定的运行时资源的装载量有关。如果使用最小的资源装载量,在使用 uClinux 或者其他实时嵌入式操作系统时,MiniGUI 可以在只有 4MB 内存的系统上运行。如果使用 Linux 内核 2.2 或者 2.4,这个内存需求要增加 2MB。
3.3 完整回答
4.1 较短回答
MiniGUI 的代码部分占用 700KB 到 1.2MB 的空间,具体取决于编译时的配置选项,其他的部分所占用空间主要有字体等等。一个典型的中文GB2312 12 点阵字体的大小大概不到 300KB。
4.2 较长回答
MiniGUI 的函数库和资源所占用的存储空间与您在配置
MiniGUI 时使用的选项有关,也和
MiniGUI 配置文件中指定的运行时资源的装载量有关,而影响资源大小的关键是字体资源。在使用较小字体资源的情况下,MiniGUI 的函数库和资源占用的存储空间小于 2MB。每使用一款多字节字符集的字体(比如中文简体、日文或者韩文字体),平均要增加 200KB 到 600KB 的空间。
4.3 完整回答
5 为什么MiniGUI已经做过某个操作系统的移植了,还要移植费用?
5.1 较短回答
虽然
MiniGUI 已经可以在某个操作系统上运行了,但因为具体的开发板配置可能有所不同,要将
MiniGUI 运行在这些板子上,还需要做一些具体的开发工作,比如开发针对开发板的输入引擎等。飞漫软件收取的移植费用就指这部分开发费用。但用户也可以自行完成相关的开发工作。
5.2 较长回答
嵌入式硬件系统不像PC那样具有工业界认可的统一标准,因此,其外设配置千差万别。比如手机,虽然运行的操作系统都是一样的,但有的手机配备有触摸屏,而有的手机没有。要将
MiniGUI运行在这些不同的手机上,就需要专门为不同的硬件配置编写对应的类似驱动程序一样的东西,以便
MiniGUI 可以适应不同的硬件配置。这种移植过程类似针对具体开发板的定制工作,用户在购买了针对某个操作系统的
MiniGUI 增值版产品后,也可以参照配套的《移植指南》文档自行完成这种定制工作。如果需要飞漫软件帮您完成,则需要收取相应的移植费用。
5.3 完整回答
理论上讲,MiniGUI 可以支持几乎所有的实时嵌入式操作系统。目前,MiniGUI 支持大概 10 种嵌入式操作系统,其中包括 Linux、uClinux、VxWorks、ThreadX、eCos、uC/OS-II、OSE、Nucleus、pSOS 等等。如果要将
MiniGUI 运行在某个新的操作系统之上,我们还需要针对该操作系统完成一些基本的移植工作。这部分移植工作的难度比较大,所以费用相对较高。如果您的开发板已经运行有
MiniGUI 支持的某个操作系统,则这部分移植工作就不用再做了。但是,嵌入式硬件系统不像PC那样具有工业界认可的统一标准,因此,其外设配置千差万别。比如手机,虽然运行的操作系统都是一样的,但有的手机配备有触摸屏,而有的手机没有。要将
MiniGUI运行在这些不同的手机上,就需要专门为不同的硬件配置编写对应的类似驱动程序一样的东西,以便
MiniGUI 可以适应不同的硬件配置。这种移植过程类似针对具体开发板的定制工作。也就是说,要将
MiniGUI 运行在某个板子上,涉及到两类移植工作,一类是到对应操作系统上的移植,一类是到对应开发板上的移植。针对操作系统的移植工作,因为技术难度大,用户很难自行完成,因此,这类工作一般由飞漫软件完成;而针对开发板的移植,在购买了针对某个操作系统的
MiniGUI 增值版产品后,用户可参照配套的《移植指南》文档自行完成。如果需要飞漫软件帮您完成,则需要收取相应的移植费用。
6 我能得到基于 MiniGUI 开发的实用应用程序的参考模型吗?
6.1 较短回答
可以的。
6.2 较长回答
目前MiniGUI给出的例子相对简单,只能验证简单的功能,而不是一个产品的原型。我们可以将一些项目案例给贵方参考。我们将使用漂亮的风格做一个综合性强一点,漂亮一点的mgDemo出来。
7 MiniGUI可以不需要数学库的支持吗?
7.1 较短回答
是可以的。
7.2 较长回答
在configure 的时候 --disable-adv2dapi 就可以了,这样就不需要数学库的支持了,也就没有了高级2D图形API。
8.1 较短回答
是可以的。
8.2 较长回答
MiniGUI对矢量字体的支持,在默认配置中是关闭的。在configure的时候要,--enable-ttfsupport,这样如果有矢量字体库的情况下就是在线程版中使用了。如果没有矢量字库,需要到
http://sourceforge.net/project/showfiles.php?group_id=3157 下载,MiniGUI使用的是,Ture Tpye font 1,,
在进程版中的使用,需要使用:
#ifdef _MGRM_PROCESSES
JoinLayer(NAME_DEF_LAYER , "helloworld" , 0 , 0);
if (!InitVectorialFonts ()) {
printf ("InitVectorialFonts: error.\n");
exit (2);
}
#endif
和
#ifdef _MGRM_PROCESSES
TermVectorialFonts ();
#endif
详细例子在mde/fontdemo/fontdemo.c中。
9 MiniGUI在Windows环境中WVFB的大小是否可以改变
9.1 较短回答
可以修改。
9.2 较长回答
要修改src/sysres/mgetc-win32.c这个为修改MiniGUI定义屏幕的大小,再修改WVFB的配置文件修改成你所需要的大小。
--
FeynmanHejian - 20 Feb 2009