嵌入式Linux体系的许多运用领域,比方消费类电子产品、丈量操控设备等,图形用户界面不只在技术上是软件体系规划的一个要点,并且在商业上也关系到用户对该产品承受的程度。
依据产品功用低高端的不同定位,体系规划对图形用户界面的要求也不同,一般大致可以分为单进程办法的轻量级图形界面和多任务窗口体系图形用户界面GUI,前者首要用于低端的信息终端和工业操控体系,后者首要用于PDA、机顶盒、DVD/VCD播放机、WAP手机等产品中。
现在,在Linux操作体系中,一般可将图形运用库粗略地分为三个不同层次。榜首层次是图形根底设施,它们自身没有供给相应的运用程序编程接口,而是集成在操作体系中或选用某种封装办法,用作其他高档图形或许运用程序的根本函数库,较典型的有X Window、SVGALib、framebuffer(帧缓冲)和LibGGI等;第二层次是高档函数库,它们供给了很多的运用程序编程接口,较典型的有Xlib、GDK、GTK+、QT、SDL、OpenGL、PEG和DirectFB等;第三层次多任务窗口体系图形用户界面GUI,较典型的有Microwindows、OpenGUI、Qt/Embedded和MiniGUI等。
在低端的嵌入式体系中, 因为用户图形界面只是需求用到一些简略的画点、画线、图片显现和中西文输入/显现等,一起考虑到本钱、占资源巨细和稳定性等许多要素,因而在对Microwindows进行相应削减的根底上进行运用图形库的规划。
1 Microwindows的分层结构
Microwindows是一个闻名的开放源码的嵌入式GUI软件,专门用于小型嵌入式设备上开发高性能图形运用程序和多任务窗口体系。它用C言语完成,可移植性好,可以在嵌入式Linux上运转。现在,它不只可以在支撑Framebuffer的32位嵌入式Linux体系上运转,还可以在SVGALib库上运转,乃至可以被移植到16位的ELKS和实形式的MSDOS上。
Microwindows选用分层结构规划,共有三层(见图1)。底层驱动层是面向根本的图形输出和键盘、鼠标或触摸屏的驱动程序,在程序中经过相应的数据结构就能拜访实践的硬件设备;中心引擎层供给底层硬件的笼统接口,是一个可移植的图形引擎,供给点线制作、区域填充、多边形制作、削减和RGB色彩形式运用等;最高运用层别离供给兼容于X Window 和Windows CE(Win32子集)的API,一起供给窗口办理。
底层驱动层也叫设备与渠道相关层,这一层的功用是将体系与设备和操作体系渠道的详细细节屏蔽起来。它经过实践的设备驱动程序接口或许OS体系调用来与硬件设备交互,这些硬件设备首要包含屏幕、鼠标和键盘等。咱们运用设备目标(device object)的概念来描绘一类设备,每一个目标描绘了一类实践设备的特色和办法。比方,屏幕设备目标就描绘了其各种特色(屏幕尺度、分辨率、像素深度、像素格局、逻辑显存首地址等)和根本办法(翻开和封闭显现器、设置调色板、回来屏幕特色、读写像素点等)。
最底层实践上是以设备目标的办法为中心层供给了一个笼统的设备驱动界面。Microwindows在这一层中对屏幕、鼠标、触摸屏和键盘等设备别离界说了一个对应的数据结构。其间,屏幕设备驱动结构体SCREENDEVICE指定了比方设备的巨细、硬件运用的图形形式等底层的显现状况以及翻开、封闭、画点线等办法;键盘设备驱动结构体KBDDEVICE界说翻开、封闭和读取键值等办法; 屏幕信息的结构体MWSCREENINFO和位图信息的结构体MWIMAGEINFO是两个常用的结构体,用以获得当时翻开的显现屏幕和位图的长、宽、位色等特色值。
中心引擎层也叫设备与渠道无关层,这一层的功用是供给一个可以为各种运用层同享的与设备无关的中心图形引擎,其间的首要作业便是完成各种图形函数和输入设备的功用函数。关于中心层,它向下看到的是各类设备目标,向上则是要供给一个笼统的中心图形界面,使得上面的运用层对它所运用的究竟是什么设备目标不用去理睬。当运转在Linux体系中时,Microwindows供给的一切绘图函数都是经过调用底层屏幕驱动Framebuffer或SVGALib来完成的。它支撑行制作、区域填充、剪切以及RGB色彩模型,操控字体的显现等。
最高层即运用层,这一层的功用是依照运用的详细要求为运用程序供给恰当的运用层用户界面。当运用程序不需求窗口体系的时分,用户自界说图形界面将非常简略,乃至可以什么都不做而直接运用中心层供给的笼统中心界面(本文评论的图形运用库便是根据该原理来构建的)。假如用户需求完善多任务窗口体系,则可以运用笼统中心界面来完成其运用程序编程接口(API)以及窗口和音讯机制等。Microwindows完成了MicrosoftWin32/WinCE图形显现接口(GDI)和Xlib(XWindows)接口两种API以习惯不同的运用环境。其间前者运用于一切的Windows CE和Win32运用程序,用于规划类Win32图形用户界面GUI;后者就像Nano-X,运用于一切Linux X插件集的最底层,这样可让Linux图形程序员X接口开发图形运用程序。
明显,Microwindows的分层规划使得其可以在需求的时分易于改写和定制,可以运转在任何支撑Framebufer的Linux体系(2.2以上版别的内核)中,这些特色使得Microwindows在嵌入式体系规划中的运用非常广泛。
2 图形运用库的规划
虽然Microwindwos现已供给了一个全功用的可视化图形用户界面开发工具,可是由它生成的代码量很大,在某些类低端的嵌入式Linux体系中不适合。
因而,规划一个面向低端的、非窗口办理的根本图形运用库就显得非常重要。它占用较少的磁盘空间和较少的内存开支,旨在为嵌入式体系构建根本的图形用户界面供给编程接口。根本图形运用库的规划思路是以Microwindows驱动层和独立图形引擎层为中心,将它们抽取出来,不再选用分层结构,最终构建一个尽可能小的、满意绘图、显现、中文输入等功用的轻量级图形运用库。
该图形运用库类似于Turboc C,支撑灰度/五颜六色LCD和PS/2键盘,屏幕驱动支撑1/2/4/8/l6/32bpp,能进行相应的中西文输入和显现;具有强壮的绘图功用,包含画线、区域填充、画多边形、剪贴和图形模块等。明显,因为图形库以framebufer为根底,无需特别操作体系或图形体系的支撑,能很好的在嵌入式Linux体系上运转,具有较好的移植性、易运用性、稳定性。