DirectFB简介以及移植[一]【转】
转自:https://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文件支持。
- #!/bin/bash
- if [ "$1" == "" ]; then
- INSTALL_PATH=`pwd`/_install
- else
- if [ -d $1 ]; then
- INSTALL_PATH=$1
- else
- exit 1
- fi
- fi
- mkdir -p $INSTALL_PATH
- #autoreconf -ivf
- if [ -f config.log ]; then
- make distclean
- fi
- ./configure --prefix=$INSTALL_PATH \
- --host=arm-none-linux-gnueabi \
- --target=arm-none-linux-gnueabi \
- --build=i486-linux-gnu \
- --disable-option-checking \
- --disable-silent-rules \
- --disable-dependency-tracking \
- --enable-maintainer-mode \
- --enable-ld-version-script \
- --enable-shared=yes \
- --enable-static=no \
- --enable-fast-install=yes \
- --disable-libtool-lock \
- --with-gnu-ld
- if [ $? -eq 0 ]; then
- make
- if [ $? -eq 0 ]; then
- make install
- exit 0
- fi
- fi
- exit 1
编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!
- #!/bin/bash
- if [ "$1" == "" ]; then
- INSTALL_PATH=`pwd`/_install
- else
- if [ -d $1 ]; then
- INSTALL_PATH=$1
- else
- exit 1
- fi
- fi
- mkdir -p $INSTALL_PATH
- #autoreconf -ivf
- if [ -f config.log ]; then
- make distclean
- fi
- ./configure --prefix=$INSTALL_PATH \
- --host=arm-none-linux-gnueabi \
- --target=arm-none-linux-gnueabi \
- --build=i486-linux-gnu \
- --disable-option-checking \
- --disable-dependency-tracking \
- --enable-maintainer-mode \
- --disable-arm-neon \
- --enable-shared=yes \
- --enable-static=no \
- --enable-fast-install=yes \
- --disable-libtool-lock \
- --with-gnu-ld
- if [ $? -eq 0 ]; then
- make
- if [ $? -eq 0 ]; then
- make install
- exit 0
- fi
- fi
- exit 1
编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!
4.3:libxml2-2.6.28的编译和配置
libxml2-2.6.28的build.sh的脚本配置如下所示:
- #!/bin/bash
- if [ "$1" == "" ]; then
- INSTALL_PATH=`pwd`/_install
- else
- if [ -d $1 ]; then
- INSTALL_PATH=$1
- else
- exit 1
- fi
- fi
- mkdir -p $INSTALL_PATH
- #autoreconf -ivf
- if [ -f config.log ]; then
- make distclean
- fi
- ./configure --prefix=$INSTALL_PATH \
- --host=arm-none-linux-gnueabi \
- --build=i486-linux-gnu \
- --disable-option-checking \
- --disable-dependency-tracking \
- --enable-maintainer-mode \
- --disable-silent-rules \
- --enable-shared=yes \
- --enable-static=no \
- --enable-fast-install=yes \
- --disable-libtool-lock \
- --disable-documentation \
- --enable-warnings=min \
- --with-sax1=yes \
- --with-catalog=yes \
- --with-gnu-ld
- if [ $? -eq 0 ]; then
- make
- if [ $? -eq 0 ]; then
- make install
- exit 0
- fi
- fi
- exit 1
编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!
4.4:freetype-2.5.0的编译和配置
freetype-2.5.0的build.sh的脚本配置如下所示:
- #!/bin/bash
- if [ "$1" == "" ]; then
- INSTALL_PATH=`pwd`/_install
- else
- if [ -d $1 ]; then
- INSTALL_PATH=$1
- else
- exit 1
- fi
- fi
- mkdir -p $INSTALL_PATH
- #autoreconf -ivf
- if [ -f config.log ]; then
- make distclean
- fi
- ./configure --prefix=$INSTALL_PATH \
- --host=arm-none-linux-gnueabi \
- --build=i486-linux-gnu \
- --disable-option-checking \
- --disable-dependency-tracking \
- --enable-biarch-config \
- --disable-mmap \
- --enable-shared=yes \
- --enable-static=no \
- --enable-fast-install=yes \
- --disable-libtool-lock \
- --without-bzip2 \
- --without-zlib \
- --without-png \
- --with-gnu-ld
- if [ $? -eq 0 ]; then
- make
- if [ $? -eq 0 ]; then
- make install
- exit 0
- fi
- fi
- exit 1
编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!
4.5:fontconfig-2.10.92的编译和配置
fontconfig-2.10.92的build.sh的脚本配置如下所示:
- #!/bin/bash
- if [ "$1" == "" ]; then
- INSTALL_PATH=`pwd`/_install
- else
- if [ -d $1 ]; then
- INSTALL_PATH=$1
- else
- exit 1
- fi
- fi
- mkdir -p $INSTALL_PATH
- export LDFLAGS="-L$INSTALL_PATH/lib"
- export CFLAGS="-I$INSTALL_PATH/include"
- export PKG_CONFIG_PATH="$INSTALL_PATH/lib/pkgconfig"
- export LIBS="-ldl -lpthread -lpng"
- if [ -f config.log ]; then
- make distclean
- fi
- ./configure --prefix=$INSTALL_PATH \
- --host=arm-none-linux-gnueabi \
- --build=i486-linux-gnu \
- --disable-option-checking \
- --disable-dependency-tracking \
- --disable-silent-rules \
- --disable-largefile \
- --enable-shared=yes \
- --enable-static=no \
- --enable-fast-install=yes \
- --disable-libtool-lock \
- --enable-libxml2 \
- --disable-iconv \
- --with-gnu-ld \
- FREETYPE_CFLAGS="-I$INSTALL_PATH/include/freetype2" \
- FREETYPE_LIBS="-L$INSTALL_PATH/lib -lfreetype" \
- LIBXML2_CFLAGS="-I$INSTALL_PATH/include/libxml2" \
- LIBXML2_LIBS="-L$INSTALL_PATH/lib -lxml2"
- if [ $? -eq 0 ]; then
- make
- if [ $? -eq 0 ]; then
- make install
- exit 0
- fi
- fi
- exit 1
编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!
4.6:libsigc++-2.2.8的编译和配置
libsigc++-2.2.8的build.sh的脚本配置如下所示:
- #!/bin/bash
- if [ "$1" == "" ]; then
- INSTALL_PATH=`pwd`/_install
- else
- if [ -d $1 ]; then
- INSTALL_PATH=$1
- else
- exit 1
- fi
- fi
- mkdir -p $INSTALL_PATH
- #autoreconf -ivf
- if [ -f config.log ]; then
- make distclean
- fi
- ./configure --prefix=$INSTALL_PATH \
- --host=arm-none-linux-gnueabi \
- --build=i486-linux-gnu \
- --disable-option-checking \
- --disable-dependency-tracking \
- --enable-maintainer-mode \
- --enable-shared=yes \
- --enable-static=no \
- --enable-fast-install=yes \
- --disable-libtool-lock \
- --enable-ipv6=no \
- --with-gnu-ld
- if [ $? -eq 0 ]; then
- make
- if [ $? -eq 0 ]; then
- make install
- exit 0
- fi
- fi
- exit 1
编译配置成动态库,如上面的build.sh脚本所示,具体的配置可以通过configure --help命令来查看!
五:移植总结
DirectFB的移植留到下一篇来详细介绍,这一篇只详细的介绍DirectFB所需要的第三方库的编译和配置。
转载于:https://www.cnblogs.com/sky-heaven/p/9003439.html
DirectFB简介以及移植[一]【转】相关推荐
- ATECC508A芯片开发笔记(二):开发准备之 CryptoAuthLib 库简介与移植
目录 ATECC508A芯片开发笔记(二):开发准备之 CryptoAuthLib 库简介与移植 Atmel两个官方lib介绍 一.CryptoAuthLib简介 Lib中最主要的三种对象类型: 二. ...
- 爱联模组接入华为hilink总结——开发简介和移植(一)
下面我讲述的爱联固件版本都是9.0.1.131前的,131后的版本都是带有PIN码的连接的,后面也都会使用带pin码的,为啥我现在不用,因为华为APP(在2020/2/14这个时间点)还没有上线带PI ...
- SFUD简介和移植感受
一.驱动层:SFUD(Serial Flash Universal Driver) 是一款开源的串行 SPI Flash 通用驱动库 二.中间层:FAL(FLASH ABSTRACTION LAYER ...
- DirectFB的架构介绍
作者:EasyWave 时间:2014.09.13 类别:开源GUI系统-DirectFB简介 声明:转 ...
- SimpleFOC移植STM32(二)—— 开环控制
目录 注意事项 一.硬件介绍 1.1.硬件准备 1.1.1.SimpleMotor方案 1.1.2.SimpleFOCShield V2.0.3方案 1.2.硬件连接 1.2.1.原理图 1.2.2. ...
- SimpleFOC移植STM32(六)—— 双电机控制和力矩反馈
目录 一.说明 二.硬件介绍 2.1.原理图 2.2.准备清单 2.3.接线 三.程序演示 3.1.设置参数 3.2.编译下载 3.3.根据设置的控制模式操作 四.双电机控制总结 五.力矩反馈 5.1 ...
- ATECC508A芯片开发笔记(十一):NXP 平台移植ATECCx08 CryptoAuthLib库(I2C)
目录 ATECC508A芯片开发笔记(十一):NXP 平台移植x08库(I2C) 一.CryptoAuthLib 二.Nxp RT10xx平台上移植CryptoAuthLib 2.1.在官网下载最新的 ...
- 移植uCOS-II到STM32F103平台攻略
文章目录 移植uCOS-II到STM32F103平台 感谢声明 移植前准备工作 移植过程 下载到开发板操作 移植uCOS-II到STM32F103平台 感谢声明 首先感谢wang328452854博主 ...
- 移植FreeModbus
freeemodbus百度百科(介绍比较详细) https://baike.baidu.com/item/freemodbus/7566841?fr=aladdin STMC2CubeMX | STM ...
最新文章
- 环形动画加载视图AnimatedCircleLoadingView
- 检测linux服务器的使用情况,如何在Linux服务器中检查内存使用情况
- Java——操作集合的工具类:Collections
- 昨晚的我是歌手,人工智能也掺了一脚
- 2015-ResNet讲解
- IT项目管理之系统规划
- 【ArcGIS|空间分析|网络分析】6 创建路径分析模型
- 拓端tecdat|R语言逻辑回归(对数几率回归,Logistic)分析研究生录取数据实例
- ES6 json转map map转json
- S7-200作MODBUS RTU主站和从站例程教学
- html判断display,display与show的区别
- 代码设计时应遵循哪些原则
- Java常见问题之Data too long for column 'orResponse' at row 1
- 联发科MT6737和MT6735芯片组有什么差异?MT6737和MT6735芯片组资料分享
- 如何做公司网站设计,有哪些步骤?
- 赛格威机器人路萌中国首秀 开发者计划今年将在国内落地
- 系统cpu主频查看设置
- 学校计算机社团目标,电脑社团活动计划
- 开学!可怕的日本,无情到令人感到恐惧!
- 中公教育 java讲师_【java讲师职责】中公教育集团2021年java讲师工作内容-看准网...
热门文章
- mule esb_Mule ESB –入门
- iOS UISegmentedControl
- UI设计入门:解析设计标注规范和图标规范
- 区块链支付平台技术的应用
- AI和机器学习对云计算的安全有何影响?
- 《数位板这样玩——Photoshop+Painter数码手绘必修课(第2版)》目录—导读
- 《人月神话》读书笔记之第1章焦油坑
- Windows10搭建PHP7开发环境
- jQuery开发之windows边栏小工具开发(Gadget development)- wi...
- 【字符串全排列】LeetCode 567. Permutation in String