基于DirectFB嵌入式系统的远程桌面控制方案
扫描二维码
随时随地手机看文章
本文提出一种基于嵌入式系统的远程桌面控制方案,其基本思想是尽可能地减少终端资源占用,最大限度地增强其适用范围,以此达到增强应用价值的目的。具体方案是通过Directvnc 的移植来实现的,由于Directvnc 与其它Unix 系统不同的是它通过轻量级图形库DirectFB 使用Linux 帧缓冲设备。DirectFB 在FrameBuffer 的基础上提供了图形加速等多种功能,显示速度快,链接库较小,可以在一定程度上节省系统资源,另外,directvnc工作在帧缓冲层,平***立性好,摒弃了对庞大低效的X Window 等标准嵌入式系统图形化用户界面的依赖,这一功能对于资源有限的嵌入式系统和PDA 等环境下是非常有效的。
1 网络计算模式的实现
1.1 网络计算模式
系统的实现基于网络计算模式(virtual network computing,VNC),该模式由VNC 服务器、RFB(远程帧缓存) 协议和VNC 客户端3 部分组成。Directvnc 作为客户端,它使用图形用户界面显示与进行输入输出控制,通过互连网远程访问与控制服务器。RealVNC 作为服务器端,它进行大量的计算并提供帧缓存变化到客户端显示设备,减轻了客户端负荷。RealVNC 功能成熟,高效实用,完全跨平台,兼容性好,可广泛应用于多种操作系统和开发系统。系统通信通过RFB 协议来完成,RFB是一个架构在TCP/IP上远程图形用户的简单协议,通过TCP/IP 协议簇连接,是基于字节流或消息的可靠传输。它是真正的瘦客户协议。
1.2 基于RFB 的瘦客户端实现
因为RFB 工作在帧缓存级别上,所以它可以应用于所有的窗口系统,例如:X11,Windows 和Mac 系统,重要的是对客户端硬件的需求少能支持更广范围的硬件环境。
在协议的设计上,对客户端的任务实现也尽可能的简单,这体现在:
(1)显示编码源语。
显示编码源语有基于像素和基于图形两种绘图源语。RFB 的显示编码方式基于像素,其显示更新在服务器端处理,客户端仅需要显示像素数据。客户端计算简单、平***立性好。
(2)系统最初握手阶段对像素数据格式和编码类型协商的设计。
像素格式涉及如何通过像素值来实现不同颜色的重现,最常用的像素格式是24 位或16 位真彩色。像素格式描述了像素数据存储所用的格式,定义了像素在内存中的编码方式。
(3)编码方式。
编码是根据一定的协议或格式把模拟信息转换成比特流的过程。在RFB 协议中,编码就是将每一个矩形像素点的数据转化为包含该矩形像素点的位置、宽度和高度信息以及编码类型的前缀,再加上经过此编码方式编码的数据本身。RFB 协议主要采用的编码方式是二维运动步长编码(2DRLE)的变种,如Raw、CopyRectangle、RRE(Rise-and-Run-Lengeh)、CoRRE(Compact RRE)和缺省时使用的Hextile。实际上常用的有2DRLE、Hextil 以及CopyRectangle 编码,他们为桌面提供最好的压缩方法。在RFB 中压缩编码算法比不高,但由于算法简单,故对客户端的图形显示引擎设计要求很低,客户端程序也相对简单。
(4) 显示更新机制。
RFB 的显示协议是基于一个简单的画图原理,即将每一个矩形像素点放在给定的位置(x,y)上。
帧缓存的更新通过一系列块操作来完成,这种更新像素块的操作效率较低,但是通过多种像素编码压缩方式的灵活选择可以实现网络带宽、客户端计算速度和服务器处理的速度之间的效率折中,从而实现高效率的图形显示。显示更新机制包括更新时机及刷新模式。更新时机有客户端拉动和服务器端推动两种,每种更新时机又可采用懒惰更新和急切更新两种刷新模式。RFB 更新请求是客户端驱动型的懒惰更新,只有在服务器端收到客户端的请求时才会向其发送若干命令缓冲合并后的显示更新。对于一些应用,在相同区域上的更新往往非常频繁,这样如果网络非常慢或者客户端处理能力不强时,客户端驱动的更新机制使得客户端的显示质量可以得到调整。
总之,在网络计算模式下,RFB协议尽可能地减少终端资源占用并提高网络利用率,基本提供了一个比较瘦的客户端。
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。GUI 即人机交互图形化用户界面设计。纵观国际相关产业在图形化用户界面设计方面的发展现状,许多国际知名公司早已意识到 GUI 在产品方面产生的强大增值功能,以及带动的巨大市场价值,因此在公司内部设立了相关部门专门从事 GUI 的研究与设计,同业间也成立了若干机构,以互相交流 GUI 设计理论与经验为目的。随着中国 IT 产业,移动通讯产业,家电产业的迅猛发展,在产品的人机交互界面设计水平发展上日显滞后,这对于提高产业综合素质,提升与国际同等业者的竞争能力等等方面无疑起了制约的作用。GUI的广泛应用是当今计算机发展的重大成就之一,他极大地方便了非专业用户的使用人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口、菜单、按键等方式来方便地进行操作。而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。
在嵌入式GUI中需要实现多图形功能,包括图形绘制以及拷贝等。其中的许多功能需要进行大量的数据传递(如图形拷贝),或者需要进行大量的数值运算(如画样条曲线)。许多显卡芯片带有图形处理器,能够从硬件上实现一部分图形功能。
本文就如何实现DirectFB的图形加速功能做了详细的介绍,并将实现之后在性能上得到的改进与实现之前做比较,说明DirectFB在优化嵌入式系统GUI上的作用。
1 DirectFB体系结构
1.1 DirectFB简介
DirectFB是一个轻量级的提供硬件图形加速,输入设备处理和抽象的图形库,它集成了支持半透明的视窗系统以及在LinuxFramebuffer驱动之上的多层显示。它是一个用软件封装当前硬件无法支持的图形算法来完成硬件加速的层。DirectFB是为嵌入式系统而设计。它是以最小的资源开销来实现最高的硬件加速性能。DirectFB针对视频存储有自己的资源管理器。像显示层输入设备这样的资源能被锁定进行互斥访问。例:全屏游戏,DirectFB能对像显示层,窗体以及各种通用的surfaces这样的图形目标提供抽象。从窗体切换到全屏以及返回到窗体的编程工作被最小化设置到所期望的合作级别。它在FrameBuffer的基础上提供了图形加速、输入设备处理提取、透明窗口和多重显示层的功能,能够对嵌入式系统GUI有较好的支持。与那些通用的嵌入式GUI系统相比,它具有非常简洁、高效的体系结构和硬件图形加速功能。
1.2 DirectFB体系结构
(1)DirectFB访问硬件显卡
DirectFB依赖已有的内核接口即帧缓冲设备(/dev/fb)访问图形处理器,也就是说DireetFB需要一个正在工作的帧缓冲驱动。Linux内核有专门的帧缓冲驱动支持某些图形处理器。DirectFB利用帧缓冲设备做如下工作:
◆设置显卡工作模式(分辨率,颜色深度,时序)
◆映射显存
◆改变帧缓冲视口(针对双缓冲)
如果某种显卡被DirecFB支持并且在Linux内核中也有这种图形处理器的帧缓冲驱动,DirectFB利用帧缓冲设备做如下额外的工作:
◆映射显存IO端口
◆关闭帧缓冲驱动中自带的加速功能