本文转载自‘:http://blog.csdn.net/wavemcu/article/details/39251805

版权声明:本文为博主原创文章,未经博主允许不得转载。

***************************************************************************************************************************
作者:EasyWave                                       时间:2014.09.13

类别:开源GUI系统-DirectFB简介         声明:转载,请保留链接

注意:如有错误,欢迎指正。这些是我学习的日志文章......

***************************************************************************************************************************

一:DirectFB简介

DirectFB是一个轻量级的提供硬件图形加速,输入设备处理和抽象的图形库,它集成了支持半透明的视窗系统以及在LinuxFramebuffer驱动之上的多层显示。它是一个用软件封装当前硬件无法支持的图形算法来完成硬件加速的层。DirectFB是为嵌入式系统而设计。它是以最小的资源开销来实现最高的硬件加速性能。

DirectFB是图形API存在于Frame Buffer层之上与高级图形管理层如GTK+等之下的。它可以以很小的系统资源占用来提供图形硬件加速功能,提供类如多路a通道渲染模型等高级图像操作。它不修改Linux内核,除了标准C库没有其他库的依赖。应用在了基于Linux系统的DTV显示系统的研发和其他有关Linux显示界面的项目上。支持市面上绝大多数显示卡,支持键盘、鼠标、遥控器、游戏手柄、触摸屏等输入设备。支持JPEG、PNG、GIF、mpeg1/2、AVI、MOV、Flash、Video4Linux、DirectFB bitmap font和TrueType等音视频文件和字体。

二:DirectFB在系统的位置
      从GUI整个系统架构来讲,对于一般的MMP,DTV和STB来说,下面图中是比较经典的结构。 DirectFB都处于QT,GTK+这样的高级GUI框架的下面,Linux系统驱动的上面。如下图所示:

从功能上面来讲,下面图中比较形象的说明了DirectFB的主要作用:图形,文字的处理(DirectFB把TS经过Decoder处理之后的码流,再加上图形和文字,一起传给视频的芯片),如下图所示:

三:DirectFB GUI的架构

对于上层的GUI高级框架来说,DirectFB是透明的,下图是一个更加细化的DirectFB的结构图:

对于底层的驱动来说,DirectFB里面负责和硬件打交道的显卡的驱动(gfxdriver)和显示系统(system),这里面gfxdriver是和各个硬件平台相关的,有可能需要自己写。 为了更易于理解DirectFB,需要先介绍几个DirectFB里面的概念:

  • Layers:代表互相独立的图形缓存。大多数嵌入式设备都有多个layer。多个layer根据对应的alpha值混合 在一起,从而显示出来。
  • Surface:代表一块预留的内存,来保存像素数据。DirectFB中的Drawing,Bilitting操作就是基于 surface的。Surface的内存根据设定,可以从系统中分配,也可以从显卡的内存中分配。
  • Primary Surface:代表一个特殊layer的特殊surface。如果primary surface是单缓冲的,任何对于 primary surface的操作都会直接反应到显示屏上。
  • Subsurface:是一个surfac的子集,但是自身并不占有任何内存。
  • Window/Windowstack:控制一个layer中的surface该显示什么。Window属于某个背景可以设定的layer。 每个window有自己的surface,window用这个surface来组合图像。

比如说下图中有三个Layer,最下面的Layer是一幅背景图,中间的Layer是一个透明的带有一个“igel”的Layer,最上面是一个透明的带有subtitle的Layer,最后我们在显示器中看到的就是各个Layer的混合。

再比如说下面这幅图,Lower Layer是一个全屏模式的Layer,它的背景图片渲染在自己的SurFace上面。Video area是一个SurFace,用来显示video。Upper Layer通过window stack/window 来显示应用程序的内容,而且Upper Layer是一个透明的Layer,这样混合之后,可以透过上面的Layer看到下面的video。

四:DirectFB的移植

如果要移植DirectFB需要用到以下的第三方库,如下图所示:

DirectFB需要用到第三方库简介:

  • fontconfig-2.10.92:管理系统安装的字体,根据应用程序的字体配置,match(匹配)一种字体,填充match字体的各种属性。
  • freetype-2.5.0:FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。
  • jpeg-8d:jpeg开源库
  • libpng-1.5.8:PNG 库是用来创立和操作PNG 格式的图像文件,PNG 格式是设计来替代GIF,他对于更小范围的TIFF(标记图象文件格式)来说,有了非常多的进步和拓展并且减少了关于专利权的麻烦。
  • libsigc++-2.2.8:libsigc++是实现类型安全回调的一个C++模板库。libsigc++提供了信号(signal)和槽(slot)的概念,实现了信号机制。slot对应一个回调函数,信号(signal)与槽(slot)相关联(attach),当一个信号被发射(emit)时,相对应的槽被调用。
  • libxml2-2.6.28:包含了对 XPath 表达式使用的支持来检索匹配一个指定准则的结点集。libxml2软件包提供允许用户操控XML文件的函数库,包含有读、修改和写XML和HTML文件支持。
4.1: jpeg-8d的编译配置
jpeg-8d的build.sh的脚本配置如下所示:
  1. #!/bin/bash
  2. if [ "$1" == "" ]; then
  3. INSTALL_PATH=`pwd`/_install
  4. else
  5. if [ -d $1 ]; then
  6. INSTALL_PATH=$1
  7. else
  8. exit 1
  9. fi
  10. fi
  11. mkdir -p $INSTALL_PATH
  12. #autoreconf -ivf
  13. if [ -f config.log ]; then
  14. make distclean
  15. fi
  16. ./configure --prefix=$INSTALL_PATH \
  17. --host=arm-none-linux-gnueabi \
  18. --target=arm-none-linux-gnueabi \
  19. --build=i486-linux-gnu \
  20. --disable-option-checking \
  21. --disable-silent-rules \
  22. --disable-dependency-tracking \
  23. --enable-maintainer-mode \
  24. --enable-ld-version-script \
  25. --enable-shared=yes \
  26. --enable-static=no \
  27. --enable-fast-install=yes \
  28. --disable-libtool-lock \
  29. --with-gnu-ld
  30. if [ $? -eq 0 ]; then
  31. make
  32. if [ $? -eq 0 ]; then
  33. make install
  34. exit 0
  35. fi
  36. fi
  37. exit 1

编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!

 
4.2:libpng-1.5.8的编译和配置
libpng-1.5.8的build.sh的脚本配置如下所示:
  1. #!/bin/bash
  2. if [ "$1" == "" ]; then
  3. INSTALL_PATH=`pwd`/_install
  4. else
  5. if [ -d $1 ]; then
  6. INSTALL_PATH=$1
  7. else
  8. exit 1
  9. fi
  10. fi
  11. mkdir -p $INSTALL_PATH
  12. #autoreconf -ivf
  13. if [ -f config.log ]; then
  14. make distclean
  15. fi
  16. ./configure --prefix=$INSTALL_PATH \
  17. --host=arm-none-linux-gnueabi \
  18. --target=arm-none-linux-gnueabi \
  19. --build=i486-linux-gnu \
  20. --disable-option-checking \
  21. --disable-dependency-tracking \
  22. --enable-maintainer-mode \
  23. --disable-arm-neon \
  24. --enable-shared=yes \
  25. --enable-static=no \
  26. --enable-fast-install=yes \
  27. --disable-libtool-lock \
  28. --with-gnu-ld
  29. if [ $? -eq 0 ]; then
  30. make
  31. if [ $? -eq 0 ]; then
  32. make install
  33. exit 0
  34. fi
  35. fi
  36. exit 1

编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!

4.3:libxml2-2.6.28的编译和配置

libxml2-2.6.28的build.sh的脚本配置如下所示:

  1. #!/bin/bash
  2. if [ "$1" == "" ]; then
  3. INSTALL_PATH=`pwd`/_install
  4. else
  5. if [ -d $1 ]; then
  6. INSTALL_PATH=$1
  7. else
  8. exit 1
  9. fi
  10. fi
  11. mkdir -p $INSTALL_PATH
  12. #autoreconf -ivf
  13. if [ -f config.log ]; then
  14. make distclean
  15. fi
  16. ./configure --prefix=$INSTALL_PATH \
  17. --host=arm-none-linux-gnueabi \
  18. --build=i486-linux-gnu \
  19. --disable-option-checking \
  20. --disable-dependency-tracking \
  21. --enable-maintainer-mode \
  22. --disable-silent-rules \
  23. --enable-shared=yes \
  24. --enable-static=no \
  25. --enable-fast-install=yes \
  26. --disable-libtool-lock \
  27. --disable-documentation \
  28. --enable-warnings=min \
  29. --with-sax1=yes \
  30. --with-catalog=yes \
  31. --with-gnu-ld
  32. if [ $? -eq 0 ]; then
  33. make
  34. if [ $? -eq 0 ]; then
  35. make install
  36. exit 0
  37. fi
  38. fi
  39. exit 1

编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!

4.4:freetype-2.5.0的编译和配置

freetype-2.5.0的build.sh的脚本配置如下所示:

  1. #!/bin/bash
  2. if [ "$1" == "" ]; then
  3. INSTALL_PATH=`pwd`/_install
  4. else
  5. if [ -d $1 ]; then
  6. INSTALL_PATH=$1
  7. else
  8. exit 1
  9. fi
  10. fi
  11. mkdir -p $INSTALL_PATH
  12. #autoreconf -ivf
  13. if [ -f config.log ]; then
  14. make distclean
  15. fi
  16. ./configure --prefix=$INSTALL_PATH \
  17. --host=arm-none-linux-gnueabi \
  18. --build=i486-linux-gnu \
  19. --disable-option-checking \
  20. --disable-dependency-tracking \
  21. --enable-biarch-config \
  22. --disable-mmap \
  23. --enable-shared=yes \
  24. --enable-static=no \
  25. --enable-fast-install=yes \
  26. --disable-libtool-lock \
  27. --without-bzip2 \
  28. --without-zlib \
  29. --without-png \
  30. --with-gnu-ld
  31. if [ $? -eq 0 ]; then
  32. make
  33. if [ $? -eq 0 ]; then
  34. make install
  35. exit 0
  36. fi
  37. fi
  38. exit 1

编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!

4.5:fontconfig-2.10.92的编译和配置

fontconfig-2.10.92的build.sh的脚本配置如下所示:

  1. #!/bin/bash
  2. if [ "$1" == "" ]; then
  3. INSTALL_PATH=`pwd`/_install
  4. else
  5. if [ -d $1 ]; then
  6. INSTALL_PATH=$1
  7. else
  8. exit 1
  9. fi
  10. fi
  11. mkdir -p $INSTALL_PATH
  12. export LDFLAGS="-L$INSTALL_PATH/lib"
  13. export CFLAGS="-I$INSTALL_PATH/include"
  14. export PKG_CONFIG_PATH="$INSTALL_PATH/lib/pkgconfig"
  15. export LIBS="-ldl -lpthread -lpng"
  16. if [ -f config.log ]; then
  17. make distclean
  18. fi
  19. ./configure --prefix=$INSTALL_PATH \
  20. --host=arm-none-linux-gnueabi \
  21. --build=i486-linux-gnu \
  22. --disable-option-checking \
  23. --disable-dependency-tracking \
  24. --disable-silent-rules \
  25. --disable-largefile \
  26. --enable-shared=yes \
  27. --enable-static=no \
  28. --enable-fast-install=yes \
  29. --disable-libtool-lock \
  30. --enable-libxml2 \
  31. --disable-iconv \
  32. --with-gnu-ld \
  33. FREETYPE_CFLAGS="-I$INSTALL_PATH/include/freetype2" \
  34. FREETYPE_LIBS="-L$INSTALL_PATH/lib -lfreetype" \
  35. LIBXML2_CFLAGS="-I$INSTALL_PATH/include/libxml2" \
  36. LIBXML2_LIBS="-L$INSTALL_PATH/lib -lxml2"
  37. if [ $? -eq 0 ]; then
  38. make
  39. if [ $? -eq 0 ]; then
  40. make install
  41. exit 0
  42. fi
  43. fi
  44. exit 1

编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!

4.6:libsigc++-2.2.8的编译和配置

libsigc++-2.2.8的build.sh的脚本配置如下所示:

  1. #!/bin/bash
  2. if [ "$1" == "" ]; then
  3. INSTALL_PATH=`pwd`/_install
  4. else
  5. if [ -d $1 ]; then
  6. INSTALL_PATH=$1
  7. else
  8. exit 1
  9. fi
  10. fi
  11. mkdir -p $INSTALL_PATH
  12. #autoreconf -ivf
  13. if [ -f config.log ]; then
  14. make distclean
  15. fi
  16. ./configure --prefix=$INSTALL_PATH \
  17. --host=arm-none-linux-gnueabi \
  18. --build=i486-linux-gnu \
  19. --disable-option-checking \
  20. --disable-dependency-tracking \
  21. --enable-maintainer-mode \
  22. --enable-shared=yes \
  23. --enable-static=no \
  24. --enable-fast-install=yes \
  25. --disable-libtool-lock \
  26. --enable-ipv6=no \
  27. --with-gnu-ld
  28. if [ $? -eq 0 ]; then
  29. make
  30. if [ $? -eq 0 ]; then
  31. make install
  32. exit 0
  33. fi
  34. fi
  35. exit 1

编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!

五:移植总结

DirectFB的移植留到下一篇来详细介绍,这一篇只详细的介绍DirectFB所需要的第三方库的编译和配置。

DirectFB简介以及移植[一]的更多相关文章

  1. DirectFB简介以及移植[一]【转】

    转自:https://blog.csdn.net/wavemcu/article/details/39251805 ****************************************** ...

  2. DirectFB学习之移植到nuc972平台 标签: DirectFBlinux图形加速驱动【转】

    本文转载自:http://blog.csdn.net/jxgz_leo/article/details/70137304 [nuc972开发板购买地址,感谢支持](https://shop102749 ...

  3. uCOS-II简介及移植uCOS-II到STM32F103平台详细步骤

    1.参考博客:https://blog.csdn.net/wang328452854/article/details/78486458 2.uCOS(也有人叫uC/OS)由美国人 Jean Labro ...

  4. DirectFB的架构介绍

    **************************************************************************************************** ...

  5. Qt在各平台上的搭建qt-everywhere

    Qt for windows7-64bit 在电脑上安装mingw(搜索mingw for windows),将C:\MinGW\bin添加进环境变量,打开命令行输入gcc --version和g++ ...

  6. 基于Zynq平台的EtherCAT主站方案实现

    作者:陈秋苑 谢晓锋 陈海焕 广州虹科电子科技有限公司 摘 要:EtherCAT 是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发.EtherCAT 具有高性能.低成本.容易使用等特点,目前在 ...

  7. Qt在各平台上的搭建qt-everywhere(Qt for windows7-64bit, Ubuntu 12.04-32bit, 嵌入式x86平台, 嵌入式arm平台)

    下载地址:http://download.qt.io/ 当进入解压好的源码包后,使用./configure –help命令,可以获得相应帮助,前面是*号的表示默认参数. +号表示该功能要求被评估,评估 ...

  8. Linux内核调试的方式以及工具集锦【转】

    转自:https://blog.csdn.net/gatieme/article/details/68948080 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...

  9. modbus汇总

    ModBus协议简介及移植到STM32单片机 https://blog.csdn.net/silent123go/article/details/92440091 Modbus测试工具ModbusPo ...

随机推荐

  1. 淘宝ip地址库接口会导致TTFB时间变长,网站打开速度变慢

    前一段时间闲来无事发现别人的网站上有显示当前用户城市的功能,就自己也整了一个 这是淘宝ip地址库调用方法 然后问题就出现了,网站打开速度慢的要死 用F12发现是TTFB太慢,然后百度了,发现了问题的原 ...

  2. nodejs全局安装路径的位置

    一般nodejs安装在默认的C盘,如果不知道安装在哪里,可以打开控制面板-系统和安全-系统-高级配置中找到 所谓全局安装: 是指安装在node中node_module的根目录里,可以在电脑的任何位置调 ...

  3. Cannot resolve symbol R

    最近遇到一个奇怪的问题,在Android build 完版本后,将app 删除后,直接出现 Cannot resolve symbol R , Clean. ReBuild 等试过都没效果. 最终解决 ...

  4. C# 学习——静态(第四天)

    一.命名空间 类似于文件夹,而类就是文件夹中的文件: 作用:明确的指向我们所需要的类的 所在的位置: 统一命名空间下,类名不能重复. 二.类 概念:具有相同属性和功能的对象的抽象的集合. 三.静态与实 ...

  5. [Windows Server 2012] 安装PHP+MySQL方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:PHP+MyS ...

  6. Java_Web三大框架之Hibernate+jsp+selvect+HQL注册用户

    Hibernate比SQL语句简单多了,代码冗余少,切方便简洁明了.下面用Hibernate+jsp+selvect+HQL来实现注册用户. 第一步:编写用户实体类和Users2.hbm.xml映射. ...

  7. 使用super实现类的继承

    查看一个类继承了哪些类可以用__bases__方法查看 class People:   def __init__(self,name,age,sex):  self.name=name self.ag ...

  8. 2015.12.25-2016.01.01 大论文迭代B

    大论文B轮迭代,稍重前端 12.25 周五,完善摘要 12.26 周六,完善第一章 12.27 周天,完善第二章 12.28 周一,完善第三章 12.29 周二,完善第四章 12.30 周三,完善第五 ...

  9. rsync 3.1.3

    rsyncd.conf 2018年1月28日 rsyncd配置(5) 2018年1月28日 姓名 rsyncd.conf配置rsync守护进程的方式在file for 概要 rsyncd.conf 描 ...

  10. js的基础运用

    总结: 1.定义:分为隐式定义和显式定义可以先定义后赋值. 2.+:当两边都是数值则运行加法运算,若一遍是字符型则进行拼接. 3.数值变字符:数值变量.toString()方法. 字符变数值:通过加一 ...