引言
在嵌入式gui 中需要实现多图形功能,包括图形绘制以及拷贝等。其中的许多功能需要进行大量的数据传递(如图形拷贝),或者需要进行大量的数值运算(如画样条曲线)。如果这些功能都由纯软件实现的话,会占用大量的cpu时间并且需要传递大量的数据,从而影响了图形性能。许多显卡芯片带有图形处理器,能够从硬件上实现一部分图形功能。支持硬件加速的图形库可以通过图形处理器实现这些图形功能,从而减轻了cpu的负担并减少了数据在总线上的传输时间,提高了图形性能。
本文就如何实现directfb的图形加速功能做了详细的介绍,并将实现之后在性能上得到的改进与实现之前做比较,说明directfb在优化嵌入式系统gui上的作用。
1 directfb体系结构
1.1 directfb简介
directfb项目是由德国convergence公司推动的open source计划的一部分,它是专门为满足嵌入式设备要求而开发的小巧、强大、灵活和易于使用的图形系统,并且试图成为一个建构于linux framebuffer device之上的新图形标准。它在framebuffer的基础上提供了图形加速、输入设备处理提取、透明窗口和多重显示层的功能,能够对嵌入式系统 gui有较好的支持。与那些通用的嵌入式gui系统相比,它具有非常简洁、高效的体系结构和硬件图形加速功能。
1.2 directfb体系结构
(1)directfb访问硬件显卡
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等。
(2)directfb访问输入设备
directfb使用linux内核提供的标准设备接口访问输入设备,而不是直接访问输入硬件。具体的结构如图1所示。
2 directfb加速驱动原理
本节结合笔者的硬件平台来说明如何实现directfb加速驱动,笔者所用的平台是mpc8540,图形处理器是fujitsu mb86296。要实现directfb加速驱动,需要有以下几个模块:系统、图形加速器、屏幕及图层。其中系统是指帧缓冲和硬件管理。directfb 支持的系统有dev/fb、osx、sdl、xll、/dev/mem等。系统可以在directfb应用程序配置文件directfbrc中配置。屏幕是指输出设备,如lcd。图层代表独立的图像缓冲区,一般是在显示的时候自动由硬件融合,硬件一般采用alpha技术融合。图层数量的多少取决于图形处理器,一般复杂的图形处理器都支持多层显示。一层内容的改变不影响其他层的内容。
directfb驱动的几点基本要素是:
①必须赋给驱动一个唯一的名字并且用如下宏实现:dfb_graphics_driver(mb86296)。
②上面的宏需要定义6个函数供directfb core使用,即初始化/关闭驱动、初始化/关闭加速重获驱动元数据。
③在驱动中需要实现的函数有以下6个。
a)static int dnver_probe(graphicsdevice*device);
如果系统支持某种硬件此函数应该返回非零值,它用directfb core来探测哪个驱动支持系统硬件。
b)static void driver_get_info(graphicsdevice *device, graphicsdriverinfo *info);
这些函数用来设驱动信息。
c)static dfbresult driver_init_driver (graphicsdevice *device, graphicsdevicefuncs *funcs, void *driver_data, void *device_data, coredfb *core);
初始化驱动。在成功获得所有需要的资源后驱动应该注册屏幕和层。同时也需要通过funcs返回硬件加速函数列表。实现方式如下所示。
初始化硬件。通过graphicsdevicelnfo*device_info设置由硬件支持的加速能力,例如blit/draw。具体实现如下:
实现关闭驱动时需要做的工作。
3 加速性能测试
通过笔者编写的驱动程序和directfb官方加速测试程序df_dok,可以看出加速与否对应用程序运行速度的影响。下面是没有实现图形加速能力的测试结果。
由上面测试结果比较可以看出,实现了加速能力后的directfb可以大大提高图形处理能力。
结语
通过笔者在某雷达系统上的测试可以看出,实现图形加速后的gui界面响应较快,画面流畅,与加速前相比图形性能有了显著的提高。随着 directfb在嵌入式系统,如数控、手机、嵌入式浏览器、pda、雷达等领域的应用越来越广泛,基于directfb的图形加速将使得嵌入式系统 gui性能得到极大提高。加速驱动程序在directfb图形库中的实现,充分利用了图形加速器的加速功能,减轻了cpu的数据处理负担,大大提高了嵌入式系统的gui性能。
vivoS1评测 值不值得买
什么是深度学习,深度学习能解决什么问题
中兴通讯5G新空口数据连接实验的成功使5G商用化又迈进了一步
简介AT5010频谱分析仪
疫情契机 中国B、C端自动驾驶行业双轨并进
基于嵌入式系统GUI如何实现DirectF的图形加速功能的功能应用
出售二手仪器仪表 电子工具设备
遏止中国半导体发展:传美国明年将扩大芯片制造设备出口管制
如何简单设计应用电源
如何识别WiFi模块型号真伪,从这三个部分来剖析
AI战略决定每家企业的未来胜负
Underfill的基本特性介绍
你知道CAN-FD协议有多少?
多功能超声波清洗发生器电源频率和功率可调
台电DVD光驱装机用户首选
HyperXCloudAlphaGold黑金版电竞耳机评测 为游戏而生
电子设计和制作经常使用的二极管资料大全
世界环境日:立升净水超滤膜组合引领环保净水时代
峰值检波改进电路图_综合峰值检波电路图
“半导体自主可控”的情调吹向了西方欧洲大地