一. DirectFB簡介
DirectFB是一個輕量級的提供硬件圖形加速,輸入設備處理和抽象的圖形庫,它集成了支持半透明的視窗系統以及在LinuxFramebuffer驅動之上的多層顯示。它是一個用軟件封裝當前硬件無法支持的圖形算法來完成硬件加速的層。DirectFB是為嵌入式系統而設計。它是以最小的資源開銷來實現最高的硬件加速性能。
二. DirectFB移植准備
主機環境:32位Ubuntu 10.10
交叉編譯工具:arm-linux-gcc-4.5.1
下載地址:http://code.google.com/p/mini6410-debian/downloads/detail?name=arm-linux-gcc-4.5.1-v6-vfp-20101103.tar.gz&can=2&q=
DirectFB版本:DirectFB-1.5.0.tar.gz
下載地址:http://www.directfb.org/index.php?path=Main%2FDownloads
DirectFB測試用例版本:DirectFB-examples-1.5.2.tar.gz
下載地址:http://www.directfb.org/index.php?path=Main%2FDownloads&page=1
DirectFB依賴庫:freetype-2.4.4.tar.gz,jpegsrc.v8c.tar.gz,libpng-1.2.44.tar.gz,zlib-1.2.5.tar.gz
freetype-2.4.4.tar.gz、jpegsrc.v8c.tar.gz、libpng-1.2.44.tar.gz、zlib-1.2.5.tar.gz 下載地址:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /pub/2011/09/03/DirectFB-1.5.0移植 支持3D硬件支持/
三. DirectFB移植步驟
環境變量配置:
export PREFIX=/usr
export DEST_DIR=/home //以上兩個環境變量的是移植後庫生成的位置,最好是把以後有提到的庫都存放到/home目錄下
export PATH=$PATH:/home/opt/FriendlyARM/toolschain/4.5.1/bin
export CC=arm-none-linux-gnueabi-gcc
export LDFLAGS=-L$DEST_DIR$PREFIX/lib
export CFLAGS="-g -I$DEST_DIR$PREFIX/include"
export PKG_CONFIG_PATH=$DEST_DIR$PREFIX/lib/pkgconfig
export FREETYPE_CFLAGS="-I${DEST_DIR}${PREFIX}/include/freetype2 -I${DEST_DIR}${PREFIX}/include"
export PKG_CONFIG_PATH=${DEST_DIR}${PREFIX}/lib/pkgconfig
export PKG_CONFIG_LIBDIR=$PKG_CONFIG_PATH
export CFLAGS="-I${DEST_DIR}${PREFIX}/include/"
export LDFLAGS="-L${DEST_DIR}${PREFIX}/lib"
export LIBPNG_CFLAGS="-I${DEST_DIR}${PREFIX}/include/libpng12"
export LIBPNG_LIBS="-L${DEST_DIR}${PREFIX}/lib -lpng12"
export FREETYPE_CFLAGS="-I${DEST_DIR}${PREFIX}/include/freetype2 -I${DEST_DIR}${PREFIX}/include"
export DIRECTFB_CFLAGS="-I${DEST_DIR}${PREFIX}/include/directfb -I${DEST_DIR}${PREFIX}/include"
export FREETYPE_LIBS="-L${DEST_DIR}${PREFIX}/lib -lfreetype"
移植步驟:
1.
#Make zlib
cd $ZLIB
./configure --prefix=$PREFIX
make
make DESTDIR=$DEST_DIR install
2.
cd $LIBPNG
./configure --prefix=$PREFIX --host=arm-none-linux-gnueabi
make
make DESTDIR=$DEST_DIR install
3.
cd $LIBJPEG
./configure --prefix=$PREFIX --host=arm-none-linux-gnueabi
make
make DESTDIR=$DEST_DIR install
4.
cd $FREETYPE
./configure --prefix=$PREFIX --host=arm-none-linux-gnueabi
make
make DESTDIR=$DEST_DIR install
5.
cd $DFB
./configure --host=arm-none-linux-gnueabi --prefix=$PREFIX --disable-x11 --with-gfxdrivers=none --enable-jpeg --enable-png --enable-freetype --with-inputdrivers=linuxinput
make
make DESTDIR=$DEST_DIR install
錯誤及解決辦法:
1. ../../lib/direct/atomic.h:188:70: error: expected ',' or '...' before 'new'
解決辦法:進入到atomic.h文件,把關鍵字 new 改成new_1等任意不是關鍵詞。
2. ../../lib/direct/serial.h:112:14: error: invalid conversion from 'void*' to 'volatile int*'
../../lib/direct/serial.h:112:14: error: initializing argument 2 of 'int _D__atomic_add_return(int, volatile int*)'
解決辦法:進入到atomic.h文件,把有這方面的調動, 通過強制轉換把(void *) -> (volatile int *)
6.
cd $DFBEXAMPLE
./configure --prefix=$PREFIX --host=arm-none-linux-gnueabi
make
make DESTDIR=$DEST_DIR install
這樣就完成了基本的DirectFB的移植,把/home/usr目錄下的全部文件拷貝到開發板的/usr下,運行測試用例就知道成不成功了。
四. DirectFB的硬件加速配置
環境說明:這麼加速你有移植成功了DirectFB,且你的開發板支持硬件加速功能。不同的硬件平台有不同的配置,我這裡就說說我的配置。這裡所說的目錄都是/home/usr下。
步驟:
編譯你的硬件加速模塊,會生成相應的庫文件。把生成的所有庫放到/home/usr/lib下。
在/home/usr/lib/directfb-1.5-0目錄下,創建目錄gfxdrivers,並把編譯硬件模塊的有關DirectFB的庫放到此目錄下,我這裡的庫文件是libdirectfb_gal.so.
在/home/usr目錄下,創建目錄etc
進入到/home/usr目錄下,在終端輸入:no-software>>directfbrc
完成以上步驟後DirectFB就可以支持相應的硬件加速了。