Linux图形界面中客户端、服务器、窗口管理器之间的关系
,和用于跨平台开发及国际化的工具。Qt API在所有支持的平台上都是相同的,Qt工具在这些平台上的使用方式也一致, 因而Qt应用的开发和部署与平台无关。在桌面系统中,QT程序通常是符合X协议的应用程序,它需要X服务器的支持。
QT/E 是用于嵌入式Linux系统的QT版本。QT/E中去掉了X lib的依赖而直接工作于frame. Buffer上,因而应用程序处理过程效率比较高。它的运行只要有FrAMEbuffer设备就可以了,不需要X服务器的支持。但其本身运行也是有服务器和客户端的概念。在服务器没有启动前运行QT/E程序,需要在加“-qws”来启动服务器。如:
#./hello –qws
在QT4以后,QT/E改名位Qtopia Core了,并且集成到Qtopia成品中去了。
QT/E 是Frame. Buffer设备运行的。具有简洁、高效等特点。但是了解Frame. Buffer设备的工程师会发现,Frame. Buffer设备无法实现硬件加速功能。这也限制了基于Framebuffer设备的图形解决方案的发展。事实上桌面上的XFree86默认情况下是不支持Framebuffer设备的,XFree86直接操作显卡,充分利用显卡加速功能(下个主题将介绍显卡加速方面的内容)。XServer兼容最多类型的显示卡,一般来讲,现在市面上80%以上的显示卡都能够被这个Server支持。但有时也会有一些显卡不能不正确设别,这时可以采用Frame. Buffer模式来支持显示器。主要是用到了XFree86的 frame. buffer Server(XF86_FBDev)。需要修改XFree86的配置文件/etc/X11/XF86Config,及在/etc/grub.conf中加入VGA=X*能。
Qtopia是一个面向嵌入式Linux的全方位应用程序开发平台,同时也是用于基于Linux的PDA(个人数字助理),智能电话(Smartphone)以及其他移动设备的用户界面。
八、DirectFB、显卡加速驱动
首先DirectFB类似于桌面中的XFree86。桌面中的XFree86不需要Frame. Buffer设备,而DirectFB需要。
显卡加速 在嵌入式GUI中需要实现多图形功能,包括图形绘制以及拷贝等。其中的许多功能需要进行大量的数据传递(如图形拷贝),或者需要进行大量的数值运算(如画样条曲线)。如果这些功能都由纯软件实现的话,会占用大量的CPU时间并且需要传递大量的数据,从而影响了图形性能。许多显卡芯片带有图形处理器,能够从硬件上实现一部分图形功能。支持硬件加速的图形库可以通过图形处理器实现这些图形功能,从而减轻了CPU的负担并减少了数据在总线上的传输时间,提高了图形性能。
DirectFB项目是由德国Convergence公司推动的Open source计划的一部分,它是专门为满足嵌入式设备要求而开发的小巧、强大、灵活和易于使用的图形系统,并且试图成为一个建构于Linux Framebuffer Device之上的新图形标准。它在FrameBuffer的基础上提供了图形加速、输入设备处理提取、透明窗口和多重显示层的功能,能够对嵌入式系统GUI有较好的支持。与那些通用的嵌入式GUI系统相比,它具有非常简洁、高效的体系结构和硬件图形加速功能。
DirectFB依赖已有的内核接口即帧缓冲设备(/dev/fb)访问图形处理器,也就是说DireetFB需要一个正在工作的帧缓冲驱动。Linux内核有专门的帧缓冲驱动支持某些图形处理器。对于不支持的图形处理器,内核提供VE—SA帧缓冲(这种帧缓冲有一些限制)。DirectFB利用帧缓冲设备做如下工作:
◆ 设置显卡工作模式(分辨率,颜色深度,时序)
◆ 映射显存
如果某种显卡被DirecFB支持并且在Linux内核中也有这种图形处理器的帧缓冲驱动,DirectFB利用帧缓冲设备做如下额外的工作:
◆ 映射显存IO端口(如果加速驱动在用户空间实现,需要这步。如果在内核空间实现,则不需要映射,但需要有相应的驱动接口。也可以重新写一个驱动程序来专门实现加速功能)
◆ 关闭帧缓冲驱动中自带的加速功能
针对具体的图形操作(例如图片拷贝、区域填充、区域拷贝、画线、图形拉伸等),DirectFB加速驱动(对映射到用户空间的控制寄存器访问)访问显存映射的图形处理器I/O端口向图形处理器提交命令,由显卡来实现相应的命令。也就是说真正的硬件加速完全是在用户空间实现。这样DirectFB就可以对它支持的图形处理器提供最大限度的硬件图形加速。这些加速功能需要显卡控制器的支持。一些嵌入式的显示控制器中并没有相应的功能。需要外接显卡来实现。
上层APl支持DirectFB的有:XdirectFB、DirectFBGL、GTK+、DFBTerm、DFBSee、DFBPoint、MythTV、Qt on DirectFB、SDL等。
DirectFB也需要窗口管理器。DirectFB采用模块化设计,它并不依赖于某种具体的窗口管理器,只要具体的窗口管理器实现接口DirectFB中的CoreWMFuncs中定义的函数,就可
管理 之间 关系 窗口 服务器 图形 界面 客户端 Linux 相关文章:
- 利用udev在/dev下动态生成/移除设备文件(04-21)
- Linux内存使用的体会 (04-23)
- 无线动物识别和跟踪管理系统的设计(02-14)
- 嵌入式操作系统uCLinux详解(03-19)
- 微控制器省电管理方法(05-04)
- Linux 时钟管理(06-13)