基于Microwindows的嵌入式Linux轻量级图形应用库的
不同的应用环境。其中前者应用于所有的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系统上运行,具有较好的移植性、易使用性、稳定性。 这里基于Linux2.4.19和Microwindows0.89进行讨论,主要难点:一是将Microwindows层次打乱后如何进行代码的重构,用最少的代码实现最有效的功能,二是提供中文显示和中文输入的支持。 2.1 结构重构 (1)底层驱动层 整个系统的核心是键盘和屏幕数据结构,它们在Linux系统中都是被当作文件来进行访问,其C代码主要在src/drivers和src/engine目录下。 键盘是通过fd=open(/dev/tty,O_NONBLOCK)打开,利用ioctl来进行操作的,涉及到的文件有kbd_ttyscan.c(提供键盘的打开、关闭等支持)。 屏幕驱动是基于Linux内核中framebuffer,这要求在编译内核的时候选择支持framebuffer编译参数选项。它是通过fd=open(env=/dev/fb0)打开,用SCREENDEVICE的指针PSD指向这片显存,然后对这片显存根据屏幕的不同位色设置情况为中间引擎层提供相应的图形操作支持,包括画点线、图片显示、屏幕拷贝以及中西文字的显示等等。其涉及到的文件较多,类型定义与函数声明的头文件有fb.h、genFONT.h和genmem.h,C代码文件有src_fb.c(提供基本的framebuffer打开和关闭等支持)、fb*.c(*为2、4、8、16、24、32,提供对应不同灰度级别和不同位色屏幕的支持)、genmem.c(提供显存分配)和genFONT.c(提供中西文字体显示支持)。 (2)中间引擎层 这一层是在底层驱动层提供的设备对象支持下,完成图形在实虚屏之间的转换(以PSD指针作为参数来进行),实现各种图形功能函数(以Gd...为开头)。相关的类型定义与函数声明头文件有include目录下的mwtypes.h、swap.h和winkbd.h,C代码主要有src/engine目录下的devarc.c(提供弧线和椭圆绘制支持)、devclip.c(提供剪贴支持)、devdraw.c(提供基本的绘图支持)、devFONT.c(提供字体字库支持)、devimage(提供图片绘制拷贝支持)、devkbd.c(提供键盘控制支持)、devrgn.c(提供区域操作动态分配支持)和devpal*.c(*为1、2、4、8,提供调色板支持)。 在分析完驱动层和引擎层后,将它们的相关文件放在同一个目录下,利用gcc编译器编译,链接生成目标文件,然后用ar归档命令即可生成库文件(动态库和静态库),只需要将这个库文件提交给二次开发人员即可进行图形应用程序的开发。 2.2 中文支持 在嵌入式Linux应用系统中,控制台驱动程序和Framebuffer驱动程序对字符的处理都是以单字节为基础的,所以需要进行中文化的改造。 (1)中文显示的支持 这里采用16×16点阵的GB2312字库,字模文件hzk.bin存放在/FONT/chinese目录下。对于一个需要显示的字符串,首先判断其是属于哪种编码集,如果是ASCII码,就调用Microwindows提供的GdText函数进行显示;如果是汉字,则根据其机内码得到区位码,计算该汉字字模在字模文件中的偏移量,读出该汉字字模,调用底层DrawPixel函数的像素点,并显示这个汉字。 (2)中文输入的支持 由于Microwindows对输入法没有任何支持,所以这一块几乎所有的代码都需要重新编写。目前只提供GB2312字库的拼音输入方法,且只能逐字输入(见图2),同时也默认字模文件hzk.bin存放在/FONT
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
