0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于嵌入式系统GUI如何实现DirectF的图形加速功能的功能应用

电子设计 来源:单片机与嵌入式系统应用 作者:刘小双,李建平,郑 2020-09-14 17:55 次阅读

引言

嵌入式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所示。

基于嵌入式系统GUI如何实现DirectF的图形加速功能的功能应用

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性能。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19166

    浏览量

    229151
  • 嵌入式
    +关注

    关注

    5068

    文章

    19021

    浏览量

    303318
  • 接口
    +关注

    关注

    33

    文章

    8500

    浏览量

    150839
收藏 人收藏

    评论

    相关推荐

    七大嵌入式GUI盘点

    嵌入式图形用户界面(GUI)是一种为嵌入式系统设计的用户界面,它可以让用户通过图形化的方式与设备
    发表于 09-02 10:58

    嵌入式Linux图形系统(GUI)快速参考手册

    --一个双重协议的(GPL或者商业协议)的项目,建立一个小型的窗口系统,支持嵌入式系统和设备.它提供相应Win32API的窗口管理功能.Fluffy Spider: FancyPan
    发表于 02-14 13:40

    嵌入式多任务GUI实现什么功能

    嵌入式GUI(Graphic Uset Interface)系统就是在嵌入式系统中为特定的硬件设备或环境而设汁的
    发表于 09-24 06:23

    一种嵌入式GUI软件结构实现方案

    综合比较了嵌入式GUI的几种实现方式,结合嵌入式系统的特点,研究了嵌入式
    发表于 02-21 11:36 24次下载

    嵌入式系统图形用户界面(GUI)的设计与研究Design a

    本文提出一种通用的嵌入式系统图形用户界面(GUI)的设计思想和体系结构。其实现方法是以消息驱动机制为核心,采取窗口间的层叠顺序管理和相互剪切
    发表于 05-26 16:33 39次下载

    嵌入式单窗口GUI系统的设计与实现

    图形用户界面(GUI)系统和操作系统(OS)进行类比,提出了一种新的嵌入式GUI
    发表于 07-30 10:00 21次下载

    基于Linux的轻量级嵌入式GUI系统实现

    本文介绍了嵌入式图形用户界面(GUI)的特点、发展概况以及嵌入式图形用户界的实现方法。针对开发自
    发表于 08-31 11:52 23次下载

    嵌入式系统开发之ucos在各种硬件上的GUI实现

    嵌入式系统开发之ucos在各种硬件上的GUI实现.rar 嵌入式用户图形接口uC/
    发表于 03-15 14:10 79次下载

    嵌入式图形系统μc/GUI的移植和开发

    嵌入式图形系统μc/GUI的移植和开发 摘要  嵌入式系统的开发已成为新的行业热点,而
    发表于 12-25 17:55 1142次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>图形</b><b class='flag-5'>系统</b>μc/<b class='flag-5'>GUI</b>的移植和开发

    基于嵌入式Qt的楼宇对讲系统GUI平台设计

    提出了嵌入式楼宇对讲的GUI实现和流程。文章还对嵌入式Linux的移植做了论述,对楼宇对讲系统涉及底层事件和软件构架进行分析,完成了楼宇对讲
    发表于 01-13 15:33 95次下载
    基于<b class='flag-5'>嵌入式</b>Qt的楼宇对讲<b class='flag-5'>系统</b><b class='flag-5'>GUI</b>平台设计

    嵌入式图形用户界面系统设计分析

    为了满足嵌入式系统的界面设计需求,给出了一种图形用户界面系统SKY-GUI的设计思路和其在嵌入式
    发表于 10-16 15:24 1次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>图形</b>用户界面<b class='flag-5'>系统</b>设计分析

    Qt图形编程基础之嵌入式GUI

    分享到:标签:Qt图形编程 嵌入式GUI Linux 操作系统 12.1 嵌入式GUI简介 目前
    发表于 10-18 14:45 0次下载

    ARM嵌入式系统GUI开发研究

    GUI发展至今,已经有了许多的种类,具有了强大的功能嵌入式GUI已经成为一个成功的嵌入式系统
    发表于 12-04 14:19 527次阅读

    探究Microwindows的嵌入式GUI设计

    嵌入式图形用户界面( Embedded GUI) 是嵌入式计算机系统的核心技术之一。本文首先阐述Embedded GUI的应用现状,指出Mi
    的头像 发表于 03-24 10:26 2071次阅读
    探究Microwindows的<b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b>设计

    嵌入式Linux常用GUI系统

    嵌入式Linux常用GUI系统【整理】嵌入式Linux中常用的GUI图形用户界面)
    发表于 11-01 16:31 4次下载
    <b class='flag-5'>嵌入式</b>Linux常用<b class='flag-5'>GUI</b><b class='flag-5'>系统</b>