首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
嵌入式Linux的MiniGUI研究和移植 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 23:54:48 点击数:[] ![]() |
|||||
结构如图1所示。在最底层,GAL和IAL提供底层图形接口以及鼠标和键盘的驱动;中间层是MiniGUI 的核心层,包括窗口系统必不可少的各个模块;最顶层是API,即编程接口。GAL和IAL为 MiniGUI提供了底层的Linux控制台或者X Window 上的图形接口以及输入接口,而Pthread用于提供内核级线程支持的C函数库。 利用GAL和IAL,大大提高了MiniGUI的可移植性,并且使程序的开发和调试变得更加容易。可以在X Window上开发和调试自己的MiniGUI程序,通过重新编译就可以让MiniGUI应用程序运行在特殊的嵌入式硬件平台上。 3 MiniGUI的移植 笔者的项目DVD720工作在μC/OS嵌入式操作系统下,核心CPU为MIPS芯片。该平台是SUNPLUS公司提供的一个多媒体平台,不仅仅实现DVD的播放,还包含一些附加功能,例如游戏、卡拉OK、VOD及上网等功能,并为用户提供了编程接口,使用户可以在DVD上对Lego公司的机器人进行控制。为了给用户提供一个友好的界面,以及从易用性和通用性方面考虑,将MiniGUI移植到我们的DVD720平台。DVD720平台的体系结构如图2[6]所示。由于MiniGUI的分层实现,需要考虑的只是HAL接口下的各驱动程序:鼠标驱动程序、键盘驱动程序及图形驱动程序。 3.1 鼠标和键盘驱动程序 鼠标驱动程序非常简单。抽象意义上讲,初始化鼠标后,每次用户移动鼠标,就可以得到一个X 和 Y 方向上的位移值。驱动程序内部维护鼠标的当前位置,用户移动鼠标后,当前位置被加上位移值,并通过上层Cursor支持,反映到屏幕上,用户就会认为鼠标被正确地“移动”了。现在有各种各样的鼠标,例如MS鼠标、PS/2鼠标、总线鼠标及GPM鼠标等,其主要差别在于初始化和数据包格式上。键盘驱动程序的实现也比较简单,在此不作详细的介绍。 3.2 图形驱动程序 HAL提供的接口函数大多与图形相关,主要就是通过调用图形驱动程序来完成任务的。图形驱动程序屏蔽了底层驱动的细节,实现底层驱动相关的功能,而不是硬件相关的一些功能,如一些画圆和画线的GDI函数、普通的剪切,可直接在HAL接口层实现。 DVD720的显示驱动是基于Frame buffer的驱动程序的。通过对SDRAM中的frame buffer和video bitstream buffer写入,就可以实现对TV和显示器的刷新。像素的写入方式和顺序如图3所示[6]。 下面介绍各接口函数: Open,Close 基本的初始化和关闭函数。在Open函数里要选择子图形驱动程序,将其实现的函数赋给本PSD 结构的函数指针。这里只考虑基于Frame buffer的图形引擎的初始化。 SetPalette,GetPalette 当使用8位或以下的图形模式时,要使用系统调色板。这里是调色板处理函数,它们和Windows API中的概念类似。Linux系统利用ioctl 提供了处理调色板的接口。 AllocateMemGC,MapMemGC,FreeMemGC 内存屏幕是一个伪屏幕。在对屏幕图形操作过程中,比如移动窗口,先生成一个内存屏幕,将物理屏幕的一个区域拷贝到内存屏幕,再拷贝到物理屏幕的新位置,这样就减少了屏幕直接拷贝的延时。AllocateMemGC用于给内存屏幕分配空间,MapMemGC做一些初始化工作,而FreeMemGC则释放内存屏幕。 DrawPixel、ReadPixel、DrawHLine、DrawVLine及FillRect 这些是底层图形函数。分别是画点、读点、画水平线、画竖直线及画一个实心矩形。之所以在底层实现这么多函数,是为了提高效率。图形函数支持多种画图模式,常用的有直接设置或Alpha混合模式,从而可以支持各种图形效果。 PutHLine、GetHLine、PutVLine、GetVLine、PutBox、GetBox及PutBoxMask Get* 函数用于从屏幕拷贝像素到一块内存区,而Put*函数用于将存放于内存区的像素画到屏幕上。PutBoxMask 与PutBox的唯一区别是,如果要画的像素是白色,就不会被画到屏幕上,从而达到一种透明的效果。 到目前为止,我们的移植工作已经顺利完成。MiniGUI已经能成功运行在我们的DVD720平台上。作为底层支持的GUI系统,MiniGUI也应该像操作系统一样是开放源码的自由软件,并应该得到开发商的共同推动。到目前为止,已经有多家嵌入式系统开发商采用MiniGUI开发嵌入式系统,并且已经开发出了许多重要的应用程序。我们期望能够有更多的人加入MiniGUI的开发,共同促成MiniGUI成为嵌入式 Linux系统上的标准GUI。尽管MiniGUI目前的功能已经非常强大,并且已经成功应用于许多嵌入式系统,但还需要在如下领域进行开发: ◇ 建立一个 C++ 类库来封装MiniGUI的API; ◇ 建立基于传统进程级客户/服务器体系结构的 MiniGUI,以便能够让MiniGUI适合于一些较大的嵌入式系统,比如支持全功能浏览器的机顶盒。 随着MiniGUI不断推广和功能的加强,它也将在实际应用中不断走向成熟。实时嵌入式系统上的GUI开发正处于开始阶段。在这个领域,有许多技术难题等待自由软件程序员去解决。 |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |