DirectFBでARM環境をグラフィカル表示~その②
サンプルプログラム
DirectFBでARM環境をグラフィカル表示~その① - keropoの備忘録の続き。
ARMクロスコンパイルしたDirectFBのライブラリ群が完成したので、それを利用してqemuで動かす為のサンプルプログラムを作成する。
作成したのは赤・緑・青のタスキ表示するプログラム(main.c)。
#include <stdio.h> #include <unistd.h> #include <directfb.h> #define DFBCHECK(x...) \ { \ DFBResult err = x; \ \ if (err != DFB_OK) \ { \ fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ ); \ DirectFBErrorFatal( #x, err ); \ } \ } int main(int argc, char **argv) { IDirectFB *dfb = NULL; IDirectFBSurface *primary = NULL; int width = 0; int height = 0; int i = 0; DFBSurfaceDescription dsc; /*init directfb*/ DFBCHECK(DirectFBInit(&argc, &argv)); /*create interface*/ DFBCHECK(DirectFBCreate(&dfb)); /*フルスクリーン表示設定*/ DFBCHECK(dfb->SetCooperativeLevel(dfb, DFSCL_FULLSCREEN)); /*サーフェスの内容を設定*/ dsc.flags = DSDESC_CAPS; dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING; /*サーフェスの作成*/ DFBCHECK(dfb->CreateSurface(dfb, &dsc, &primary)); /*画面サイズを取得*/ DFBCHECK(primary->GetSize(primary, &width, &height)); /*赤・緑・青を表示*/ primary->SetColor(primary, 0xff, 0, 0, 0x7f); DFBCHECK(primary->FillRectangle(primary, 0, 0, 215, height)); primary->SetColor(primary, 0, 0xff, 0, 0x7f); DFBCHECK(primary->FillRectangle(primary, 216, 0, 430, height)); primary->SetColor(primary, 0, 0, 0xff, 0x7f); DFBCHECK(primary->FillRectangle(primary, 431, 0, width, height)); DFBCHECK(primary->Flip(primary, NULL, 0)); sleep(10); primary->Release(primary); dfb->Release(dfb); return 0; }
作成したサンプルプログラムをコンパイル
export TARGET=arm-unknown-linux-gnueabi export CROSS=${クロスコンパイラのルートパス} export SYSROOT=$CROSS/$TARGET/sysroot export PATH=$PATH:$CROSS/bin arm-unknown-linux-gnueabi-gcc -o samplefb main.c \ -I${SYSROOT}/usr/include/directfb \ -I${SYSROOT}/usr/include/directfb-internal \ -L${SYSROOT}/usr/lib -lpthread -ldirect -ldirectfb -lfusion
qemu実行環境の作成
作成したサンプルプログラムをqemuで実行する為、qemu実行用のルートファイルシステムイメージにDirectFD用のライブラリをコピーする。
ただ、DirectFBのライブラリだけコピーするのはめんどくさいので、DirectFBでARM環境をグラフィカル表示~その① - keropoの備忘録でクロスコンパイラのライブラリフォルダにDirectFBのライブラリも出力されているので、全てのライブラリをルートファイルシステムイメージにコピーしてしまう。
$cp -Rp ${SYSROOT}/lib/*.so* ${ルートイメージ}/lib $cp -Rp $CROSS/$TARGE/lib/*.so* ${ルートイメージ}/lib $cp -Rp ${SYSROOT}/usr/lib/*.so* ${ルートイメージ}/usr/lib $cp -Rp ${SYSROOT}/usr/lib/directfb-1.4-0 ${ルートイメージ}/usr/lib
そして、ルートにdirectfbの設定ファイルを作成する。
$vi ${ルートイメージ}/.directfbrc system=fbdev module-dir=/usr/lib/directfb-1.4-0/ fbdev=/dev/fb0 mode=640x480 depth=16
最後にルートに作成したサンプルプログラムをコピー
$cp samplefb ${ルートイメージ}