免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 974 | 回复: 0
打印 上一主题 下一主题

Porting GTK+ on DirectFB [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-07 19:48 |只看该作者 |倒序浏览

                GTK+ FAQ
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.12sudo 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
參考: 
problem with realplayer
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的觀念所以視窗不會有toolbar
Porting GTK+ on DirectFB
http://blog.tyker.info/wordpress/archives/343
很無聊的題目,因為做起來實在很麻煩,想說至少做個記錄,給打算porting到ARM平台上的人參考。有天我忘記了也可以回頭看看…
根據
DirectFB官方Wiki
所說,要把Gtk+弄到DirectFB上需要準備以下東西: GTK+, Cairo, GLib, Pango, ATK。 做了一次之後才發現那份文件寫的稍微零散,如果你要做一個非i386的版本一定會漏掉許多東西。在我安裝好ARM toolchain之後,依序做了下列動作才算作好Gtk+所需要的各種元件:
先build 
GLib
,其中還需要用到libiconv跟libgettext。在cross compile GLib的時候可能會遇到一些麻煩,我有找到
解法放在黑米的書籤

ATK
需要用到GLib的東西,所以擺它後面。
DirectFB
,選項很多我把大部分不需要的都關掉了(osx, sdl, vnc, video4linux, 所有graphic driver都不裝,input driver只安裝linuxinput, ps2mouse, keyboard)。在這裡又多裝了libjpeg(make install-lib才會把library裝好), libpng, zlib, freetype。
Cairo
需要DirectFB當作後端,此外還需要fontconfig(configure檢查不出來,編譯的時候才知道沒有),expat跟freetype也會被fontconfig用到,裝DirectFB的時候已經先安裝freetype了,所以要再裝expat。安裝選項中把xlib跟win32 disable,再enable directfb即可。
Pango
,需要有Cairo,之後只需要把with-x關掉即可。
Gtk+
,我還沒裝所以說除了那幾包主要元件之外,至少還需要
libiconv

libgettext

fontconfig
,
freetype

expat
這五個相關的header跟library,如果DirectFB要支援jpg跟png的話就還要再加上
libjpeg

libpng

zlib
。裝完了以上東西才能繼續安裝Gtk+,到這裡我也累了,如果編譯Gtk+又遇到什麼問題下次再貼上來。
所有我用到的版本
atk-1.10.3cairo-1.4.4DirectFB-1.0.0expat-2.0.0fontconfig-2.4.0freetype-2.3.4gettext-0.16glib-2.9.6jpegsrv.v6blibiconv-1.11libpng-1.2.16pango-1.11.99zlib-1.2.3
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/56723/showart_1854744.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP