2013年9月3日 星期二

cross compile gtk+gtk-directfb+arm-linux (arm-linux-gcc-3.4.4+glib-2.3.5)

Refer to 一生逍遙

2010年7月1日 by Jesse Stone Taiwan fatalfeel@hotmail.com

參考文獻1:http://blog.csdn.net/kendych/archive/2008/09/18/2947638.aspx

參考文獻2:https://wiki.mozilla.org/Mobile/DFBPorting

參考文獻3:http://blog.csdn.net/absurd/category/228434.aspx

參考文獻4:http://hi.baidu.com/chinalmy/blog/item/da814a5450a9e352574e0046.html

參考文獻5:http://www.docin.com/p-44613303.html

文藏地址1:http://hi.baidu.com/wstone_h/blog/item/e415151f82a45564f724e46d.html

文藏地址2:http://hi.baidu.com/wstone_h/blog/item/9cd8a010061bf6fbc3ce7901.html





說明:這裏主要參考了文獻1,雖然編譯後還有許多不足,但是交叉後的基本沒啥大問題,哈哈。對於包的版本選擇,考慮了依賴的關係,所以對於依賴包選擇了最 新的,不過在編譯gtk+時,好像新版本有較大的改動,因此這裏選擇了gtk+-2.12.9。文中有一個不足的地方就是安裝的路徑了,因為這個路徑是要 載入到板子上的,所以要自行考慮。



前置作業:

In Ubuntu 10.4 Desktop and root login


mkdir usr/local/armlinux, extract arm-linux-gcc-3.4.4-glib-2.3.5-static.tar.gz to usr/local/armlinux
edit /etc environment document file add /usr/local/armlinux/bin

apt-get install build-essential libncurses5-dev

apt-get install autoconf

apt-get install libtool

apt-get install gettext

apt-get install libglib2.0-dev

apt-get install libgtk2.0-dev

pkg-config --modversion xxx , can see install version , xxx=glib-2.0 or atk...



開發包的下載地址:

1、tslib: http://download.csdn.net/source/2217426 download tslib-1.4.tar.gz

2、tiff: ftp://ftp.gtk.org/pub/gtk/v2.10/dependencies/tiff-3.7.4.tar.gz

3、jpegsrc.v6b: ftp://ftp.gtk.org/pub/gtk/v2.10/dependencies/

4、libpng-1.2.33: http://www.libpng.org/pub/png/libpng.html

5、glib-2.19.0: ftp://ftp.gtk.org/pub/glib/2.19/

6、pango-1.20.2: ftp://ftp.gtk.org/pub/pango/1.20/

7、gtk+-2.12.9: http://ftp.gnome.org/pub/gnome/sources/gtk+/2.12/

8、atk-1.24.0: http://ftp.gnome.org/pub/gnome/sources/atk/1.24/

9、cairo-1.8.4: http://www.cairographics.org/releases/

10、DirectFB-1.3.0: http://www.directfb.org/downloads/Core/

11、expat-2.0.1: http://expat.sourceforge.net/

12、fontconfig-2.6.0: http://www.fontconfig.org/release/

13、freetype-2.3.7: http://freetype.sourceforge.net/index2.html

14、libxml2-2.6.31: http://xmlsoft.org/sources/

15、pixman-0.12.0: http://www.cairographics.org/releases/

16、zlib-1.2.3: http://sourceforge.net/projects/libpng/files/zlib/



這裏有很多的包,但是我們要理清順序和依賴關係,象jpegsrc.v6b,libpng是圖像的包,如不需要,可以考慮不下載,下載時要注意哪些是必須的包,哪些不是必要的包



1、tslib 1.4

export PREFIX=/usr/gtkdfb


./autogen.sh

echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache

CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX --cache-file=arm-linux.cache

make

make install

編譯完成後可以在目標位置看到4個檔夾

Ps:If build in x11, before configure add export LDFLAGS=-L$PREFIX/lib, export CFLAGS="-g -I$PREFIX/include", export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig . many problem from the export setting, if set correctly then all job can do quickly.

2、glib-2.19.0
在網路上有些人是遇到4個錯誤,可能本人比較特殊,呵呵。編譯多次,每次都是5個的,至於如何處理,請參考文獻3中對於glib的詳細分析,接著操作:

export LDFLAGS=-L$PREFIX/lib

export CFLAGS="-g -I$PREFIX/include"

export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig



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

echo ac_cv_func_posix_getgrgid_r=yes>>arm-linux.cache

CC=arm-linux-gcc ./configure --host=arm-linux --build=i386-linux --prefix=$PREFIX --cache-file=arm-linux.cache

make

make install

交叉編譯成功後在目標位置多出個/share檔夾

Ps: If build for x11, download glib-2.24.1 will have g_malloc_n , g_array_get_element_size ... many functions


3、atk-1.24.0

CC=arm-linux-gcc ./configure --host=arm-linux --build=i386-linux --prefix=$PREFIX

make

make install

ps: If build for x11, before configure add export LDFLAGS=-L$PREFIX/lib, export CFLAGS="-g -I$PREFIX/include", export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig

4、jpeg-6b

export CC=arm-linux-gcc

CC=arm-linux-gcc AR=arm-linux-ar AR2=arm-linux-ranlib ./configure --host=arm-linux --prefix=$PREFIX

修改生成的Makefile檔:

# The name of your C compiler:

CC=gcc 改成 CC=arm-linux-gcc (根據你自己交叉編譯器的位置修改)

AR=ar 改成 AR=arm-linux-ar (同上)

AR2=ranlib 改成 AR2=arm-linux-ranlib (同上)

mkdir $PREFIX/man

mkdir $PREFIX/man/man1

make

make install

make install-lib



5、zlib-1.2.3

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

make

make install



6、libpng-1.2.33

CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX

make

make install



7、expat-2.0.1

CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX

make

make install



8、freetype-2.3.7

CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX

make

make install



9、libxml2-2.6.31

CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX

make

make install



10、fontconfig-2.6.0

export LIBXML2_CFLAGS=-I$PREFIX/include/libxml2

export LIBXML2_LIBS="-L$PREFIX/lib -lxml2"

CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX --with-freetype-config=$PREFIX/bin/freetype-config --with-arch=arm

make

make install



11、tiff-3.7.4

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

make

make install



12、DirectFB-1.3.0

CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX --with-gfxdrivers=none --enable-png --enable-jpeg --enable-tiff --enable-zlib --enable-sdl=no --enable-gif=no --disable-x11

make

make install


build DirectFB --enable-debug=yes error:
internal compiler error: in cgraph_expand_function,
at cgraphunit.c:540 Please submit a full bug report,
It's a arm-linux-gcc bug, modify configure -O3 to -O2


13、pixman-0.12.0

CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX

make

make install



14、cairo-1.8.4

CC=arm-linux-gcc ./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

Ps:If build in x11 remove --without-x, --disable-xlib, --disable-xlib-xrender

after DirectFB --enable-debug=yes build cairo error:
error: `surface' undeclared (first use in this function)
in cairo-directfb-surface.c _cairo_directfb_surface_release_source_image(...)
D_DEBUG_AT (CairoDFB_Acquire, "%s( surface=%p ).\n", __FUNCTION__, surface);
to
D_DEBUG_AT (CairoDFB_Acquire, "%s( buffer=%p ).\n", __FUNCTION__, buffer);


15、pango-1.20.2

修改configure文件,將下面一些參數改成true

have_cairo=true

have_cairo_png=true

have_cairo_ps=true

have_cairo_pdf=true

have_cairo_freetype=true

CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX --enable-cairo --without-x

make

make install



16、gtk+-2.12.9

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

export CPPFLAGS="-I$PREFIX/include"

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

make

make install



在./configure時可能會出現錯誤,這是由於./configure的選項的原因,所以只要跟改下,以下僅是2中參考方案:

1、CC=arm-linux-gcc ./configure --host=arm-linux --build=i386-linux --prefix=$PREFIX --with-gdktarget=directfb --without-libtiff



2、CC=arm-linux-gcc ./configure --host=arm-linux --build=i386-linux --prefix=$PREFIX --with-gdktarget=directfb --without-libtiff --disable-glibtest --disable-largefile --without-libpng

Ps: If you build in x11 remove --without-x, --with-gdktarget=directfb
If you build gtk+2.21.1 x11, before configure export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig change glib to glib-2.24.1.tar.gz, atk to atk-1.29.2.tar.gz,and rebuild cario first, then pango,

If make error then correct it:

open gtk+-2.12.9/demos/Makefile

GDK_PIXBUF_CSOURCE = no ->

GDK_PIXBUF_CSOURCE = /usr/bin/gdk-pixbuf-csource



在開發板上運行:

1、拷貝編譯後的檔(即/gtkdfb)到開發板上

以上操作有個很重要的地方,那就是Directfb的目標位置,這個將直接影響到使用,呵呵

由於我的目標位置在 /usr/gtkdfb, 因此我要將檔掛載在相同的位置,這是因為Directfb使用時默認查找的就是目標位置,如果目標位置沒有相關檔,就會報以下的錯誤:

(!) DirectFB/core/system: No system found!

(#) DirectFBError [gdk_display_open: DirectFBCreate]: No (suitable) implementation found!



2、編寫腳本

在運行之前,還要做幾個腳本(保存成tslib.sh和gtkdbf.sh),腳本1用於開發板上的tslib指定環境,腳本2用於pc環境編譯程序和開 發板的gtk環境。腳本1和腳本2要根據自己的情況修改,以下可能只適合我。腳本1的修改請參見:http://hi.baidu.com /wstone%5Fh/blog/item/3e45ee247496a22cd407428e.html

腳本1:

#!/bin/bash

export TSLIB_ROOT=/usr/gtkdfb

export TSLIB_TSDEVICE=/dev/h3600_tsraw

export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal

export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export LD_LIBRARY_PATH=$TSLIB_ROOT/lib



腳本2:

#!/bin/bash

export PREFIX=/usr/gtkdfb

export CFLAGS="-g -I$PREFIX/include"

export LDFLAGS=-L$PREFIX/lib

export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig

export LIBXML2_CFLAGS=-I$PREFIX/include/libxml2

export LIBXML2_LIBS="-L$PREFIX/lib -lxml2"

export LDFLAGS="-L$PREFIX/lib -lts -Wl,-rpath,$PREFIX/lib"

export CPPFLAGS="-I$PREFIX/include"



現在在開發板上運行腳本1後,就可以運行/gtkdfb/bin/目錄下的ts_calibrate進行tslib的校正



3、構造2個文件:

這2個檔的位置在:

/usr/gtkdfb/etc/pango/pango.modules

/usr/gtkdfb/etc/gtk-2.0/gdk-pixbuf.loaders

使用以下方法構造,不然運行是會提示錯誤:

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

gdk-pixbuf-query-loaders > /usr/gtkdfb/etc/gtk-2.0/gdk-pixbuf.loaders





4、編寫.directfbrc

簡易的.directfbrc文件如下:

system=fbdev

fbdev=/dev/fb0

mode=240x320

depth=16

pixelformat=RGB16

保存成 .directfbrc(是隱藏檔,注意有個"點") ,並保存到$HOME目錄下(鍵入cd then enter,切換到的目錄即是$HOME目錄)

或是放 /usr/gtkfb/etc/directfbrc 或 /etc/directfbrc 不加點

這裏可以根據運行後的警告和提示,或者自身對開發板的瞭解情況進行修改。

具體的可以參考:http://hi.baidu.com/wstone_h/blog/item/cb7e332a62200a9c033bf614.html



5、解決字體問題

當沒有正確顯示字體,顯示是方框,這裏是由於編譯時使用的是PC系統的字體庫,當我移植時卻沒有了字體庫,也就是那種尾碼是ttf的檔,所以要拷個字體庫 到開發板上。查看/gtkdfb/etc/fonts下的fonts.conf,使字形檔和檔中描述的位置對應上。可以看到如下內容:



/usr/share/fonts

~/.fonts

/usr/share/fonts就是我們的字體庫位置(pc的字形檔也在/usr/share/fonts路徑下),從PC上拷字體庫到開發板的該目錄下(/usr/share/fonts)



6、運行gtk示例程式

在運行腳本1和腳本2後,運行/gtkdfb/bin/目錄下的gtk-demo,即gtk的示例程式。



在pc上編譯程序:

在pc上運行腳本2以後:

arm-linux-gcc -o hello hello.c -lts -Wl,-rpath,$PREFIX/lib `pkg-config gtk+-2.0 --cflags --libs`

編譯後tslib已經自動包含在其中,呵呵。拷到開發板即可運行自己的hello了。

沒有留言:

張貼留言