新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > ARM平台的Microwindows图形编程

ARM平台的Microwindows图形编程

作者:时间:2012-06-26来源:网络收藏

引言
由于受系统内存大小的限制,在运行Linux的平台上直接运行桌面的X Windows系统不太现实。是一个开放源码的嵌入式GUI软件,目的是把图形视窗环境引入到运行Linux的小型设备和平台上。作为X Windows系统的替代品,可以用更少的RAM和文件存储空间(100K~600KB)提供相似的功能,允许设计者轻松加入各种显示设备、鼠标、触摸屏和键盘等。同时,的可移植性非常好,现已成功移植到MIPS、等多种平台上。

Microwindows在平台的移植
尽管Linux 的arch目录下有对ARM处理器支持的代码,但由于Linux是在X86平台上实现的,很多方面都没有考虑到ARM平台的特殊性。将Microwindows移植到运行ARM-Linux操作系统的ARM硬件平台上,需要如下几个步骤。
1)替换fork( )系统调用。由于ARM-Linux不同于标准Linux,所以以标准Linux内核为支持目标开发的Microwindows源代码也必须作出相应的修改才能适应ARM-Linux系统。最主要的问题是ARM-Linux不提供fork()系统调用,而以vfork()调用取代。所以在ARM-Linux代码中fork()的使用需要进行修改。可利用宏定义简便地将所有的fork()调用用vfork()来替代。修改Microwindows的编译设置文件,并采用ARM交叉编译器arm-elf-gcc。
2) 确定传递给显示屏驱动程序的参数。具体地说,就是需要在打开FrameBuffer设备 /dev/fb0时将显示屏的基本参数传递给设备驱动程序。在scr_fb.c中的fb_open(PSD psd)函数中修改如下:
psd->xres=psd->xvirtres=320;
psd->yres=psd->yvirtres=240;
psd->linelen=40;
psd->size=320×320;
3) 编译Microwindows。在Red Hat 9.0下建立ARM交叉编译环境,修改Makefile文件,将$(CC)编译参数指定为交叉编译环境安装目录下的arm-elf-gcc,重新编译代码,就可以生成能够在ARM平台下运行的程序。ARM系列处理器的指令系统相互兼容,经arm-elf-gcc编译过的代码可在基于ARM核的各种处理器上运行。

Microwindows中文化
为了使Microwindows实现对简体汉字的支持,需要对引擎层的devfont.c做相应修改。在devfont.c文件中定义了Microwindows关于字体操作的核心数据结构和操作函数。由于Microwindows采用面向对象的设计方法,因而只要重新定义一系列对简体中文的数据结构和操作函数,并向系统注册,就可以完成系统的中文化。需要重新定义的数据结构和函数是:
static MWFONTPROCS hzk_procs={
MWTF_ASCII, /*routines expect ASCII */
Hzk_getfontinfo,
Hzk_gettextsize,
NULL,
Hzk_destroyfont,
Hzk_drawtext,
Null,
Null,
};

Microwindows图形编程机制
Microwindows从原理上采用分层设计的方法,每层次完成特定的功能,并且能够在不影响其它层次的基础上针对不同的应用进行改编或者重写。在最底层,显示屏、鼠标、触摸屏等的驱动程序提供了与交互相关的硬件设备的访问;中间层是一个精简的图形引擎,提供了划线、区域填充、多边形等多种基本的图形功能;最上层为图形应用程序提供了丰富的编程接口函数(API),通过这些接口函数可以定制桌面和窗口的外观。目前Microwindows提供两套API接口,以便能够更好地适应不同平台应用程序的移植,即 与Win32/Win CE基本兼容的API以及采用X体系的Nano-X API。
设备驱动层
设备驱动程序的接口定义在device.h文件中。中间层提供的与设备无关的图形引擎例程就是通过调用设备驱动程序跟硬件设备交互。这就保证了当平台硬件设备发生变化的时候,只需要改写相应的驱动程序,而无需修改上层代码。Microwindows提供基于Linux2.4.X内核的FrameBuffer设备驱动程序。FrameBuffer在Linux系统中通过/dev/fb0设备文件进行工作,通过mmap()系统调用将显示缓存映射至系统内存中。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭