Chinaunix首页 | 论坛 | 博客
  • 博客访问: 118945
  • 博文数量: 121
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 1210
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-03 23:43
文章分类

全部博文(121)

文章存档

2011年(1)

2010年(6)

2009年(114)

我的朋友

分类: LINUX

2009-10-04 00:47:36

6.2.2  MiniGUI的移植
由于MiniGUI较好地将硬件设备抽象为GAL层和IAL层,移植时只需要针对自身的硬件特点按照GAL层调用接口和IAL层调用接口来做内部实现即可。
实现了FrameBuffer的Linux驱动后,配置MiniGUI选择Native的GAL引擎,便可以使用FrameBuffer作为MiniGUI的图形发生引擎。
MiniGUI的IAL层将输入设备的输入事件最终映射为GUI系统API层的消息事件。IAL层默认处理两种设备的输入操作:键盘设备和鼠标设备。键盘设备向上层提供不同的按键输入信息,鼠标设备提供单击、抬起和落笔坐标等的信息。在实现MiniGUI与输入设备驱动的接口时,采用Select的方式获得输入设备的动作,并转换为消息队列中的消息。消息参数按照Win32接口定义为点击键编号或鼠标当前的坐标(其中触摸屏事件与鼠标事件类似)。通过编写针对硬件开发系统的IAL支持代码,实现了IAL层的移植。
1.MiniGUI在上位机Linux上的移植
MiniGUI中多字体和字符集支持是通过设备上下文(DC)的逻辑字体(LOGFONT)实现的。在创建逻辑字体时指定相应的字符集,其内部实现为对于所需显示字符的所属字符集的识别处理,最终调用相应字符集的处理函数组。应用程序在启动时,可切换系统字符集,如GB2312、BIG5、EUCKR和UJIS等。MiniGUI的这种字符集支持方式不同于采用UNICODE的解决方案。在节省系统资源的意义上讲,这种实现更加适合于嵌入式系统时应用,是MiniGUI的一大创新点。MiniGUI同时支持包括ttf、bdf、type 1、vbf等多种字体格式,可以根据需要配置MiniGUI来支持相应字体的显示。MiniGUI能在CPU主频为30 MHz,仅有4MB RAM的系统上正常运行(使用uClinux操作系统),这是其他针对嵌入式产品的图形系统,如MicroWindows或Qt/Embedded无法达到的。
MiniGUI移植软件包一共有以下4种。
 libminigui-1.6.x.tar.gz:MiniGUI函数库源代码,其中包括libminigui、libmgext和libvcongui。
 minigui-res-1.6.x.tar.gz:MiniGUI所使用的资源,包括基本字体、图标、位图和鼠标光标。
 mde-1.6.x.tar.gz:MiniGUI的综合演示程序。
 mg-smaples-1.6.x.tar.gz:MiniGUI编程指南的配套示例程序。
具体的移植过程如下。
1)安装资源文件

[root@linuxj root]#tar –xzvf minigui-res-1.6.x.tar.gz
[root@linuxj root]#cd minigui-res-1.6.x
[root@linuxj minigui-res-1.6.x]#make
[root@linuxj minigui-res-1.6.x]#make install

默认的安装路径是/usr/local/lib/minigui/res,可以修改minigui-res-1.6.x目录下的config.linux来更改安装路径和编译参数。这些资源服务器Linux和嵌入式处理器可以共用。
2)配置和编译MiniGUI库文件

[root@linuxj root]#tar –xzvf  libminigui-1.6.x.tar.gz
[root@linuxj root]#cd libminigui-1.6.x
[root@linuxj libminigui-1.6.x]#./configure
[root@linuxj libminigui-1.6.x]#make
[root@linuxj libminigui-1.6.x]#make install

当然在编译MiniGUI函数库的时候可以给定库的安装路径,一般建议编译两个版本的MiniGUI库,一个是在大机器的Linux上运行用的库,一个是针对嵌入式操作系统使用的库。编译大机器上库的目的是为以后在写应用程序的时候先在大机器上调试服务的。当然最后程序还是要在目标板上跑,所以还要为目标处理器编译一个库。MiniGUI 就是使用autogen、utoconf的一个典型例子,用configure来生成配置文件和makefile文件;编译好之后在./configure的参数prefix指定的目录下面有个lib目录,该目录下的内容如下。

[root@linuxj lib]# ls -l
总用量 16
drwxr-xr-x    2 root     root         4096  3月  8 17:38 etc
drwxr-xr-x    3 root     root         4096  3月  8 17:30 include
drwxr-xr-x    3 root     root         4096  3月  8 17:31 lib
drwxr-xr-x    3 root     root         4096  3月  8 17:06 minigui

其中etc目录下是MiniGUI运行时的配置文件,include目录下是MiniGUI的头文件,lib目录下则是库文件,minigui目录下是资源文件。修改/etc/ld.so.conf文件,在结尾加上一行prefix指定的路径,把此路径加入到库的加载路径中,否则运行例子程序时会出现如下的错误:error while loading shared libraries: libminigui-1.6.so.2
3)编译例子程序

[root@linuxj root]#tar –xzvf  mde-1.6.x.tar.gz 
[root@linuxj root]#cd mde-1.6.x
[root@linuxj mde-1.6.x]#./configure
[root@linuxj mde-1.6.x]#make
[root@linuxj mde-1.6.x]#make install
[root@linuxj root]#tar –xzvf  mg-smaples-1.6.x.tar.gz
[root@linuxj root]#cd mg-smaples-1.6.x
[root@linuxj mg-smaples-1.6.x]#./configure
[root@linuxj mg-smaples-1.6.x]#make
[root@linuxj mg-smaples-1.6.x]#make install

4)运行例子程序
在mde-1.6.x或mg-samples-1.6.x目录下都有一些程序可以运行,如果在Linux上运行,建议修改MiniGUI.cfg中的gal_engine和ial_engine为qvfb。
因此必须为主机安装qvfb。安装方法如下:

[root@linuxj root]#tar –xzvf  qvfb-1.0.tar.gz
[root@linuxj root]#cd qvfb-1.0
[root@linuxj qvfb-1.0]#./configure
[root@linuxj qvfb-1.0]#make
[root@linuxj qvfb-1.0]#make install


编译成功之后,在qvfb/qvfb目录下有个qvfb的可执行程序。不过在运行./qvfb前,一定先启动X-Window,启动方法startx。qvfb启动可以加参数,具体的用法如下:

./qvfb [–width width] [–height height] [–depth depth] 
[–nocursor] [–qwsdisplay:id]
比如说:
./qvfb –-width 320 –-height 240 –-depth 32

就是指定qvfb的参数是320×240,32位颜色深度。启动之后可以看到一个窗口,如图6-1所示。

图6-1  启动qvfb时出现窗口

当然也可以不加参数启动qvfb,通过图6-1所示窗口里的“File”菜单修改参数。
qvfb启动之后,就可以启动MiniGUI里面的例子程序了。在运行程序之前要注意MiniGUI.cfg里面设置的参数要和qvfb的参数一致。
5)MiniGUI.cfg文件说明
MiniGUI库编译好之后,到编译出来的prefix目录下的/etc/目录。在/efc/目录下可以看到一个MiniGUI.cfg文件,这个文件是MiniGUI运行时配置选项。
从MiniGUI.cfg文件中可以看出,此文件的格式比较简捷,其基本格式如下。
[段名]
参数名=参数值
所以修改起来也比较方便,这里介绍几个重要的段,而且在移植的时候是很可能需要修改的段。
① system段
该段指定了MiniGUI运行时使用的输入、输出引擎,以及鼠标设备和协议类型。指定的输入、输出引擎必须是编译配置MiniGUI库时多个引擎中的一个。该段定义如下。
 gal_engine:指定使用的图形引擎;
 defaultmode:指定图形引擎的显示模式,格式为:宽×高-显示位数(bpp);
 ial_engine:指定使用的输入引擎;
 mdev:指定鼠标设备文件;
 mtype:指定鼠标协议类型。
上面的例子里面GAL使用的是FrameBuffer,而且尺寸是320×240,16位深度的颜色,如果你的LCD定义不是这样,需要根据系统的实际设计来更改。IAL层默认的engine是console,默认的设备是鼠标。如果使用ARM嵌入式系统,而且没有用到鼠标的话,这个地方不需要mdev。还有一个要注意的是,一般来说在嵌入式系统中,如果使用键盘的话,mdev=/dev/keypad,如果使用触摸屏的话,mdev=/dev/ts。
自1.6.8版本起,MiniGUI提供通过环境变量修改图形及输入引擎的方式。比如,你的MiniGUI已经包含了fbcon和qvfb两种图形引擎,以及对应的console和qvfb输入引擎,并在MiniGUI.cfg或内建资源中指定了使用qvfb图形及输入引擎。但在运行时,你可以通过如下方式指定fbcon和console引擎,而不需要修改MiniGUI.cfg文件或者内建资源配置文件。

$ export gal_engine=fbcon 
$ export ial_engine=console
$ export mdev=NULL
$ export mtype=NULL
$ export defaultmode=320×240-16bpp

② fbcon段
该段是在system段gal_engine的键值指定为fbcon时使用,表示运行fbcon时使用的显示模式。若该段未定义或键值为空,则使用system段定义的键值。该段只包含一个defaultmode键,具体含义和system段相同。该段在嵌入式ARM-Linux中的使用较为普遍,尤其是带LCD显示的系统。
③ qvfb段
该段是在system段gal_engine的键值指定为qvfb时使用,表示运行qvfb时使用了X-Window的哪个display及显示模式。
④ 定义资源的段
主要有rawbitmapfonts、varbitmapfonts、qpf、truetypefonts和type1fonts段,这里需要注意的是,资源文件的路径一定要和MiniGUI/res的路径一致。
⑤ Cursorinfo段
该段指定了MiniGUI要装载的鼠标光标的相关信息。如果在编译配置MiniGUI时使用了—disable-cursor选项,则MiniGUI会忽略Cursorinfo段。该段的参数及所代表含义主要有以下几点:Cursorpath是指定光标所在路径;Cursornumber是指定装载的光标个数,可通过减少个数并删除对应光标减少MiniGUI的存储空间占用量;cursor是指定编号为的光标。如果系统中不使用鼠标的话,建议在编译MiniGUI时加上参数—disable-cursor。
⑥ Imeinfo段
该段指定了GB2312输入法要装载的输入法个数及对应的模块。该段定义的主要参数及所代表含义有:imetabpath表示输入法模块所在路径;imenumber表示装载输入模块个数,ime表示编号为NR的输入法模块pinyin、wubi、shuangpin、ziranma等,它们分别表示全拼、五笔、双拼、自然码等输入法模块。如果在配置MiniGUI时打开了GB2312输入法(enable-imegb2312),则会根据imenumber的值装载指定的输入法模块。如果imenumber的值为0,则输入法模块仅提供内码输入法。

阅读(841) | 评论(0) | 转发(0) |
0

上一篇:Mount 挂载 指令

下一篇:minigui GAL层学习

给主人留下些什么吧!~~