Howto

DirectFBのビルド

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-240のカーネルイメージのサイズが大きくなり過ぎて、フラッシュメモリに保存できなくなる可能性があります。フラッシュメモリのカーネルリージョンを拡張するには、「フラッシュメモリのパーティションテーブルの変更」を参考にしてください。

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を実行したときの画面です。

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)