前章まででCoLinuxで、SHボード用バイナリが作成できるようになりました。こんどは、Qt/Embeddedをインストールして見ましょう。QtやQt/EmbeddedについてはWebを検索すると沢山の解説が見つかります。その中で、非常に分かりやすく解説されているページがありますので紹介しておきます。
とりあえず早く動かして見たいという方は、導入までの手順を簡単にまとめましたので、次の「Qt/Embeddedのインストール」から実行してみてください。

このページを読むとQtがどんなものかが分かります。

  • Qt/Embeddedのコンパイル
    以降の説明をSH4用として説明します。SH3用の場合は4を3に変更してください。
    1. 展開
      $ tar xvzf qt-embedded-free-3.3.5.tar.gz
    2. コンパイル準備(QMake環境)
      sh4用のqmake.confを用意します。
      $ cd qt-embedded-free-3.3.5$ cp -a mkspecs/qws/linux-generic-g++ mkspecs/qws/linux-sh4-g++$ vi mkspecs/qws/linux-sh4-g++/qmake.conf
      既に用意してあるlinux-generic-g++からコピーして、qmake.confの次の5箇所を変更します。
      QMAKE_CC = sh4-linux-gcc . .QMAKE_CFLAGS_RELEASE = -O . .QMAKE_CXX = sh4-linux-g++ . .QMAKE_LINK = sh4-linux-g++QMAKE_LINK_SHLIB = sh4-linux-g++
    3. コンフィグレーション
      $ ./configure -embedded sh4-linux -platform qws/linux-x86-g++ \ -xplatform qws/linux-sh4-g++ -shared -thread -verbose -release \ -qt-gif -freetype -depths 16 -qt-gfx-vnc -qt-gfx-transformed -no-cupsDo you accept the terms of the license? yes
    4. コンパイル
      $ make sub-src$ make sub-plugins
  • 動かしてみよう
    1. サンプルプログラムのコンパイル
      $ cd example/hello$ make
    2. ターゲット機から実行する
       NFSマウントします。# mount 192.168.7.**:/home/name /mnt -o tcp,ro -t nfs 環境変数を設定します。 (とりあえず、これでインストールしたことになります)$ export QTDIR=/mnt/qt-embedded-free-3.3.5$ export LD_LIBRARY_PATH=$QTDIR/lib とりあえずコンパイルしたサンプルプログラムのあるフォルダへ移動。$ cd /mnt/qt-embedded-free-3.3.5/example/hello ターゲット機にフレームバッファが存在する場合。$ ./hello -qws ターゲット機にフレームバッファがない場合はこちら。 こうするとWindowsのVNCビューアで表示することが出来ます。$ ./hello -qws -display VNC
  • 問題点
    Qt/EmbeddedはX環境をインストールすることなく、Qtを使うことが出来るので、Qtと比べると随分コンパクト、かつ手軽に、グラフィカルな環境を提供してくれます。しかし、Embeddedの世界(Catのようなマイコンボード上)での使用を考えるともう少しファイルサイズを小さくしたいですね。
    上で説明した手順で作成した場合、ライブラリが約9MByte弱。フォントが15MByteほど準備(登録)されています。
  • ダイエット その1 [フォントの数を減らす]
    • TrueType (TTF) - WindowsとMacで現在標準のスケーラブルフォント
    • Postscript Type1 (PFA/PFB) - プリンタでよく使われるスケーラブルフォント
    • Bitmap Distribution Format fonts (BDF) - 非スケーラブルフォントの標準
    • Qt Prerendered Font (QPF) - Qt/Embedded 専用の軽量の非スケーラブルのフォントQt/Embeddedは上記4つのフォントをサポートしています。
      ※トロールテック社のドキュメントにはBDFの使用を推奨していません。ロードに時間がかかる。メモリを消費する。とあり、QPFにレンダリングしてから使用することを進めています。
 3109 fixed_120_50.qpf 2567 fixed_70_50.qpf 0 fontdir 3046 helvetica_100_50.qpf 3301 helvetica_120_50.qpf 3860 helvetica_140_50.qpf 5179 helvetica_180_50.qpf 7691 helvetica_240_50.qpf 2735 helvetica_80_50.qpf 1602 micro_40_50.qpf 1629 mkfontdir-qws 9892 smallsmooth_90_50.qpf 1215089 unifont_160_50.qpf total 1263796 Byte (1264 KByte)

インストール直後15MByteほど登録されているフォントには、いろいろなサイズ、書体、飾りのものが含まれています。これから開発していくアプリケーションに必要なものだけをピックアップしてフォントの数を減らしましょう。
上記の場合で約1.3MByteです。日本語を表示することを考えると最低1MByteは必要になると思います。

  • ダイエット その2 [ライブラリの機能を削る]
    つぎにconfigureの設定を変えて、使用しない機能を削除し、コンパクトなライブラリを作ってみましょう。(それほど、小さくはなりませんが...)
    先に説明した手順でのconfigureのパラメータのうち、機能に関するものをピックアップすると、
 -shared :共有ライブラリ -thread :マルチスレッドサポート -release :リリース(デバッグOFF) -qt-gif :gifのサポート -freetype :スケーラブル フォント サポート -depths 16 :グラフィック画面の色数(ビット) -qt-gfx-vnc :VNCサポート -qt-gfx-transformed:グラフィック画面の回転

などがあります。
この状態で、libqte-mt.so.3.3.5のサイズは 9,228,719 byte です。
この状態から機能をひとつずつ削除(オプションを追加)してLibのサイズがどれくらい変化するか調べてみました。

追加したオプション libのサイズ ダイエット分-qt-gfx-transformed 9,204,325 -24,394 (※削除したオプション)-qt-gfx-vnc 9,174,282 -30,043 (※削除したオプション)-no-freetype 8,729,358 -444,924-disable-opengl 8,729,358 0-disable-sql 8,340,648 -388,710-disable-xml 7,961,825 -378,823-no-style-??? <cde,compact,motif,motifplus,platinum,sgi> 7,827,833 -133,992-disable-iconview 7,675,393 -152,440-disable-table 7,515,166 -160,227-disable-workspace 7,421,794 -93,372-disable-canvas 7,304,019 -117,775-disable-network 7,002,379 -301,640
  • qt-gfx-transformed 24,394 byte
    回転フレームバッファ
  • qt-gfx-vnc 30,043 byte
    VNCサーバー機能
  • no-freetype 444,924 byte
    スケーラブルフォント表示ライブラリ
  • disable-opengl
    OpenGLライブラリはもともと組み込まれていないのサイズも変わりません。
  • disable-sql 388,710 byte
    SQLモジュール データベースを扱うライブラリです。
  • disable-xml 378,823 byte
    XMLモジュール XMLフォーマットパーサーです。
  • no-style-??? <cde,compact,motif,motifplus,platinum,sgi> 133,992 byte
    スタイル関係。とりあえずwindows意外を全て外してみました。
  • disable-iconview 152,440 byte
    アイコンビューモジュール。Windowsのデスクトップのように、ドラッグやリネームのできるアイコン表示用モジュール。
  • disable-table 160,227 byte
    テーブルモジュール。エクセルのような表を作成するモジュールです。
  • disable-workspace 93,372 byte
    ワークスペースモジュール。マルチドキュメントインターフェイス (MDI) 用です。
  • disable-canvas 117,775 byte
    キャンバスモジュール。高度な2Dのドロー系のグラフィックを扱うモジュールです。
  • disable-network 301,640 byte
    ネットワークモジュール。TCP/IPソケットクラス含むサーバ、クライアント、FTPなどネットワーク関係のモジュールです。

以上、作成するアプリケーションによっては削除できるのでは?というものをピックアップして、実際にビルドしてみました。
結果、全て適応(削除)すると 2,226,340 byte ダイエットできました。
それでも、まだ、7MByteあります。
でも、フォントとライブラリで8MByte、何とかCAT760のROMに収められるサイズになりました。
Qtはライブラリが大きい分、作成するアプリケーションサイズはかなり小さく出来ます。コンテンツまでは難しいですが、アプリケーション本体までは何とか内蔵ROMに収めれるのではないでしょうか。

用意したQt/Embeddedをターゲット機へインストールするのは非常に簡単です。
環境を構築したフォルダ、今回の場合は「qt-embedded-free-3.3.5」にある「lib」というフォルダをターゲットへコピーするだけです。(libフォルダにはfontsといサブフォルダもあります)
コピー先は任意ですが、ここでは「/usr/qte」へコピーします。

  • ターゲット機から
    # mkdir /usr/qte# cp /mnt/qt-embedded-free-3.3.5/lib /usr/qte -a$ export QTDIR=/usr/qte$ export LD_LIBRARY_PATH=$QTDIR/lib

自動リンク