梁文森
(1.福州大学物理与信息工程学院,福建 福州 350116;2.福建星网锐捷通讯股份有限公司,福建 福州 350001)
基于BCM7241平台的DirectFB图形引擎移植研究
梁文森1,2
(1.福州大学物理与信息工程学院,福建 福州 350116;2.福建星网锐捷通讯股份有限公司,福建 福州 350001)
本文详细描述了如何在BCM7241硬件平台上移植实现DirectFB的图形引擎硬件加速功能;并把移植之后在系统性能上得到的提升与未移植之前做比较,说明DirectFB在优化BCM7241硬件平台GUI性能上的作用。
GUI;DirectFB;BCM7241;移植;图形引擎
图形用户界面,又称图形用户接口(Graphical User Interface,简称GUI)是指采用图形的方式显示用户操作界面。它与早期使用的非图形界面的命令行界面相比,对于用户来说图形界面在视觉上更易于操作、接受。
近几年来,随着嵌入式技术的快速发展,嵌入式系统在软件、硬件上均取得了较大的进步。嵌入式GUI图形引擎也得到了快速的发展,涌现出了一大批优秀的嵌入式GUI图形引擎,如:DirectFB、MiniGUI、QT等。近年来的市场调研需求显示,非常多的嵌入式系统,包括移动播放器、数字机顶盒、汽车电子控制系统、移动终端设备等均要求有一个高可靠、高性能的GUI系统的支持。因此,对图形用户界面GUI系统的要求是:高性能、高可靠、轻型、可移植、占用资源少、可配置等。
在嵌入式图形引擎中需要实现很多图形功能,具体包括:图形的叠加、绘制、拷贝等。其中,有许多图形功能需要进行大量的数据传递搬移(如:图形拷贝),或者有许多图形功能需要进行大量的数据运算(如2张图片进行混合叠加)。许多显卡芯片带有GPU(图形处理器),有一部分图形加速功能能够从硬件上实现。
本文详细描述了如何在BCM7241硬件平台上移植实现DirectFB的图形引擎硬件加速功能;并把移植之后在系统性能上得到的提升与未移植之前做比较,说明DirectFB在优化BCM7241硬件平台GUI性能上的作用。
2.1 BCM7241硬件平台简介
BCM7241芯片平台是博通公司推出的一款低成本高性能的高清晰IP机顶盒(STB)解决方案芯片。 博通的BCM7241是一款SOC芯片,芯片内部集成了MIPS核、视频解码器(RISC处理器)、音频解码器(DSP处理器)、解复用模块(RISC处理器)、图形引擎模块(2D、OpenGL)、显示模块、DDR3控制器等多个功能模块,其芯片内部结构如图1所示。
图1 BBCM7C24M1芯片内部结构
BCM7241芯片集成一个单核双线程RISC MIPS核,主频达到3000+DMIPS;集成一个DDR3内存控制器,外接1GByte DDR3内存;集成一个NAND FLASH控制器,目前外接一片256MByte NAND FLASH芯片用来存储Linux操作系统和应用程序。在BCM7241芯片平台上厂商已提供可运行嵌入式Linux,其内核版本3.3.3。
BCM7241图形引擎模块中,2D图形引擎处理速率达到776 Mpixels per second,其2D图形引擎具有如下几个特性:硬件Scaling缩放、硬件BLT叠加等特性。
2.2 DirectFB简介
DirectFB是一个轻型的提供硬件图形引擎加速、输入设备处理、集成透明管理的视图窗口系统以及在驱动层之上的多层显示的开放源码库。它是一个用软件封装实现当前芯片硬件无法支持的图形算法的层。DirectFB是专门针对嵌入式系统而设计,在设计之初就充分考虑嵌进式系统的固有特性,体积小巧,资源消耗低,以最小的资源开销来实现最高的硬件加速性能。作为嵌进式系统中强大的图形处理库,DirectFB成为Linux下图形处理的一个新的标准。
DirectFB是存在于Linux Frame Buffer层之上,高级图形管理层(如QT、GTK+等)之下的。它以很小的资源占用来提供图形硬件加速功能,如:提供多路带α通道渲染等高级图像操作功能。它不依赖其它库除了标准C库外,不需修改Linux内核。它广泛的应用于有关Linux显示界面的项目上。它支持市面上绝大部分的硬件显示卡,支持鼠标、键盘、遥控器、触摸屏等输入设备。支持JPEG、PNG、BMP、GIF、DirectFB bitmap font和矢量字库TrueType等音视频文件和字体。
2.3 DirectFB体系结构
从GUI整个系统架构来看,对于一般的DTV、STB来说,DirectFB处于QT、GTK这样的高级GUI框架的下面,Linux系统驱动的上面。DirectFB是一个图形加速中间件,专门针对Linux图形库设计的。
它的上层直接为图形库(如QT、GTK)提供如画图、显示、输入设备控制等服务;它的下层直接面向GFX硬件加速,要求硬件驱动实现全部或部分预定的画图函数,具体结构如图2所示。
图2 DirectFB在应用系统位置
对于上层的GUI高级框架来说,DirectFB是透明的;对于底层的驱动来说,DirectFB里面包含负责和硬件打交道的显卡的驱动(gfxdriver)和显示系统(system),这里gfxdriver是和各个硬件平台相关的,需要自己实现。更加细化的Direct-FB的结构图如图3所示。
图3 DirectFB内部结构
2.4 DirectFB移植实现
通过上述对DirectFB体系结构分析,在BCM7241硬件平台上移植DirectFB图形引擎需要根据BCM7241硬件平台特性实现几个模块,具体是:gfxdriver(硬件图形加速接口)、system系统显示输出、video(硬件音视频解码)。为了更易于理解DirectFB,介绍几个DirectFB的概念,具体如下:
(1)Layers
它代表互相独立的图形缓存。大多数嵌入式设备都有多个layer,多个layer根据对应的alpha值混合在一起从而显示出来。
(2)Surface
代表一块预留的内存,来保存像素数据。DirectFB中的Drawing,Bilitting操作就是基于Surface的。Surface的内存根据设定,可以从系统中分配,也可以从显卡的内存中分配。
(3)Primary Surface
代表一个特殊layer的特殊surface。如果primary surface是单缓冲的,任何对于primary surface的操作都会直接反应到显示屏上。
(4)Subsurface
是一个surface的子集,但是自身并不占有任何内存。
(5)Window/Windowstack
控制一个layer中的surface该显示什么。Window属于某个背景可以设定的layer。每个window有自己的surface,window用这个surface来组合图像。
把DirectFB图形引擎移植到博通BCM7241硬件平台上需注意下面几点:
(1)必须给图形引擎驱动取一个唯一的名字,并且用宏定义DFB_GRAPHICS_DRIVER(bcmnexus_gfx)实现。
(2)在驱动中定义如下6个函数供DirectFB Core使用,具体如图4所示。
(3)关键函数说明
driver_init_driver函数是初始化硬件驱动,在获得所有需要的资源后驱动应该注册屏幕和层;同时通过GraphicsDeviceFuncs结构的funcs返回BCM7241硬件平台的硬件加速函数列表,具体实现方式如图5所示。
图4 DirectFB Core函数
图5 硬件加速函数列表
其中,基于BCM7241硬件平台2D图形引擎实现的函数有:绘制矩形函数bcmnexus_gfxDrawRectangle、填充矩形函数bcmnexus_gfxFillRectangle、叠加函数bcmnexus_gfxBlit及拉伸叠加函数bcmnexus_gfxStretchBlit。
为了测试移植后的图形库的性能采用DirectFB官方加速测试程序df_dok,主要针对图形各种效果的混合功能进行了测试。未开启硬件加速,测试数据如图6所示:
图6 不开启硬件加速测试
开启硬件加速,测试数据如图7所示:
图7 开启硬件加速测试
通过图6、图7测试数据对比可以看出,采用DirectFB硬件加速可以大幅度提升2D性能。
基于BCM7241平台的DirectFB图形引擎移植可实现图形用户界面快速响应,用户界面场景切换流畅,与移植DirectFB图形引擎之前相比系统的性能显著提升;它充分利用了图形引擎加速器的加速功能,把大部分数据处理交由图形引擎处理,极大地减轻了CPU处理数据的负担,提高了嵌入式系统的图形用户界面性能。目前,该设计已应用到数字标牌嵌入式终端系统上,极大地提高了系统图形用户界面性能,给用户带来很好的交互体验。
[1]刘小双,李建平,郑志国.DirectFB图形加速在嵌入式系统中的应用[J].单片机与嵌入式系统应用,2009.
[2]吴文良.一种适合嵌入式系统的图形库DirectFB[J].硅谷,2010.
[3](加)亚荷毛尔等,秦云川.改编构建嵌入式Linux系统(第二版)[M].中国电力出版社,2011.
[4][英]Neil Matthew Richard Stones著.Linux程序设计(第4版) [M],2010.
[5]韦东山.嵌入式Linux应用开发完全手册[M],2008.
[6][英]Neil Matthew Richard Stones.Linux程序设计[M].人民邮电出版社,2010.
[7]文全刚.嵌入式Linux操作系统原理与应用[M].北京航空航天大学出版社,2011.
[8][德]Michael Kerrisk.Linux/UNIX系统编程手册[M].孙剑等译.人民邮电出版社,2014.
Research on the DirectFB Graphics Engine Transplant Based on BCM7241 Platform
Liang Wensen1,2
(1.College of Physics and Information Engineering,Fuzhou University,Fuzhou 350116,Fujian; 2.Fujian Star-net Communication Co.,Ltd,Fuzhou 350001,Fujian)
This paper describes in detail how to implement the DirectFB transplantation on BCM7241 hardware platform of the graphics engine hardware acceleration;and gets the promotion in the performance of the system after the transplantation and compares with the performance before transplantation,illustrating the function of DirectFB in optimizing BCM7241 hardware platform GUI performance.
GUI;DirectFB;BCM7241;implanting;graphics engine
TP393
:A
:1008-66609(2015)04-0053-03
梁文森,男,福建泉州人,本科,软件工程师,研究方向:嵌入式系统设计。