标签:style blog http color io os 使用 ar strong
***************************************************************************************************************************
作者: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里面的概念:
比如说下图中有三个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需要用到第三方库简介:
#!/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
#!/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命令来查看!
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所需要的第三方库的编译和配置。
标签:style blog http color io os 使用 ar strong
原文地址:http://blog.csdn.net/wavemcu/article/details/39251805