ArmadilloでDirectFBを動かしてみましょう。
DirectFBとは、Linux Frame Buffer上で動作するGraphics APIです。
DirectFB上で動作することができるアプリケーションも色々とあるようです。
- DFBTerm(ターミナルソフト)
- DirectVNC(VNCクライアント)
などがあります。
今回のDirectFBの動作確認には、Input Deviceの確認やベンチマークテストまで含まれているDirectFB-examplesを使用してみます。
1. ソースコードの取得
ソースコードは、DirectFB のページ(現在アクセスできません。代わりに DirectFBのメンテナーが Githubにコードを公開しています)から取得します。
以下のようにコマンドを入力して取得してください。
[PC ~]$ mkdir directfb
[PC ~]$ cd directfb
[PC ~/directfb]$ wget http://www.directfb.org/downloads/Core/DirectFB-1.0.1.tar.gz
[PC ~/directfb]$ wget http://www.directfb.org/downloads/Extras/DirectFB-examples-1.0.0.tar.gz
続いてアーカイブを展開していきます。
[PC ~/directfb]$ tar zxvf DirectFB-1.0.1.tar.gz
[PC ~/directfb]$ tar zxvf DirectFB-examples-1.0.0.tar.gz
[PC ~/directfb]$ ls
DirectFB-1.0.1 DirectFB-examples-1.0.0
DirectFB-1.0.1.tar.gz DirectFB-examples-1.0.0.tar.gz
2. 準備
DirectFBのクロスビルドには、様々なクロス開発パッケージが必要となってきます。
弊社で提供しているパッケージの他に、次のパッケージをインストールしておきます。
libfreetype6-arm-cross
libfreetype6-dev-arm-cross
libjpeg62-arm-cross
libjpeg62-dev-arm-cross
libpng12-0-arm-cross
libpng12-dev-arm-cross
パッケージの作成についての詳細は、「クロス開発用ライブラリをインストールする方法」を参照してください。
また、通常(ホスト用)のlibfreetype6-devパッケージがインストールされているとDirectFBのビルドがよりスムースに行きます。以下のようにインストールしてください。
[PC ~/directfb]$ sudo apt-get install libfreetype6-dev
次にビルドスクリプトを取得してください。
[PC ~/directfb]$ wget https://download.atmark-techno.com/misc/demos/directfb-howto-v2/build-directfb-for-arm.sh
[PC ~/directfb]$ wget https://download.atmark-techno.com/misc/demos/directfb-howto-v2/prepare-directfb-example-for-arm.sh
[PC ~/directfb]$ wget https://download.atmark-techno.com/misc/demos/directfb-howto-v2/install-directfb-for-arm.sh
スクリプトを実行可能にします。
[PC ~/directfb]$ chmod 755 build-directfb-for-arm.sh
[PC ~/directfb]$ chmod 755 prepare-directfb-example-for-arm.sh
[PC ~/directfb]$ chmod 755 install-directfb-for-arm.sh
DirectFBとDirectFB-examplesのディレクトリ名を変更します。
[PC ~/directfb]$ mv DirectFB-1.0.1 DirectFB
[PC ~/directfb]$ mv DirectFB-examples-1.0.0 DirectFB-examples
[PC ~/directfb]$ ls
DirectFB build-directfb-for-arm.sh
DirectFB-1.0.1.tar.gz install-directfb-for-arm.sh
DirectFB-examples prepare-directfb-example-for-arm.sh
DirectFB-examples-1.0.0.tar.gz
これで準備は完了です。
3. DirectFBのビルド
DirectFBのビルドを行っていきましょう。build-directfb-for-arm.sh
スクリプトを使って行います。
[PC ~/directfb]$ ./build-directfb-for-arm.sh
:
:
----
Configuring directfb ...
----
:
:
----
Making directfb ... (will take some time)
----
:
:
----
Installing directfb to temp directory ...
----
:
:
/usr/bin/install -c -m 644 'directfb.pc' '/home/hoge/directfb/DirectFB/install/usr/local/lib/pkgconfig/directfb.pc'
/usr/bin/install -c -m 644 'directfb-internal.pc' '/home/hoge/directfb/DirectFB/install/usr/local/lib/pkgconfig/directfb-internal.pc'
make[2]: ディレクトリ `/home/hoge/directfb/DirectFB' から出ます
make[1]: ディレクトリ `/home/hoge/directfb/DirectFB' から出ます
make: ディレクトリ `/home/hoge/directfb/DirectFB' から出ます
[PC ~/directfb]$
4.DirectFB-examplesの準備
次はDirectFB-examplesの準備です。
prepare-directfb-example-for-arm.sh
スクリプトを使います。
[PC ~/directfb]$ ./prepare-directfb-example-for-arm.sh
----
Configuring directfb examples ...
----
:
:
config.status: creating src/Makefile
config.status: creating src/df_knuckles/Makefile
config.status: creating src/df_neo/Makefile
config.status: creating src/spacedream/Makefile
config.status: executing depfiles command
[PC ~/directfb]$
5. インストールアーカイブの作成
install-directfb-for-arm.sh
スクリプトを使用してアーカイブを作成します。
[PC ~/directfb]$ ./install-directfb-for-arm.sh
----
install: directfb --> add-to-rootfs
----
----
install: directfb examples --> add-to-rootfs
----
:
:
----
install: setup script --> add-to-rootfs
----
----
archive: add-to-rootfs --> add-to-rootfs.tar.gz
----
[PC ~/directfb]$ ls
DirectFB DirectFB-examples-1.0.0.tar.gz build-directfb-for-arm.sh
DirectFB-1.0.1.tar.gz add-to-rootfs install-directfb-for-arm.sh
DirectFB-examples add-to-rootfs.tar.gz prepare-directfb-example-for-arm.s
ここで作成された「add-to-rootfs.tar.gz」がインストールアーカイブとなります。
6. カーネルの変更
Armadillo-240の場合、カーネルのコンフィグレーションでフレームバッファのコンソールサポートを有効にします。
※今回はlinux-2.6.12.3-a9-11を使用することとします。
Device Drivers --->
Character devices --->
[*] Virtual terminal
Graphics support --->
Console display driver support --->
[ ] VGA text console
< > MDA text console (dual-headed) (EXPERIMENTAL)
<*> Framebuffer Console support
[*] Select compiled-in fonts
[*] VGA 8x8 font
[*] VGA 8x16 font
Armadillo-9でマウスを使う場合は、以下のように設定する必要があります。
Device Drivers -->
Input device support -->
--- Userland interface
<span class="input"><*> Event interface</span>
7. イメージの作成
カーネルの設定を変更したら、イメージの作成を行います。
※イメージの作成方法はソフトウェアマニュアル等を参照してください。
[PC ~]$ ls
atmark-dist-20071018 directfb linux-2.6.12.3-a9-11
[PC ~]$ cd atmark-dist-20071018
[PC ~/atmark-dist-20071018]$ make
次にデフォルトのromfsディレクトリに先ほど作成したadd-to-rootfs.tar.gzを展開します。
そして再度イメージを作成しなおします。
[PC ~/atmark-dist-20071018]$ cd romfs
[PC ~/atmark-dist-20071018/romfs]$ tar zxvf ../../directfb/add-to-rootfs.tar.gz
[PC ~/atmark-dist-20071018/romfs]$ cd ..
[PC ~/atmark-dist-20071018]$ make romfs image
[PC ~/atmark-dist-20071018]$ ls images
linux.bin linux.bin.gz romfs.img romfs.img.gz
作成したlinux.bin.gzとromfs.img.gzをArmadilloに書き込みます。
8. 動作確認
イメージの書き込みが終わったら、Armadilloを起動させ
ログインしましょう。
ログイン後、次のコマンドを入力し、setupさせます。
[armadillo ~]# ./directfb_setup.sh
これでDirectFBが動作する環境は整いました。
df_windowを実行したときの画面です。
df_dokでベンチマークを実行した結果です。
[armadillo ~]# df_dok
=======================| DirectFB 1.0.1 |=======================
(c) 2001-2007 The DirectFB Organization (directfb.org)
(c) 2000-2004 Convergence (integrated media) GmbH
------------------------------------------------------------
:
:
Benchmarking with 256x256 in 16bit mode... (16bit)
Anti-aliased Text 3.135 secs ( 26.411 KChars/sec)
Anti-aliased Text (blend) 3.145 secs ( 4.578 KChars/sec)
Fill Rectangle 3.054 secs ( 32.188 MPixel/sec)
Fill Rectangle (blend) 7.168 secs ( 0.914 MPixel/sec)
Fill Rectangles [10] 4.028 secs ( 32.540 MPixel/sec)
Fill Rectangles [10] (blend) 71.168 secs ( 0.920 MPixel/sec)
Fill Triangles 3.127 secs ( 25.149 MPixel/sec)
Fill Triangles (blend) 3.611 secs ( 0.907 MPixel/sec)
Draw Rectangle 3.015 secs ( 2.918 KRects/sec)
Draw Rectangle (blend) 3.208 secs ( 0.436 KRects/sec)
Draw Lines [10] 3.017 secs ( 10.938 KLines/sec)
Draw Lines [10] (blend) 3.473 secs ( 2.015 KLines/sec)
Fill Spans 3.172 secs ( 28.925 MPixel/sec)
Fill Spans (blend) 7.204 secs ( 0.909 MPixel/sec)
Blit 3.277 secs ( 15.999 MPixel/sec)
Blit colorkeyed 3.737 secs ( 7.014 MPixel/sec)
Blit destination colorkeyed 5.151 secs ( 2.544 MPixel/sec)
Blit with format conversion 5.700 secs ( 2.299 MPixel/sec)
Blit with colorizing 4.378 secs ( 1.496 MPixel/sec)
Blit from 32bit (blend) 5.747 secs ( 1.140 MPixel/sec)
Blit from 32bit (blend) with colorizing 13.146 secs ( 0.498 MPixel/sec)
Stretch Blit 4.658 secs ( 13.926 MPixel/sec)
Stretch Blit colorkeyed 11.735 secs ( 5.527 MPixel/sec)