0

Linux 2.6.35.3(Freescaleが提供)を実行しているi.MX53プロセッサ(ARM Cortex-A8コア)に基づく組み込みシステムで使用するために、動作するdirectfbを取得しようとしています。

i686Debianホストシステムにクロスコンパイラをインストールしました。クロスコンパイラはembedian.orgアーカイブからのものであり、gcc-4.3-arm-linux-gnueabiパッケージ(arm-linux-gnueabi-gcc (Debian 4.3.2-1.1) 4.3.2)です。これはglibc2.7に付属しています。これは、ターゲットシステムのバージョンであるglibc 2.11とは異なるバージョンですが、私の読書では互換性があるはずだと示唆しています。

システムイメージにすでに存在するライブラリで多くの実験を行った後、directfb1.6.2を正常にコンパイルすることができました。これは、すでにインストールされているライブラリのpkg-config情報が機能していないために複雑になりましたが、最終的には、次のconfigureコマンドラインを使用してコンパイルするように説得することができました。

TOP=`realpath ../..`
PKG_CONFIG_PATH=${TOP}/ext/libpng-1.5.13/ \
LIBPNG_CFLAGS=-I${TOP}/include \
LIBPNG_LDFLAGS="-L${TOP}/libs -lpng15 -lz" \
FREETYPE_CFLAGS=-I${TOP}/include \
FREETYPE_LIBS="-L${TOP}/libs -lfreetype" \
LIBS="-lgcc_s -lgcc -ldl -lstdc++ -lz" \
CFLAGS="-march=armv7-a" \
CXXFLAGS="-march=armv7-a" \
./configure CC=arm-linux-gnueabi-gcc CPPFLAGS=-I${TOP}/include LDFLAGS=-L${TOP}/lib \
   --build=i686-linux --host=arm-linux-gnueabi \
   --enable-static --disable-shared \
   --disable-freetype --enable-fbdev --disable-x11 \
   --with-gfxdrivers=none --with-inputdrivers=none

これは正常にビルドされ、 http://directfb.org/docs/DirectFB_Tutorials/simple.htmlにある簡単なチュートリアルアプリケーションに基づいてサンプルアプリケーションをコンパイルおよびリンクできます。残念ながら、ターゲットシステムで実行すると、アプリケーションは次のようにクラッシュします。 SIGSEGV。また、directfbに含まれているツールの一部(dfbinfoなど)も同様です。

これが私のテストアプリケーションのクラッシュのスタックトレースです(コマンドライン引数 "--dfb:fbdev = / dev / fb0"で実行した場合):

#0  direct_map_lookup (map=0x0, key=0xdfd70) at map.c:298
#1  0x000b2d9c in direct_config_set (name=0xdfd70 "fbdev",
    value=0xdfd76 "/dev/fb0") at conf.c:542
#2  0x0009edc0 in dfb_config_set (name=0xdfd70 "fbdev",
    value=0xdfd76 "/dev/fb0") at conf.c:2024
#3  0x000a2dcc in parse_args (args=0x7ea80d53 "fbdev=/dev/fb0") at conf.c:297
#4  0x000a305c in dfb_config_init (argc=0x7ea80968, argv=0x7ea80964)
    at conf.c:2159
#5  0x0000cd58 in Display::Display ()
#6  0x0000ba94 in main ()

参考までに、クラッシュ前にアプリケーションで実行する唯一のdirectfb関連のコードは、チュートリアルコードから直接コピーされます。

Display::Display(int argc, char ** argv)
{
   DFBSurfaceDescription dsc;       
   DFBCHECK (DirectFBInit (&argc, &argv));  
   // ... crash occurs during execution of the line above
}

これは私のメイン関数から直接呼び出され、元の変更されていないargcとargvを渡します。

ターゲットシステムの/usr/ local / libにdirectfbライブラリをインストールし、/ usr / local / binにバイナリをインストールし、/ usr / local / share / directfb-1.6.2(cursor.datとdecker.dgiffを含む)を作成しました。 )およびドキュメントで提案されている/etc/fb.modes。

私が間違ったことについて何か提案はありますか?

4

1 に答える 1

0

git.directfb.orgからconf.cとmaps.cのソースコードを読み取り、スタックをチェックしています...

#0  direct_map_lookup (map=0x0, key=0xdfd70) at map.c:298
#1  0x000b2d9c in direct_config_set (name=0xdfd70 "fbdev", value=0xdfd76 "/dev/fb0") at conf.c:542

マップがnullです。これはmap.c:295でアサートする必要がありますが、無効になっているように見えますが、代わりに298でクラッシュします

hash = map->hash( map, key, map->ctx );

前の呼び出しはconf.c:542にあり、

ConfigOption *option = direct_map_lookup( config_options, name );

これは、config_optionsがであったことを意味しnullます。そのファイルをファイルに割り当てられる場所でのみ検索するのは__D_conf_init()です。

directfbについては何も知りませんが、__D_conf_init直接または間接的に呼び出す必要があるようです。

于 2012-10-11T07:25:42.493 に答える