Chinaunix首页 | 论坛 | 博客
  • 博客访问: 677025
  • 博文数量: 118
  • 博客积分: 7172
  • 博客等级: 少将
  • 技术积分: 1799
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-12 13:33
文章分类

全部博文(118)

文章存档

2012年(5)

2011年(12)

2010年(18)

2009年(36)

2008年(47)

我的朋友

分类: LINUX

2009-03-07 19:48:00


http://library.gnome.org/devel/gtk-faq/stable/

Compiling the GTK+ Libraries — How to compile GTK+ itself

http://library.gnome.org/devel/gtk/unstable/gtk-building.html


GTK+ on DirectFB on Creator PXA270


2008/02/01 11:56
把 GTK+ 和 DirectFB 放到新華的 Creator 實驗板上
基本上這是報告釋出的產品
為避免被說是抄來的所以 Delay 了一點時間...
記下修改過程供參考
本文僅供該實驗板使用
其他實驗板怎麼改我不知道,先聲明XD

然後寫一隻程式丟上去跑 : 踩地雷
用觸控板操作
因為不知道怎麼接收點擊信號
因此 button 的事件是用滑鼠移過偵測
所以那些輸贏畫面除了是"獎品"XD, 亦是滑鼠引導的對話框
把按鈕放到左上角,使用者必須移過去才能繼續

以避免誤觸開新遊戲的地雷
 

Kernel 和 Toolchain 均採用板子光碟裡附的
Kernel 2.6.15.3 和 arm-gcc 4.0.2

export projroot=/usr/myproj
export target=arm-unknown-linux-gnu
export toolroot=$projroot/toolchain/gcc-4.0.2-glibc-2.3.3/$target
export PATH=$PATH:$toolroot/bin
export sysroot=$projroot/

export PREFIX=/usr/rootfs/pxa270-gui
export LD_LIBRARY_PATH=$PREFIX/lib
export PKG_CONFIG_PATH=$LD_LIBRARY_PATH/pkgconfig
export PATH=$PREFIX/bin:$PATH


zlib-1.2.3
./configure --prefix=$PREFIX –shared
# 修改 makefile,改這個: LDSHARED=$(CC) -shared –Wl,-soname,libz.so.1
make CC=$target-gcc
make install

libpng-1.2.23
./configure --host=$target --build=i386-linux --prefix=$PREFIX \
CFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" --disable-static
make
make install

gettext-0.16
./configure --host=$target --build=i386-linux --prefix=$PREFIX \
--disable-static --disable-java
make
make install

glib-2.12.12
sudo apt-get install libglib2.0-dev
# 在configure裡搜尋cannot run test program while cross compiling和cross-compiling
# 並移除其下方的{ (exit 1); exit 1; };
./configure --host=$target --build=i386-linux --prefix=$PREFIX
# 修改glib/giounix.c改這: #include <bits/posix1_lim.h>
make
make install

busybox 1.8.2 抽出cmp工具供後面套件使用
make menuconfig
make CROSS_COMPILE=$target- CONFIG_PREFIX=./_install install

atk-1.10.3
./configure --host=$target --build=i386-linux --prefix=$PREFIX --disable-glibtest
# Makefile 中找到 $(GLIB_GENMARSHAL) 的指令,將其註解,
# 並在target上執行指令產生對應檔案,修改 #define PATH_MAX 260
make
make install

freetype-2.3.5
./configure --host=$target --build=i386-linux --prefix=$PREFIX --disable-static
make
make install

libxml2-2.6.30
./configure --host=$target --build=i386-linux --prefix=$PREFIX \
--without-debug --disable-static
# 修改 testModule.c 加上: #define PATH_MAX 260
make
make install

fontconfig-2.4.92
./configure --host=$target --build=i386-linux --prefix=$PREFIX \
--with-freetype-config=$PREFIX/bin/freetype-config --disable-static \
--with-confdir=$PREFIX/etc/fonts --enable-libxml2 --with-arch=arm
make
make install

jpeg v0.6b
./configure --host=$target --build=i386-linux --prefix=$PREFIX \
--exec-prefix=$PREFIX --disable-static
make CC=$target-gcc CXX=$target-g++ AR="$target-ar rc" STRIP=$target-strip \
LD=$target-ld RANLIB=$target-ranlib AS=$target-as NM=$target-nm \
AR2=$target-ranlib
make install
make install-lib
make install-headers

DirectFB-1.0.0
./configure --host=$target --build=i386-linux --prefix=$PREFIX \
--disable-gif CFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" \
CPPFLAGS="-I$PREFIX/include" --with-sysroot=$PREFIX --exec-prefix=$PREFIX \
--with-tests --with-gfxdrivers=none --disable-sdl --disable-x11 --enable-multi
make
make install

修改 Kernel driver
# 修改 kernel 裡(drivers/mfd)的 ucb1c00-ts.c並編譯
// { TFT_MTLCD_0353224A, 320, 240, 60, 68, 965, 940 , "MTLCD-0353224A" , 2}, 
// MTLCD-0353224(3.5" 320*240 Landscape)
{ TFT_MTLCD_0353224A, 240, 320, 60, 68, 965, 940 , "MTLCD-0353224A" , 2}, 
// MTLCD-0353224(3.5" 320*240 Landscape)
# 將tmpfs掛載至/dev/shm供DirectFB使用,接著繼續往下編譯。

cairo-1.4.12
./configure --host=$target --build=i386-linux --prefix=$PREFIX \
--enable-directfb=yes --disable-xlib --enable-ps=yes --enable-png=yes \
--disable-win32 --without-x --enable-freetype=yes --enable-pdf=yes \
--enable-svg=yes LDFLAGS="-L$PREFIX/lib" CFLAGS="-I$PREFIX/include" --disable-static
make
make install
# 新增以下 lib 到 cairo.pc 中: -lfreetype -lfontconfig -ldirectfb -lz -ldirect -lpng12 -lxml2 -lfusion

pango-1.16.5
./configure --host=$target --build=i386-linux --prefix=$PREFIX --without-x \
LDFLAGS="-L$PREFIX/lib" CFLAGS="-I$PREFIX/include"
make
make install
# 新增以下lib到pango.pc中: -lglib-2.0 -lgmodule-2.0 -lgobject-2.0
# 新增以下lib到pangocairo.pc中: -lpangoft2-1.0
# 在目標平台上執行pango-querymodules > $PREFIX/etc/pango/pango.modules來產生組態檔

gtk+-2.10.14
./configure --host=$target --build=i386-linux --prefix=$PREFIX \
--with-gdktarget=directfb --without-libtiff CFLAGS="-I$PREFIX/include" \
--disable-glibtest --disable-largefile \
LDFLAGS="-L$PREFIX/lib" CPPFLAGS="-I$PREFIX/include"
# 到 Makefile 移除 printbackend (若編譯到此模組失敗時才動手)
make
make install

e2fsprog 1.40.2
./configure --host=$target --build=$target --prefix=$PREFIX
cd misc
make CC=$target-gcc LD=$target-ld
# 添入boot參數
setenv bootargs root=/dev/mtdblock3 rw rootfstype=jffs2 console=ttyS0,9600n8 mem=64M video=pxafb:mode:280x330-16,dpc:DPC lcdtype=MTLCD-0353224A

開機步驟加入執行檔路徑即可自動執行。
以上是編譯過程
詳細開機程序不詳述
很多書籍有

這是開啟畫面 :



Porting GTK+ on DirectFB

移植GTK的過程真的很繁雜,要先編幾十個library.
過程請直接參考強者同學的網誌: 
GTK+ on DirectFB on Creator PXA270
遇到error時通常把message原封不動的拿到google搜尋都可以找到解決的辦法, 以下提供新手參考.

編譯glib-2.9.6時
Error: cannot run test program while cross compiling See 'config.log' for more details
Solution:
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 
configure參數多加 --cache-file=arm-linux.cache

編譯atk-1.10.3時
Error: glib-genmarshal: error while loading shared libraries: /opt/DYNAMIC/lib/libglib-2.0.so.0: ELF file OS ABI invalid
Solution: 先將環境變數LD_LIBRARY改為空白, make後再復原

執行GTK程式時
Error: (!) Direct/Modules: Could not open module directory `/usr/myproj/usr/myproj/lib/directfb-1.0-0/systems'! --> No such file or directory
Solution: 可以看到路徑重複兩次, 不知道是為什麼. 自行建立link即可

Error: (!) Direct/Modules: Could not open module directory `/usr/myproj/usr/myproj/lib/directfb-1.0-0/gfxdrivers'! --> No such file or directory
Solution: 在編譯directfb的時候gfxdrivers已經選擇none, 應該是不需要額外的driver才對, make一個空的資料夾可以過

Error: GdkPixbuf-WARNING **: Cannot open pixbuf loader module file '/usr/myproj/etc/gtk-2.0/gdk-pixbuf.loaders': No such file or directory
Solution:
在target執行/usr/myproj/bin/gdk-pixbuf-query-loaders > /usr/myproj/etc/gtk-2.0/gdk-pixbuf.loaders
參考: 


Error: (!) DirectFB/FBDev: Panning display failed! --> Invalid argument
Solution: (目前未解)

Error: No fonts found; this probably means that the fontconfig library is not correctly configured. You may need to edit the fonts.conf configuration file.
Solution: 修改etc/fonts/fonts.conf, 加入字型檔的路徑
然後把字型複製到預定的路徑裡面, 可以是windows的ttf

Error:
Gdk-DirectFB-WARNING **: gdk_window_set_keep_above() not implemented.
Gdk-DirectFB-WARNING **: gdk_window_set_keep_below() not implemented.
視窗畫面上的toolbar都顯示不出來, 不支是否跟這有關係
Solution: Warning而已不用理他, 強者同學說沒有window manager的觀念所以視窗不會有toolba
r



Porting GTK+ on DirectFB

http://blog.tyker.info/wordpress/archives/343

很無聊的題目,因為做起來實在很麻煩,想說至少做個記錄,給打算porting到ARM平台上的人參考。有天我忘記了也可以回頭看看…

根據所說,要把Gtk+弄到DirectFB上需要準備以下東西: GTK+, Cairo, GLib, Pango, ATK。 做了一次之後才發現那份文件寫的稍微零散,如果你要做一個非i386的版本一定會漏掉許多東西。在我安裝好ARM toolchain之後,依序做了下列動作才算作好Gtk+所需要的各種元件:

  1. 先build ,其中還需要用到libiconv跟libgettext。在cross compile GLib的時候可能會遇到一些麻煩,我有找到
  2. 需要用到GLib的東西,所以擺它後面。
  3. ,選項很多我把大部分不需要的都關掉了(osx, sdl, vnc, video4linux, 所有graphic driver都不裝,input driver只安裝linuxinput, ps2mouse, keyboard)。在這裡又多裝了libjpeg(make install-lib才會把library裝好), libpng, zlib, freetype。
  4. 需要DirectFB當作後端,此外還需要fontconfig(configure檢查不出來,編譯的時候才知道沒有),expat跟freetype也會被fontconfig用到,裝DirectFB的時候已經先安裝freetype了,所以要再裝expat。安裝選項中把xlib跟win32 disable,再enable directfb即可。
  5. ,需要有Cairo,之後只需要把with-x關掉即可。
  6. ,我還沒裝

所以說除了那幾包主要元件之外,至少還需要,這五個相關的header跟library,如果DirectFB要支援jpg跟png的話就還要再加上。裝完了以上東西才能繼續安裝Gtk+,到這裡我也累了,如果編譯Gtk+又遇到什麼問題下次再貼上來。

    所有我用到的版本

  • atk-1.10.3
  • cairo-1.4.4
  • DirectFB-1.0.0
  • expat-2.0.0
  • fontconfig-2.4.0
  • freetype-2.3.4
  • gettext-0.16
  • glib-2.9.6
  • jpegsrv.v6b
  • libiconv-1.11
  • libpng-1.2.16
  • pango-1.11.99
  • zlib-1.2.3

阅读(3084) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~