在进入后PC时代以后,嵌入式 设备以一种无法抑制的迅猛速度普及和发展到日常生活及工作当中,众多知名开发商为了抢占市场和争夺利润,竞相推出各种性能优异的软硬件及内核芯片。鉴于以视窗为代表的桌面操作模式取得巨大成功,该模式目前已成为国内外开发者们在嵌入式设备中的首选方案。
近几年,随着Linux技术的兴起,越来越多的企业和科研机构把目光转向嵌入式Linux的开发和研究。Linux不仅具有桌面电脑的全部功能和特性,允许修改和根据用户的要求进行定制,而且作为一种免费的开放式源码,还支持目前在嵌入式设计领域中常用的新型微处理器,如StrongARM、MIPS以及PowerPC等,具有稳定、高效、易定制、易裁减、硬件支持广泛等特点。 Microwindows是一个著名的开放式源码的嵌入式GUI软件,目的是把 图形视窗环境引入到运行Linux的小型设备和平台上。作为X Window系统的替代品,Microwindows可用更少的RAM和文件存储空间(100K~600KB)提供相似的功能,允许设计者轻松加入各种显示设备、鼠标、触摸屏和键盘等;可移植性非常好,可用C语言和少部分汇编语言实现,支持Intel 16位、32位CPU,MIPS R4000以及基于ARM内核的处理器芯片,有多种平台支持Microwindows。
1 X Window的不足
由于使用了带有TCP/IP结构的自由式开放源码 操作系统,使嵌入式设备进入了一个创新应用时代,不过这些新的应用需要考虑其资源环境,这是因为多数的嵌入式设备缺少硬件驱动和大的RAM。目前,在Linux系统中普遍使用X Window系统,如图1所示。X Window是在20世界80年代早期由MIT、DEC等提出来的,是一个基于Client/Server结构的视窗系统;允许在任一台UNIX主机(Clients——客户端)上运行 程序,而在基于X的终端(Server——服务器)上显示出来。在这个过程中,相当一部分代码用于确认主机和服务器上运行的Client/Server程序是否正常。目前,大多数X的客户端和服务器是在同一台机器上运行,X Window服务器经编译后一般用于自动检测硬件。服务器中还包含有众多的画图函数,它们的位置根据执行速度被位置在裁减层之上或之下。这些便利X Window过于臃肿和复杂,运行时需要至少8MB的内存空间。
2 Microwindows分析比较
对于大多数嵌入式设计,尤其是在运行专用图形程序的场合,X Window不是一种恰当的选择。由此而发展起来的Microwindows是专门设计用于在小型设备上开发具有高品质图形功能的开放式源码桌面系统,有许多针对现代图形视窗环境的功能部件。它的结构设计使其可方便地加入不同的显示、鼠标、触屏以及键盘等设备。Microwindows基于2.2.0版本的Linux系统如图2所示。其内核所包含的代码允许用户程序将图形显示的内存空间作为framebuffer进行存取操作,这样在用户程序空间中可作为内存映射区域来直接控制图形显示,可使得用户在编写图形程序的时候不再需要去了解底层硬件,这是目前Microwindows在嵌入式系统中被很多人使用的原因。
设计得在设计Microwindows时沿用了已有的两个图形应用程序接口(API):一是Microsoft Windows中Win32/WinCE的图形设备接口(GDI),它适用于所有Windows CE和Win32的应用程序;另外就Nano-X(Xlib-like界面),它与GDK非常相似,用在Linux上,是像X的API,用于占用资源少的应用程序。这使得熟悉Windows或者是Linux X11的用户可在熟悉的环境下开发图形应用程序。
Microwindows在运行过程中仅需要50~250KB的内存空间,远小于X Windows系统所需空间。这主要是因为Microwindows对于在驱动层的每一个绘图函数采用的是单进程的方式,由驱动层核验是否裁减并调用驱动程序来绘制未被裁减的像素点或线;而在X Window系统中,则是出于对速度的考虑,包含所有像素点的绘制程序并分别有裁减和未裁减的版本。Microwindows完全支持新的Linux内核的帧缓冲区结构,同时支持1、2、4、8、16、24、32位像素点显示,支持调色板、真彩色、灰度等颜色模式,并对渲染提供内置支持。在其API函数的支持下,还可以以RGB的格式描述上述的颜色模式,系统中包含颜色转换的程序,可将像素点转换成相近的可显示颜色或相应单色系统中的灰度级。虽然Microwindows支持Linux系统,但它是基于相对简单的屏幕驱动界面结构,因此,可在许多不同的实时操作系统(RTOS)上运行,甚至于那些无硬件的实时操作系统也可运行Microwindows。这样,可使得客户的图形应用程序在不的工程中共享使用,也可在不同的RTOS上运行不同的目标程序而不需要重新编写图形应用程序,大大提高了编程效率。
Microwindows支持图形目标平台的主机平台竞争,也就是说应用于Linux的Microwindows应用程序不需要跨平台编译,就可在桌面上直接运行和测试,同时仍可在目标平台上运行。这一点需通过使用Micorwindows的X11屏幕驱动器实现,同时驱动器可以根据像素点和颜色值来模拟目标平台的显示。因此,即使桌面系统是24位的颜色模式,它也可以以2色模式显示目标系统中的应用程序。
对于那些熟悉使用Microsoft Windows或Linux X Windows的程序员页言,经编写应用程序时是有一定区别的。Microsoft Windows的编程员一般使用MS-Visual C++的类库(MFC)中的C++应用程序框架或者是更新的ATL框架,在绘制图形时使用Win32图形设备接口(GDI)。Windows中还包括有许多Win32 GDI中的应用界面控件,如按钮、列表等。而X Windows系统提供了一个低级接口——Xlib,仅用于实现最低级简单的绘图功能,并将其封装成程序包在需显示时在显示设备上运行。在用户界面中,大多数的解决利用插件,在Xlib的上层加入插件集来实现更高级的函数。目前,对Microwindows的应用正在逐步地加入GTK+/GDK以及FLTK插件,以实现更多的用户界面控件。
3 Microwindows的体系结构
由于Microwindows在设计上有着明显的分层结构,如图3所示,其设备与平台相关层、设备与平台无关层和应用层之间层次清晰、结构明显,因此勿需改动其整体结构,只需在其相应的部分添加代码即可实现一些更为复杂的功能。
图3 Microwindows体系结构
在Microwindows的最底层(设备与平台相关层),系统针对显示屏、鼠标、触屏以及键盘等各定义了一个数据结构。该数据结构和顶层结构一样,供图形引擎使用,包含了针对指定设置和硬件驱动代码。Microwindows中还包含了诸多设备和操作系统的各种版本的驱动程序。屏幕驱动可支持系统1的、2、4、8、16、24、32位显示和调色板、真彩色、灰度等颜色模式。屏幕驱动中还包括一些入口指针,这些指针分别用读写像素、绘制水平或垂直线,在屏幕和内存之间相互映射内存空间。在实现这些基本指针的过程中需运行包括TrueType或Adobe Type1的字体支持、RGB颜色支持、JPEG以及BMP图形处理等Microwindows上层函数。如果屏幕驱动中还包括有硬件加速的话,仅需更改驱动程序即可;也可在系统中添加触屏、键盘、按键等的输入。
Microwindows的中间层是图形引擎层(也称为设备与平台无关层),因为所有的绘图函数都通过调用屏幕驱动来实现,该层与硬件无关。图形引擎层为应用层提供了一系列相应的入口指针调用绘图函数,还为所有的颜色指定了RGB的颜色模型;同样,该层也与显示设备无关,可以由RGB值为判断硬件中的像素值。除此之外,Microwindows还在中间层实现裁减功能,它采用多矩形算法,可在任意复杂的区域中实现绘图功能。中间层还要控制所有字体的显示,支持FreeType以及使用T1Lib的Adobe Type 1字体、支持比例字体,同时还支持ASCII、Unicode-16、Unicode-32、UTF-8编码规则。
Microwindows的最高层(应用层)实现了窗口交互系统,这使得程序员既可在全屏幕显示,也可在层叠的窗口中显示。一层还包括事件处理,可将触摸屏、按键等激发的事件传送给应用程序。
Nano-X API允许程序可以根据Client/Server协议通过网络或是本地的UNIX主机进行编译,以同时显示几个运行在已连接到Microwindows服务器的嵌入式设备或远程主机上的程序。除此之外,Client/Server协议还可以利用共享的内存空间客户端和服务器之间传播数据。Nano-X可在每个客户机上步运行,这意味着一旦发送了客户机请求包,服务器在另一个客户机提供服务之前一直等待,直到整个包到达为止。这使得服务器代码非常简单,而运行速度仍非常快。
4 Micorowindows上的FLTK API
FLTK是一个简单灵活的GUI工具箱,特别适用于占用资源很少的环境。它提供大多数窗口构件一一按钮、对话框、文本框以及出色的“赋值器”选择(用于输入数值的窗口构件),还包括滑动器、滚动条、刻度盘等其它构件。针对Microwindows GUI引擎的FLTK的Linux版本被称为FLNX,它能用来为嵌入式环境创建一个出色的UI构建器,由两个构件组成:FI_Widget和FLUID。FI_Widget由所有基本窗口构件API组成,占用40~48KB的资源。FLUID(Fast Light User Interface Desigher,快速轻巧的用户界面设计器)是用来产生FLTK源代码的图形编辑器,占用大约380KB资源(包括每个窗口构件)。
FLTK是一个C++库,由于大多数现代GUI环境都是面向对象的,这命名编写的应用程序移植到类似的API中会更容易。
结语
Microwindows正在嵌入式开发领域稳步发展,是完全免费的开放式源代码,为嵌入式设备提供了更多的解决方案;任何对将Linux定制于PDA、掌上机或者可移动设备感兴趣的人都可从因特网免费下载,并将其移值或开发。熟悉图形应用程序的用户可以很快就在该系统上编写自己的图形应用程序,在未来的嵌入式系统设计中,它的作用是无可限量的。