gtk+dfb+arm 环境配置笔记整理

参考文献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了。

你可能感兴趣的:(脚本,Path,library,compiler,makefile,gtk)