参考文献1:http://blog.163.com/a3563@126/blog/static/54675706201042424015658/
参考文献2:http://blog.csdn.net/kendych/archive/2008/09/18/2947638.aspx
包的下载地址:
1、tslib: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.44.tar.gz :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://www.zlib.net/
这里有很多的包,但是我们要理清顺序和依赖关系, 象jpegsrc.v6b,libpng是图像的包,如不需要,可以考虑不下载,下载时要注意哪些是必须的包,哪些不是必要的包
首先确认包的版本没问题,否则会作很多无用功。然后将权限改为root
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个文件夹
2、glib-2.19.0
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
在网路上有些人是遇到4个错误,可能本人比较特殊,呵呵。编译多次,每次都是5个的,至于如何处理,请参考文献3中对于glib 的详细分析,接着操作:
CC=arm-linux-gcc ./configure --host=arm-linux --build=i386-linux --prefix=$PREFIX --cache-file=arm-linux.cache
make
make install
交叉编译成功后在目标位置多出个/share文件夹
3、atk-1.24.0
CC=arm-linux-gcc ./configure --host=arm-linux --build=i386-linux --prefix=$PREFIX
make
make install
4、jpeg-6b
export CC=arm-linux-gcc
CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX
修改生成的Makefile文件:
# The name of your C compiler:
CC= gcc 该成 CC=arm-linux-gcc (根据你自己交叉编译器的位置修改)
# library (.a) file creation command
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
make install-lib
5、zlib-1.2.3
CC=arm-linux-gcc ./configure --prefix=$PREFIX -shared
make
make install
6、libpng-1.2.44
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
13、pixman-0.12.0
CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$PREFIX
make
make install
如果出现错误,在配置选项后面加上 --disable-gtk 试试
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
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 --disable-glibtest --disable-largefile --without-libpng
2、CC=arm-linux-gcc ./configure --host=arm-linux --build=i386-linux --prefix=$PREFIX --with-gdktarget=directfb --without-libtiff
在开发板上运行:
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
创建路径 mkdir /usr/gtkdfb/etc/pango/
mkdir /usr/gtkdfb/etc/gtk-2.0/
使用以下方法构造(直接在终端运行),不然运行是会提示错误:
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,切换到的目录即是$HOME目录)
这里可以根据运行后的警告和提示,或者自身对开发板的了解情况进行修改。
具体的可以参考:http://hi.baidu.com/wstone_h/blog/item/cb7e332a62200a9c033bf614.html
5、解决字体问题
当没有正确显示字体,显示是方框,这里是由于编译时使用的是PC系统的字体库,当我移植时却没有了字体库,也就是那种后缀是 ttf 的文件,所以要拷个字体库到开发板上。查看/gtkdfb/etc/fonts下的fonts.conf,使字库和文件中描述的位置对应上。可以看到如下内容:
<!-- Font directory list -->
<dir>/usr/share/fonts</dir>
<dir>~/.fonts</dir>
/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了。