Porting GTK+ on DirectFB

April 15, 2007 10:30 pm

2008 Jul 18補充:
這篇大概是本部落存活最久的文章,已經超過一年了還有網友留言發問^^ 我要說明的是當初我進行的那個案子已經在三月左右結束掉了,GTK也是去年為了找尋可用的GUI才去抓來試玩;雖然我現在換了一個又可碰embedded linux的工作,不過碰GUI的機會可能已經不是那麼大了,所以有些問題我只能憑記憶或經驗去回答,若有講錯的還請見諒。如果我買來新的開發版上有附面板的話,也許我會再去build一次GTK也說不定…

其實我是一點也不建議用GTK的 :p

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

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

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

所以說除了那幾包主要元件之外,至少還需要libiconv, libgettext, fontconfig, freetype, expat這五個相關的header跟library,如果DirectFB要支援jpg跟png的話就還要再加上libjpeg, libpng, zlib。裝完了以上東西才能繼續安裝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

45 個回應 to “Porting GTK+ on DirectFB”

Teresa 的留言 於 July 6, 2007

請問我可以成功的compile GTK on DirectFB, 然而在create 一個window 時有一個簡單window 出現, 但在畫一個button 時郤會失敗..請問您有遇過嗎??

ykhuang 的留言 於 July 6, 2007

不好意思,我後來覺得Gtk實在太麻煩,所以我改用FLTK來作我要的東西。

不過我有在我的平台上把它附的demo程式跑起來,看起來沒什麼問題,視窗元件都可以正常出現。或者你可能要review一下你的程式,也許是沒按照正正確的Gtk programming流程。

TEresa 的留言 於 July 12, 2007

恩..只好再試試看囉..謝謝你^^

Davis 的留言 於 October 17, 2007

我根据DirectFB官方Wiki所说的,编译了一个arm的版本,但是在运行gtk-demo时,报错:
[root@Linux bin]#./gtk-demo

=======================| DirectFB 1.1.0 |=======================
(c) 2001-2007 The DirectFB Organization (directfb.org)
(c) 2000-2004 Convergence (integrated media) GmbH
————————————————————

(*) DirectFB/Core: Single Application Core. (2007-10-09 04:03)
pagesize 0×1000
(*) Direct/Thread: Running ‘VT Switcher’ (CRITICAL, 1050)…
(*) Direct/Thread: Running ‘Linux Input’ (INPUT, 1051)…
(*) DirectFB/Input: codec_ts (1) 0.1 (directfb.org)
(*) Direct/Thread: Running ‘Linux Input’ (INPUT, 1052)…
(*) DirectFB/Input: pxa3xx_keypad (2) 0.1 (directfb.org)
(*) Direct/Thread: Running ‘Keyboard Input’ (INPUT, 1053)…
(*) DirectFB/Input: Keyboard 0.9 (directfb.org)
(!) Direct/Modules: Could not open module directory `/mnt/usr/lib/directfb-1.1-0
/gfxdrivers’!
–> No such file or directory
(*) DirectFB/Graphics: Generic Software Rasterizer 0.6 (directfb.org)
(*) DirectFB/Core/WM: Default 0.3 (directfb.org)
(*) FBDev/Mode: Testing 480×640 RGB16
(*) FBDev/Mode: Preparing switch to 480×640 RGB16
(*) FBDev/Mode: Testing 480×640 RGB16
(*) FBDev/Mode: Preparing switch to 480×640 RGB16
(*) FBDev/Mode: Testing 480×640 RGB16
(*) FBDev/Mode: Preparing switch to 480×640 RGB16
(*) FBDev/Mode: Testing 480×640 RGB16
(*) FBDev/Mode: Preparing switch to 480×640 RGB16
(*) FBDev/Mode: Preparing switch to 480×640 RGB16
(*) FBDev/Mode: Preparing switch to 480×640 RGB16
(*) FBDev/Mode: Switched to 480×640 (480×640) at 16 bit RGB16 (wanted RGB16).
(!) DirectFB/FBDev: Panning display failed (x=0 y=0 ywrap=0 vbl=0)!
–> Invalid argument
(*) FBDev/Surface: Allocated 480×640 16bit RGB16 buffer at offset 0 and pitch 96
0.
(*) FBDev/Mode: (Post)Setting 480×640 RGB16
(*) FBDev/Mode: Testing 480×640 RGB16
(*) FBDev/Mode: Preparing switch to 480×640 RGB16
(*) FBDev/Mode: (Post)Setting 480×640 RGB16
(*) Direct/Thread: Running ‘EventBufferFeed’ (MESSAGING, 1054)…
(!) [ 1041: 0.000] –> Caught signal 6 (unknown origin) stack = NULL] *** [default.c:2882 in wm_clo
se_stack()]
(!!!) *** WARNING [still objects in ‘Window Pool’] *** [object.c:239 in fusion
_object_pool_destroy()]
(!!!) *** WARNING [still objects in ‘Surface Pool’] *** [object.c:239 in fusio
n_object_pool_destroy()]
Aborted
[root@Linux bin]#

你能否给我一点建议,是不是需要做些配置。

ykhuang 的留言 於 October 18, 2007

Davis,
像這樣的錯誤很頭大啊,我找了一下發現像是發出signal 11/6這類的問題還不少,而且不一定是同一個源頭。我個人的感覺是GTK裡面相依的library太多了,可能是某些library版本之間不相容的問題。

雖然說我做出來的gtk-demo可以跑,可是我看那樣的環境也不能保證其他程式沒問題,所以後來就轉換到其他GUI了。

Jacky 的留言 於 October 26, 2007

Hi, yk:
請問一下, 我抓了DirectFB-1.1來build,
configure 為
./configure –host=arm-linux –prefix=/usr/local/gtk –disable-x11 –disable-jpeg –disable-osx –disable-sdl –disable-vnc –disable-video4linux –with-inputdrivers=’linuxinput,ps2mouse,keyboard’

但 make 之後總有error message :
/usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/sys/user.h:29: error: redefinition of ’struct fp_reg’
/usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/sys/user.h:50: error: redefinition of ’struct user’
In file included from /usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/sys/ucontext.h:26,
from /usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/signal.h:351,
from /usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/sys/signal.h:1,
from ../../lib/direct/conf.h:36,
from ../../lib/direct/messages.h:46,
from matrox_maven.c:43:
/usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/sys/procfs.h:49: error: conflicting types for ‘elf_fpregset_t’
/usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/asm/elf.h:31: error: previous declaration of ‘elf_fpregset_t’ was here
In file included from /usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/sched.h:32,
from ../../lib/direct/util.h:35,
from matrox_maven.c:44:
/usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/bits/sched.h:66: error: redefinition of ’struct sched_param’
In file included from /usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/pthread.h:24,
from ../../lib/direct/util.h:38,
from matrox_maven.c:44:
/usr/local/arm-linux-4.1.1/bin/../lib/gcc/arm-iwmmxt-linux-gnueabi/4.1.1/../../../../arm-iwmmxt-linux-gnueabi/sys-include/time.h:163: error: redefinition of ’struct itimerspec’

請問是環境變數沒設好or其他原因? 謝謝!!!

ykhuang 的留言 於 October 26, 2007

Jacky,
我手邊的GTK環境都清光了,暫時沒辦法看的很深入。不過從你貼的message來看,應該是DirectFB關於matrox的graphic driver跟你用的toolchain衝到了,如果matrox的支援不是很必要的話,看能不能從configure裡面把它關掉,像是 –without-gfxdrivers=matrox 這樣的option(我是猜的,不一定對)。

Jacky 的留言 於 October 29, 2007

Hi, ykhuang:

You are right!
It’s due to improper gfx driver.
I just remove some default gfx driver and it can make sucessfully!
Thanks!

Jacky 的留言 於 October 30, 2007

Hi, ykhuang :

我在build GTK+, 遇到以下error :
checking Pango flags… configure: error:
*** Pango not found. Pango built with Cairo support is required
*** to build GTK+. See http://www.pango.org for Pango information.

看起來是Pango沒有build with Cairo
但我下的config string:
./configure –host=arm-linux CC=arm-linux-gcc –prefix=/usr/local/gtk –with-x=no –enable-cario

請問你知道如何解嗎? thanks!

ykhuang 的留言 於 October 30, 2007

Jacky,

這不一定是你的Pango沒設定好,也有可能是Gtk configure根本就沒找到你系統裡面的Pango,因為他是用pkgconfig去搜尋的,所以你可以先手動試試看pkgconfig看能不能找到Pango,若是找不到Pango相關的.pc檔,你有可能需要設定pkgconfig路徑的環境變數讓configure可以搜尋的到。

fyl 的留言 於 November 9, 2007

hi,ykhuang,可以交流一下,在嵌入式linux下边,fltk如何移植吗?谢谢你

ykhuang 的留言 於 November 9, 2007

fyl,

今天剛好比較沒事,可能寫一點我個人的FLTK移植經驗

freeubuntu 的留言 於 December 10, 2007

你好,我交叉编译了DirectFB+GTK,把生成的文件放在了开发板对应的文件夹里,
自己在pc上编译了一个gtk的程序,
放到arm开发板上运行,报错如下:
bash-2.05b# ./mhelloworld

=======================| DirectFB 1.1.0 |=======================
(c) 2001-2007 The DirectFB Organization (directfb.org)
(c) 2000-2004 Convergence (integrated media) GmbH
————————————————————

(*) DirectFB/Core: Single Application Core. (2007-12-07 12:13)
(*) Direct/Thread: Running ‘VT Switcher’ (CRITICAL, 399)…
(*) Direct/Thread: Running ‘PS/2 Input’ (INPUT, 400)…
(*) DirectFB/Input: IMPS/2 Mouse 1.0 (directfb.org)
(*) Direct/Thread: Running ‘Keyboard Input’ (INPUT, 401)…
(*) DirectFB/Input: Keyboard 0.9 (directfb.org)
(!) Direct/Modules: Could not open module directory `/usr//lib/directfb-1.1-0/gfxdrivers’!
–> No such file or directory
(*) DirectFB/Graphics: Generic Software Rasterizer 0.6 (directfb.org)
(*) DirectFB/Core/WM: Default 0.3 (directfb.org)
(*) FBDev/Mode: Testing 320×240 RGB16
(*) FBDev/Mode: Preparing switch to 320×240 RGB16
(*) FBDev/Mode: Testing 320×240 RGB16
(*) FBDev/Mode: Preparing switch to 320×240 RGB16
(*) FBDev/Mode: Testing 320×240 RGB16
(*) FBDev/Mode: Preparing switch to 320×240 RGB16
(*) FBDev/Mode: Testing 320×240 RGB16
(*) FBDev/Mode: Preparing switch to 320×240 RGB16
(*) FBDev/Mode: Testing 320×240 RGB16
(*) FBDev/Mode: Preparing switch to 320×240 RGB16
(*) FBDev/Mode: Switched to 320×240 (320×240) at 16 bit RGB16 (wanted RGB16).
(!) DirectFB/FBDev: Panning display failed (x=0 y=0 ywrap=0 vbl=0)!
–> Invalid argument
(*) FBDev/Surface: Allocated 320×240 16bit RGB16 buffer at offset 0 and pitch 6.
(*) FBDev/Mode: (Post)Setting 320×240 RGB16
(*) FBDev/Mode: Testing 320×240 RGB16
(*) FBDev/Mode: Preparing switch to 320×240 RGB16
(*) FBDev/Mode: (Post)Setting 320×240 RGB16
(*) Direct/Thread: Running ‘EventBufferFeed’ (MESSAGING, 402)…
No fonts found; this probably means that the fontconfig
library is not correctly configured. You may need to
edit the fonts.conf configuration file. More information
about fontconfig can be found in the fontconfig(3) manual
page and on http://fontconfig.org
(!!!) *** WARNING [Application exited without deinitialization of DirectFB!] ]
(!!!) *** WARNING [still objects in ‘Layer Region Pool’] *** [object.c:239 in]
(!!!) *** WARNING [still objects in ‘Layer Context Pool’] *** [object.c:239 i]
(!!!) *** WARNING [setting window->stack = NULL] *** [default.c:2882 in wm_cl]
(!!!) *** WARNING [still objects in ‘Window Pool’] *** [object.c:239 in fusio]
(!!!) *** WARNING [still objects in ‘Surface Pool’] *** [object.c:239 in fusi]

我是那里写错了呢?

freeubuntu 的留言 於 December 10, 2007

楼上的Davis兄,可解决问题了
我的msn:freeubuntu@hotmail.com

ykhuang 的留言 於 December 10, 2007

freeubuntu,

Direct/Modules: Could not open module directory `/usr//lib/directfb-1.1-0/gfxdrivers’!
–> No such file or directory

看起來像是DirectFB沒設置或安裝好
後面的fontconfig雖然有錯,但可能不是致命的錯誤吧

Davis 的留言 於 December 10, 2007

freeubuntu兄,这个问题前段时间放下来了,还是没有解决呀,你有什么建议呀?

Readon 的留言 於 January 4, 2008

可能是fb_pan_display的问题。
我在三星2410的平台上移植gtk+directfb也碰到了类似问题,
我在内核中fb驱动里实现了一个空的pan_display函数(仅仅返回0),解决该问题。

alanz 的留言 於 June 25, 2008

Hi, gentleman,
I encountered a problem when cross compiling fontconfig-2.4.2. The following is my evn setting:
#!/bin/sh

export ARM_TOOLCHAIN_ROOT=/home/lxuser/arm11-gcc-linux
export PATH=$PATH:$ARM_TOOLCHAIN_ROOT/bin
export BUILD_OUTPUT_ROOT=/home/lxuser/LinuxEmbeddedSuites/build/usr/local

if [ ! -e “$BUILD_OUTPUT_ROOT/include” ]; then mkdir -p $BUILD_OUTPUT_ROOT/include;fi;
if [ ! -e “$BUILD_OUTPUT_ROOT/lib” ]; then mkdir -p $BUILD_OUTPUT_ROOT/lib; fi;
if [ ! -e “$BUILD_OUTPUT_ROOT/etc” ]; then mkdir -p $BUILD_OUTPUT_ROOT/etc; fi;
if [ ! -e “$BUILD_OUTPUT_ROOT/bin” ]; then mkdir -p $BUILD_OUTPUT_ROOT/bin; fi;
if [ ! -e “$BUILD_OUTPUT_ROOT/share” ]; then mkdir -p $BUILD_OUTPUT_ROOT/share; fi;
if [ ! -e “$BUILD_OUTPUT_ROOT/man” ]; then mkdir -p $BUILD_OUTPUT_ROOT/man; fi;

export PKG_CONFIG_PATH=$BUILD_OUTPUT_ROOT/lib/pkgconfig

if [ ! -e “$PKG_CONFIG_PATH” ]; then mkdir -p $PKG_CONFIG_PATH; fi;

export ARCH=arm
export CPP=$ARCH-linux-cpp
export GCC=$ARCH-linux-gcc
export CC=$ARCH-linux-cc
export CXX=$ARCH-linux-g++
export LD=$ARCH-linux-ld
export NM=$ARCH-linux-nm
export RANLIB=$ARCH-linux-ranlib
export AS=$ARCH-linux-as
export AR=$ARCH-linux-ar
fontconfig_target_config=`arm-linux-gcc -dumpmachine`
fontconfig_host_config=`gcc -dumpmachine`

./configure CC=arm-linux-gcc LD=arm-linux-ld RANLIB=arm-linux-ranlib –prefix=$BUILD_OUTPUT_ROOT \
–host=$fontconfig_target_config –target=$fontconfig_target_config \
–enable-libxml2 –with-confdir=$BUILD_OUTPUT_ROOT/etc/fonts –with-arch=arm –with-freetype-config=$BUILD_OUTPUT_ROOT/bin/
freetype-config \
–disable-static –enable-shared CPPFLAGS=”-I$BUILD_OUTPUT_ROOT/include -I$ARM_TOOLCHAIN_ROOT/include -I$BUILD_OUTPUT_ROOT/
include/freetype2 -DBSP_LITTLE_ENDIAN=1 ” LDFLAGS=”-L$BUILD_OUTPUT_ROOT/lib” _EXTRA_LDFLAGS_=”-L$ARM_TOOLCHAIN_ROOT/lib”

the configure is fine, but make encounter problem :

Making all in fc-case
make[2]: Entering directory `/home/lxuser/LinuxEmbeddedSuites/fontconfig-2.4.2/fc-case’
make all-am
make[3]: Entering directory `/home/lxuser/LinuxEmbeddedSuites/fontconfig-2.4.2/fc-case’
gcc -L/home/lxuser/LinuxEmbeddedSuites/build/usr/local/lib -o fc-case fc-case.o
fc-case.o: In function `parseRaw’:
fc-case.c:(.text+0×5c9): undefined reference to `__ctype_b’
collect2: ld returned 1 exit status
make[3]: *** [fc-case] Error 1
make[3]: Leaving directory `/home/lxuser/LinuxEmbeddedSuites/fontconfig-2.4.2/fc-case’
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/lxuser/LinuxEmbeddedSuites/fontconfig-2.4.2/fc-case’
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/lxuser/LinuxEmbeddedSuites/fontconfig-2.4.2′
make: *** [all] Error 2

————————————————————————-
Thank in advance!

ykhuang 的留言 於 June 25, 2008

Hi alanz,

The __ctype_b seems to exists in glibc. It could be missing in your glibc. Google says that glibc2.2 has that but not available in glibc2.3.2. Please check your glibc installation.

alanz 的留言 於 June 30, 2008

yk,
Thanks for your reply! I fixed the compiling issue. I also encountered a running time issue when I run gtk-demo as following :
(!) Direct/Modules: Could not open module directory `/lib/directfb-1.0-0/systems’!^M
–> No such file or directory^M
(!) DirectFB/core/system: No system found!^M
(#) DirectFBError [gdk_display_open: DirectFBCreate]: No (suitable) implementation found!^M
^M
(gtk-demo:110): Gtk-WARNING **: cannot open display:
**************************************************************************************
My setting for LD_LIBRARY_PATH in startup shell script is following :
export PATH=$PATH:/appfs/bin
export LD_LIBRARY_PATH=/appfs/lib:/appfs/lib/cnxt_libs:/appfs/lib/directfb-1.0-0/systems:/appfs/lib/directfb-1.0-0/inputdrivers:/appfs/lib/directfb-1.0-0/gfxdrivers:/appfs/lib/directfb-1.0-0/interfaces/IDirectFBFont:/appfs/lib/directfb-1.0-0/interfaces/IDirectFBImageProvider:/appfs/lib/gtk-2.0/2.10.0/engines:/appfs/lib/gtk-2.0/2.10.0/immodules:/appfs/lib/gtk-2.0/2.10.0/loaders:/appfs/lib/gtk-2.0/2.10.0/printbackends:/appfs/lib/pango/1.6.0/modules
# export LD_LIBRARY_PATH=/appfs

/bin/echo “You can now run directfb-examples applications from /appfs/bin/”

/appfs/bin/gtk-demo
***********************************************************************************
I set LD_LIBRARY_PATH, why it references to “/lib/xxx” directory. Do you know where to fix?
Thanks in advance!

BRs,
Alan Zhang

ykhuang 的留言 於 July 1, 2008

Hi Alanz,

I’m not quite sure if it’s an issue of DirectFB configure, maybe you can try to edit /etc/ld.so.conf and execute ldconfig again to see if it works.

smikid 的留言 於 July 7, 2008

hi : ykhuang
我抓了directfb 1.2.0版, 如果我要build for s3c2440 arm9, 需要下什麼參數及修改什麼嗎? 謝謝

ykhuang 的留言 於 July 9, 2008

smikid,

要不要照我的步驟三先編個最簡單的試試看?每個人的環境跟需求都不一樣,反覆嘗試修改都是免不了的。

smikid 的留言 於 July 18, 2008

hi : ykhuang
我build 好directfb 跟 directfb-example, load到開發板之後 run一個test出現以下訊息
/df_window: error while loading shared libraries: libdirectfb-1.0.so.0: cannot
open shared object file: No such file or directory
我是在sever上build, 所以prefix我是設我自己的目錄如 /home1/xxxx/usr, 在開發板上
我也是建立相同的目錄

謝謝

ykhuang 的留言 於 July 18, 2008

hi smikid,

執行時動態載入函式庫的路徑對嗎?先確認libdirectfb-1.0.so.0的路徑,然後透過設定LD_LIBRARY_PATH或修改ld.so.conf + ldconfig來確定程式執行時會去搜尋並載入函式庫。

smikid 的留言 於 July 18, 2008

hi ykhuang:
如果我把directfb build出來的lib放到/usr/lib下就可以run了, 所以是沒指定lib的path
謝謝

ykhuang 的留言 於 July 19, 2008

smikid,
是的,你可以照我上一則留言寫的,去修改ld.so.conf,把你要新增的library路徑加在最後面,然後執行一次ldconfig就行了。

Joei85 的留言 於 July 19, 2008

Hi ykhuang,
我是需要移植gtk-directfb到mips平台上,我按照官方wiki在编译glibc2.16.0的时候,遇到
checking for iconv_open… no
checking for libiconv_open in -liconv… no
checking for iconv_open in -liconv… no
configure: error: *** No iconv() implementation found in C library or libiconv
这个问题。
libiconv gettext我都已经安装了。我想进去你上文所说的黑米的书签里看那篇文章,但是我打不开那个网页。
一下是config.log的错误记录:
#ifdef __cplusplus
| extern “C”
| #endif
| char libiconv_open ();
| int
| main ()
| {
| return libiconv_open ();
| ;
| return 0;
| }
configure:8027: result: no
configure:8036: checking for iconv_open in -liconv
configure:8071: mipsel-linux-gcc -o conftest -g -O2 -L/usr/local/lib conftest.c -liconv >&5
/smp8634/smp86xx_toolchain_2.8.3.0/build_mipsel_nofpu/staging_dir/bin-ccache/../lib/gcc/mipsel-linux-uclibc/4.0.4/../../../../mipsel-linux-uclibc/bin/ld: skipping incompatible /usr/local/lib/libiconv.so when searching for -liconv
/smp8634/smp86xx_toolchain_2.8.3.0/build_mipsel_nofpu/staging_dir/bin-ccache/../lib/gcc/mipsel-linux-uclibc/4.0.4/../../../../mipsel-linux-uclibc/bin/ld: cannot find -liconv
collect2: ld returned 1 exit status

请问这个问题是什么原因呢?谢谢

Joei85 的留言 於 July 19, 2008

原来是libiconv和gettext都需要用交叉编译器编译,再让glib去检测。libiconv搞好了,编译gettext-0.17却死活不过。
mbslen.c: In function ‘mbslen’:
mbslen.c:37: error: storage size of ‘iter’ isn’t known
mbslen.c:40: error: ‘mbstate_t’ undeclared (first use in this function)
make[4]: *** [mbslen.o] Error 1

ykhuang 的留言 於 July 20, 2008

Joei,
你這個iter跟mbstat的錯誤我遇過,不過不是在build GTK時碰上的,先從header files下手吧,先看看系統include裡面有沒有相關定義,如果沒有,也許gettext需要另一組kernel include

smikid 的留言 於 July 21, 2008

Hi ykhuang:
我在編譯cairo時出現以下錯誤, 我google了一下, 似乎找不到解法
/libfreetype.so: could not read symbols: File in wrong format
謝謝

smikid 的留言 於 July 21, 2008

cairo莫名奇妙又可以編譯過了, 糗!

ykhuang 的留言 於 July 21, 2008

smikid,

沒關係,有過就好 (y)

tiansun7k 的留言 於 July 24, 2008

ykhuang你好:
我把交叉编译好的相关库放到开发板上后,运行gtk-demo成功出现界面(可以在屏幕上看到一个鼠标点,一个满屏的大窗口,右边还有一个滚动条,窗口中间有很多个小方框这组成的行,估计是一些字体无法显示),但在minicom上死机(就是怎么操作都无法退出程序):
# ./gtk-demo

(gtk-demo:74): Gtk-WARNING **: Locale not supported by C library.
Using the fallback ‘C’ locale.

=======================| DirectFB 1.1.1 |=======================
(c) 2001-2007 The DirectFB Organization (directfb.org)
(c) 2000-2004 Convergence (integrated media) GmbH
————————————————————

(*) DirectFB/Core: Single Application Core. (2008-07-22 08:20)
(*) DirectFB/Core: calling sync()…
(*) Direct/Threa320*234 TFT LCD …
d: Running ‘VT Switcher’ (CRITICAL, 76)…

运行./arm-dfbg 1.jpg 的时候也能在屏幕上加载我自己的实例图片1.jpg,但是也会运行到
d: Running ‘VT Switcher’ (CRITICAL, 76)…
这一步死机了,按ctrl+c 也不行的,我想问问这种现象正常吗?

ykhuang 的留言 於 July 24, 2008

tiansun7k,

我想只要是死機應該就算不正常吧?我自己是沒遇過啦,雖然有很多警告訊息,但還是可以正常執行結束。

tiansun7k 的留言 於 July 25, 2008

这个VT Switcher是什么东西?两个实例程序都是到这个地方死掉了,我查了一下,是virtual terminal switcher,有人说可能是虚拟终端的管理出了问题,比如说虚拟终端分配的内存释放出问题,虚拟终端的管理 这部分是由谁负责的?跟我的硬件有关系吗?能具体到哪部分代码吗?比如directfb的代码,还是gtk+的?

ykhuang 的留言 於 July 25, 2008

tiansun7k,
這方面我就沒經驗了,不過我會覺得是DirectFB的問題。也許可以從debug message去看是在哪個元件裡面,然後重新configure看有沒有機會把該元件disable。

tiansun7k 的留言 於 July 29, 2008

死机的问题解决了,是因为我编译的inputerdriver的时候加了太多的没用的输入设备,由于我是在目标板上运行,硬件资源有限,而每加一个输入设备系统都要多一个进程,肯定会死机的。
当我继续运行测试程序的时候,经过测试,在运行arm-dfbg,和arm-info和在网上找的一个划线的小程序时可以完全正确运行,并且可以正常退出,而且没有任何报错和警告信息(除了: (!) Direct/Modules: Could not open module directory`/usr/local/dfb/lib/directfb-1.1-0/gfxdrivers’!
–> No such file or directory)因为编译的时候没有使用gfxdrivers,当然找不到gfxdrivers了!!

但是在运行gtk-demo的时候报了一个大家可能经常遇到的错误,不知道楼主能给指点一下,大该意思是我的fontconfig没有编译对?还是我的pango有问题?
======================| DirectFB 1.1.1 |=======================
(c) 2001-2007 The DirectFB Organization (directfb.org)
(c) 2000-2004 Convergence (integrated media) GmbH
————————————————————

(*) DirectFB/Core: Single Application Core. (2008-07-22 08:20)
(*) DirectFB/Core: calling sync()…
(*) Direct/Threa320*234 TFT LCD …
d: Running ‘VT Switcher’ (CRITICAL, 67)…
(*) Direct/Thread: Running ‘Keyboard Input’ (INPUT, 68)…
(*) DirectFB/Input: Keyboard 0.9 (directfb.org)
(!) Direct/Modules: Could not open module directory `/usr/local/dfb/lib/directfb-1.1-0-pure/gfxdrivers’!
–> No such file or directory
(*) DirectFB/Graphics: Generic Software Rasterizer 0.6 (directfb.org)
(*) DirectFB/Core/WM: Default 0.3 (directfb.org)
(*) FBDev/Mode: Testing 320×234 RGB16
(*) FBDev/Mode: Preparing switch to 320×234 RGB16
(*) FBDev/Mode: Testing 320×234 RGB16
(*) FBDev/Mode: Preparing switch to 320×234 RGB16
(*) FBDev/Mode: Testing 320×234 RGB16
(*) FBDev/Mode: Preparing switch to 320×234 RGB16
(*) FBDev/Mode: Testing 320×234 RGB16
(*) FBDev/Mode: Preparing switch to 320×234 RGB16
(*) FBDe320*234 TFT LCD …
v/Mode: Testing 320×234 RGB16
(*) FBDev/Mode: Preparing switch to 320×234 RGB16
(*) FBDev/Surface: Allocated 320×234 16bit RGB16 buffer at offset 0 and pitch 640.
(*) FBDev/Mode: (Post)Setting 320×234 RGB16
(*) FBDev/Mode: Switched to 320×234 (320×234) at 16 bit RGB16 (wanted RGB16).
(*) FBDev/Mode: Testing 320×234 RGB16
(*) FBDev/Mode: Preparing switch to 320×234 RGB16
(*) FBDev/Mode: (Post)Setting 320×234 RGB16
(*) Direct/Interface: Loaded ‘JPEG’ implementation of ‘IDirectFBImageProvider’.
(*) Direct/Thread: Running ‘EventBufferFeed’ (MESSAGING, 69)…

(gtk-demo:65): Pango-CRITICAL **: No fonts found:
This probably means that the fontconfig
library is not correctly configured. You may need to
edit the fonts.conf configuration file. More information
about fontconfig can be found in the fontconfig(3) manual
page and on http://fontconfig.org

(gtk-demo:65): Pango-WARNING **: failed to find shape engine, expect ugly output. engine-type=’PangoRenderFc’, script=’latin’

(gtk-demo:65): Pango-CRITICAL **: No fonts found:
This probably means that the fontconfig
library is not correctly configured. You may need to
edit the fonts.conf configuration file. More information
about fontconfig can be found in the fontconfig(3) manual
page and on http://fontconfig.org

(gtk-demo:65): Gdk-DirectFB-WARNING **: gdk_display_request_selection_notification Unimplemented function

(gtk-demo:65): Gdk-DirectFB-WARNING **: gdk_window_set_keep_above() not implemented.

(gtk-demo:65): Gdk-DirectFB-WARNING **: gdk_window_set_keep_below() not implemented.

** (gtk-demo:65): WARNING **: Cannot find demo data file “appwindow.c”

ykhuang 的留言 於 July 30, 2008

tiansun7k,
要不要檢查fontconfig相關的library有沒有正確安裝到開發板上?再來是開發板上的字型相關檔案是不是有正確設定?我想都可以執行到這一步了,編譯過程應該是沒有問題才是…

tiansun7k 的留言 於 August 1, 2008

谢谢ykhuang。
现在我有个新的问题,我自己作了个键盘,驱动也已经加载进内核了,确定可以用,我现在想通过按下键盘的上下左右键来获得我界面上的焦点,听人说好像要修改Directfb的源码,把我的驱动加进去,具体的该怎么修改,在哪个部分(哪文件夹下的哪个文件),請指教了.
比如上,下,左,右,确定,这五个键来控制我简单界面上的按钮,比如有1,2,两个按钮,通过按动键盘上左右两个键使焦点在界面上1和2两个按钮上切换,按确定键就可以调用对应那个按钮的回掉函数,进入下个界面之类的功能
有人曾经说过:需要修改波特率,这个波特率具体是哪部分的波特率,更directfb有关吗?可不可以具体一下?

tiansun7k 的留言 於 August 7, 2008

我这几天把自定义的键盘的驱动通读了一遍,编了个应用程序,能够在终端上捕获键值了,可是在读directfb-1.1.1/inputdrivers/keyboard.c这个文件时,发现他的结构并不是标准的字符设备驱动
我现在想向ykhuang你确定一下,一般情况下,要想获得键值需要先open这个设备,让然后在read就可以了,但是在keyboard.c这个文件里没有main主函数,只有这几个函数:
keyboard_get_symbol (),keyboard_get_identifier(),keyboard_read_value(),keyboard_set_lights (),keyboardEventThread(),driver_get_available(),driver_get_info(), driver_open_device(),driver_get_keymap_entry(),driver_close_device()
在这几个函数里,只有在driver_open_device()函数里的调用direct_thread_create()–>keyboardEventThread( ) 里有一个:
readlen = read (data->vt->fd, buf, 64)
整个.c文件里只有这个地方用到了read系统调用,
我想问问,底层的硬件键值是不是从这里传递过来的?
directfb是通过什么得到这个键值的,他的键盘事件的触发是基于什么的?
还有人说可以将自定义的键盘输入转换为tty设备的输入,并使dfb直接用linux的tty设备作为输入,哪位高人知道这种方法,可不可以拿上来分享一下?

kendych 的留言 於 August 11, 2008

我最近也在弄这个, 准备在2440上跑,目前编译完成了,当目前字符显示不出来,好像还有些慢.

Sword 的留言 於 August 13, 2008

Hi,

Sword 的留言 於 August 13, 2008

我的GTK+DirectFB也已经编通,正在进行一个简单的按键驱动的集成工作,或许可以多多沟通合作,我的邮件sword_lzr@hotmail.com

我看了keypad的驱动,似乎需要在两个地方做改动:
1.修改 fd = open( “/dev/tty0″, O_RDWR | O_NOCTTY );
为我们自己的键盘/dev/button

2.修改 键值映射表,我的键值是1,2,3…9

你现在进展如何,欢迎email与我联系交流

Will 的留言 於 August 19, 2008

我把GTK+和DirectFB交叉編輯完成後放入隨身碟內並插入開發板上,照著網路上的說明做好組態檔pango.modules和gdk_pixbuf.loaders , 然後執行gtk-demo或是我自己做的helloworld時會出現” Bus error ” 就沒動作了, 請問有人可以給個建議嗎?

因為整個GTK+和DirectFB的檔案是掛在隨身碟上 , 我是懷疑系統沒有動作 , 但是我不清楚如何測試 , 像我這樣從外部掛載的做法是否要先執行某些程式來初始化??

要留言乎?