DirectFB+GTK交叉編譯記錄


一、已解決問題記錄


1. 使用32位Linux主機編譯,否則有些軟件包中使用Python時會有錯誤;

2. 設置的DirectFB的安裝路徑是根文件系統中的/usr/directfb,那麼在目標系統中也必須保證DirectFB是在這樣的一個目錄中。因爲DirectFB編譯時已經把這個目錄編譯到程序中,無法後期設置,所以可以把所有軟件包都安裝在這個目錄。即設置的安裝路徑必須和目標機中一致

3. 如果未支持fusion,那麼編譯directfb時,“./configure”別添加“--enable-debug"選項,否則會報fusion相關錯誤。


二、編譯與運行過程記錄


1. 宿主機端

 

主機根據文章:《基於Ubuntu系統的LXDE桌面安裝與配置 》

## 主機上工作 ##
## 安裝相關軟件包 ##
apt-get install autoconf automake gettext libglib2.0-dev

## 安裝指定版本的libtool ##
# 1. 首先移除系統中的libtool: apt-get remove libtool (一般已安裝的版本偏高,所以移除,未安裝略去這一步)
# 2. “ctrl + alt + t”新打開一個終端(防止安裝在前面指定的“$PREFIX”衝突)。
# 3. 命令行
tar zxvf libtool-2.2.6a.tar.gz 
cd libtool-2.2.6
./configure
make; make install
cd ../


# Environment Variables
PREFIX=/usr/directfb
export LDFLAGS=-L$PREFIX/lib
export CFLAGS="-g -I$PREFIX/include"
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig


# tslib
# 友善之臂是一線觸摸 需修改硬件

# glib
tar xjf glib-2.12.13.tar.bz2 -C ./
cd glib-2.12.13

echo ac_cv_type_long_long=yes>arm-linux.cache
echo glib_cv_stack_grows=no>>arm-linux.cache
echo glib_cv_uscore=no>>arm-linux.cache
echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache
CC=arm-linux-gcc ./configure --host=arm-linux --build=i686-pc-linux --prefix=$PREFIX --cache-file=arm-linux.cache
make; make install

cd ../


# atk
tar xjf atk-1.19.3.tar.bz2 -C ./
cd atk-1.19.3

./configure --host=arm-linux --prefix=$PREFIX
make; make install

cd ../


# jpeg-6b !!! 1 !!!
tar xvzf jpegsrc.v6b.tar.gz -C ./
cd jpeg-6b

cp /usr/local/share/libtool/config/config.sub .
cp /usr/local/share/libtool/config/config.guess .

./configure CC=arm-linux-gcc --prefix=$PREFIX --enable-shared --enable-static

gedit Makefile &

# 修改生成的Makefile文件:
# library (.a) file creation commandmake
AR= ar rc 改成 AR= arm-linux-ar rc (同上)
# second step in .a creation (use "touch" if not needed)
AR2= ranlib 改成 AR2=arm-linux-ranlib (同上)

mkdir $PREFIX/man
mkdir $PREFIX/man/man1
make; make install -lib

cd ../


# zlib
tar xjf zlib-1.2.3.tar.bz2 -C ./
cd zlib-1.2.3

CC=arm-linux-gcc ./configure --prefix=$PREFIX --shared
make; make install

cd ../


# libpng
tar xjf libpng-1.2.19.tar.bz2 -C ./
cd libpng-1.2.19

./configure --host=arm-linux --prefix=$PREFIX
make; make install

cd ../


# expat
tar xvzf expat-2.0.1.tar.gz -C ./
cd expat-2.0.1

./configure --host=arm-linux --prefix=$PREFIX
make; make install

cd ../


# freetype
tar xjf freetype-2.3.5.tar.bz2 -C ./
cd freetype-2.3.5

./configure --host=arm-linux --prefix=$PREFIX
make; make install

cd ../


# libxml
tar xvzf libxml2-2.6.29.tar.gz -C ./
cd libxml2-2.6.29

./configure --host=arm-linux --prefix=$PREFIX
make; make install

cd ../


# fontconfig
tar xvzf fontconfig-2.4.2.tar.gz -C ./
cd fontconfig-2.4.2

export LIBXML2_CFLAGS=-I$PREFIX/include/libxml2
export LIBXML2_LIBS="-L$PREFIX/lib -lxml2"
./configure --host=arm-linux --prefix=$PREFIX --with-freetype-config=$PREFIX/bin/freetype-config --with-arch=arm
make; make install

cd ../


# tiff
tar xvzf tiff-3.7.4.tar.gz -C ./
cd tiff-3.7.4

./configure --host=arm-linux --prefix=$PREFIX --enable-shared
make; make install

cd ../


# DirectFB
tar xvzf DirectFB-1.1.1.tar.gz -C ./
cd DirectFB-1.1.1

./configure --host=arm-linux --target=arm-linux --prefix=$PREFIX --with-gfxdrivers=none --with-inputdrivers=all --enable-png --enable-jpeg --enable-zlib --enable-sdl=no --enable-gif=no --sysconfdir=/etc --enable-fbdev --disable-x11 --enable-multi=no

make; make install

cd ../


# cairo
tar xvzf cairo-1.4.10.tar.gz -C ./
cd cairo-1.4.10

./configure --host=arm-linux --prefix=$PREFIX --without-x --disable-xlib --disable-xlib-xrender --enable-directfb --enable-freetype --disable-win32 --enable-pdf --enable-ps --disable-svg --enable-png
make; make install

cd ../


# Pango !!! 2 !!!
tar xjf pango-1.16.4.tar.bz2  -C ./
cd pango-1.16.4

gedit configure &

# 修改configure文件,將下面一些參數改成true   @line 21284
have_cairo=true
have_cairo_png=true
have_cairo_ps=true
have_cairo_pdf=true
have_cairo_freetype=true

export FREETYPE_CONFIG=$PREFIX/bin/freetype-config

./configure --host=arm-linux --prefix=$PREFIX --enable-cairo --without-x
make; make install

cd ../


# gtk
tar xjf gtk+2.10.14.tar.bz2 -C ./
cd gtk+-2.10.14/

apt-get install libgdk-pixbuf2-dev

export LDFLAGS="-L$PREFIX/lib -Wl,-rpath,$PREFIX/lib"
export CPPFLAGS="-I$PREFIX/include"

./configure --host=arm-linux --prefix=$PREFIX --with-gdktarget=directfb --without-x --without-libtiff

make; make install

cd ../

2. 文件系統目錄

mkdir rootfs_directfb/usr/directfb/

cp /usr/directfb/* rootfs_directfb/usr/directfb/ -rfd
sync

# 複製字庫
cp /usr/share/fonts/ rootfs_directfb/usr/share/ -rfd
sync
rm rootfs_directfb/usr/share/X11 -rf
sync

rm rootfs_directfb.img -rf
mkyaffs2image-128M rootfs_directfb/ rootfs_directfb.img
cp rootfs_directfb.img /mnt/share/
sync

3. 目標機端

## 目標板上 ##
export PREFIX=/usr/directfb
export PATH=$PATH:$PREFIX/bin

mkdir $PREFIX/etc/pango/
$PREFIX/bin/pango-querymodules > $PREFIX/etc/pango/pango.modules

mkdir $PREFIX/etc/gtk-2.0/
$PREFIX/bin/gdk-pixbuf-query-loaders > $PREFIX/etc/gtk-2.0/gdk-pixbuf.loaders

gtk-demo

終端上打印信息

[root@FriendlyARM /]# gtk-demo 

     =======================|  DirectFB 1.1.1  |=======================
          (c) 2001-2007  The DirectFB Organization (directfb.org)
          (c) 2000-2004  Convergence (integrated media) GmbH
        ------------------------------------------------------------

(*) DirectFB/Core: Single Application Core. (2014-02-28 14:39) 
(*) Direct/Thread: Running 'VT Switcher' (CRITICAL, 1136)...
(*) Direct/Thread: Running 'Keyboard Input' (INPUT, 1137)...
(*) DirectFB/Input: Keyboard 0.9 (directfb.org)
(*) Direct/Thread: Running 'PS/2 Input' (INPUT, 1138)...
(*) DirectFB/Input: IMPS/2 Mouse (1) 1.0 (directfb.org)
(*) Direct/Thread: Running 'PS/2 Input' (INPUT, 1139)...
(*) DirectFB/Input: IMPS/2 Mouse (2) 1.0 (directfb.org)
(*) Direct/Thread: Running 'Linux Input' (INPUT, 1140)...
(*) DirectFB/Input: fa_ts_input (1) 0.1 (directfb.org)
(*) Direct/Thread: Running 'Linux Input' (INPUT, 1141)...
(*) DirectFB/Input: mma7660 (2) 0.1 (directfb.org)
(!) Direct/Modules: Could not open module directory `/usr/directfb/lib/directfb-1.1-0/gfxdrivers'!
    --> No such file or directory
(*) DirectFB/Graphics: Generic Software Rasterizer 0.6 (directfb.org)
(*) DirectFB/Core/WM: Default 0.3 (directfb.org)
(*) FBDev/Mode: Testing 800x480 RGB32
(*) FBDev/Mode: Preparing switch to 800x480 RGB32
(*) FBDev/Mode: Testing 800x480 RGB32
(*) FBDev/Mode: Preparing switch to 800x480 RGB32
(*) FBDev/Mode: Testing 800x480 RGB32
(*) FBDev/Mode: Preparing switch to 800x480 RGB32
(*) FBDev/Mode: Testing 800x480 RGB32
(*) FBDev/Mode: Preparing switch to 800x480 RGB32
(*) FBDev/Mode: Testing 800x480 RGB32
(*) FBDev/Mode: Preparing switch to 800x480 RGB32
(*) FBDev/Surface: Allocated 800x480 32bit RGB32 buffer at offset 0 and pitch 3200.
(*) FBDev/Mode: (Post)Setting 800x480 RGB32
(*) FBDev/Mode: Switched to 800x480 (800x480) at 32 bit RGB32 (wanted RGB32).
(*) FBDev/Mode: Testing 800x480 RGB32
(*) FBDev/Mode: Preparing switch to 800x480 RGB32
(*) FBDev/Mode: (Post)Setting 800x480 RGB32
(*) Direct/Thread: Running 'EventBufferFeed' (MESSAGING, 1142)...

(gtk-demo:1133): Gdk-DirectFB-WARNING **: gdk_display_request_selection_notification Unimplemented function 


(gtk-demo:1133): Gdk-DirectFB-WARNING **: gdk_window_set_keep_above() not implemented.


(gtk-demo:1133): Gdk-DirectFB-WARNING **: gdk_window_set_keep_below() not implemented.



發佈了33 篇原創文章 · 獲贊 8 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章