Linux Zaurus (SLシリーズ) を購入することを前提に FreeBSD (4.7-R) 上に Qt/Embedded, Qtopia の開発環境を構築中。 以下はそのメモ。メモ書き以上のものではないので不備は御容赦。 ただし、以下の方法で作成したアプリケーションは実機上で 一応動作しているそうです。
Linux Zaurus (SLシリーズ) を購入することを前提に FreeBSD (4.7-R) 上に Qt/Embedded, Qtopia の開発環境を構築中。 以下はそのメモ。メモ書き以上のものではないので不備は御容赦。 ただし、以下の方法で作成したアプリケーションは実機上で 一応動作しているそうです。
シャープが供給するツールチェインは Linux/i386 ホスト用に 作成されているので、まず Linux 互換環境をインストール。 ついでにシンボリックリンクもはっておく。
# cd /usr/ports/emulators/linux_base # make install # ln -s /compat/linux/opt /opt
シャープの開発者向けページからコンパイラ、ライブラリ、ヘッダファイル、 ユーティリティをダウンロード。
rpm でインストール。
# rpm -Uvh -i --ignoreos --root /compat/linux gcc-cross-sa1100-2.95.2-0.i386.rpm glibc-arm-2.2.2-0.i386.rpm linux-headers-arm-sa1100-2.4.6-3.i386.rpm binutils-cross-arm-2.11.2-0.i386.rpm
これでコマンドラインものの開発準備は完了。試しに、
% cat > hello.c #include <stdio.h> int main() { printf("hello\n"); } ^D % env CC=/opt/Embedix/tools/bin/arm-linux-gcc make hello /opt/Embedix/tools/bin/arm-linux-gcc -O -pipe hello.c -o hello %
つづいて GUI 環境も含めた開発環境の構築に進む。 ツールキットは Qt/Embedded, デスクトップ環境は Qtopia 。 いずれも TrollTech 社から供給される。 TrollTech の FTPサイト から、
qt-embedded-2.3.4.tar.gz qtopia-free-1.6.0.tar.gz tmake-1.11.tar.gz qt-x11-2.3.2.tar.gz
をダウンロードする。つづいて以下のようにソースを展開。
% mkdir /opt/Qtopia % mkdir /opt/Qtopia/src % mkdir /opt/Qtopia/src/sharp % cd /opt/Qtopia/src/sharp % tar xzf <somewhere>/qtopia-free-1.6.0.tar.gz % tar xzf <somewhere>/qt-embedded-2.3.4.tar.gz
コンパイルは下のようなシェルスクリプトで行った。
#!/bin/sh export PATH=/opt/Embedix/tools/bin:$PATH cd /opt/Qtopia/src/sharp/qtopia-free-1.6.0 export QPEDIR=$PWD cd ../qt-2.3.4 export QTDIR=$PWD export QTEDIR=$QTDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH rm -f src/tools/qconfig-qpe.h cp $QPEDIR/src/qt/qconfig-qpe.h src/tools || exit 2 ./configure -qconfig qpe -qvfb -depths 4,8,16,32 -xplatform linux-sharp-g++ && gmake sub-src
つづいて Qtopia のコンパイルに進むが、下準備が必要。
TrollTech の Makefile ジェネレータ tmake を準備する。 Perl スクリプトなので、アーカイブを展開して、環境変数を設定する だけでよい。 また、シャープの開発者向けサイトには、 SLシリーズ用の tmake 設定ファイルが置いてあるが、 tmake-1.11 にはすでに含まれているので不要。
% cd /opt/Qtopia % tar xzf <somewhere>/tmake-1.11.tar.gz % mv tmake-1.11 tmake
Qtopia は UUIDライブラリを必要とするので、適当に作る。
% cd /opt/Qtopia/src % fetch http://us.dl.sourceforge.net/e2fsprogs/e2fsprogs-1.27.tar.gz % tar xzf e2fsprogs-1.27.tar.gz % cd e2fsprogs-1.27 % ./configure % (cd util; make subst) % util/subst -f util/subst.conf lib/ext2fs/ext2_types.h.in > lib/ext2fs/ext2_types.h
つづいて以下の Makefile を e2fsprogs-1.27/lib/uuid にコピー、 コンパイル。
TOOLCHAIN = /opt/Embedix/tools/bin CC = ${TOOLCHAIN}/arm-linux-gcc CFLAGS = -I.. AR = ${TOOLCHAIN}/arm-linux-ar rc RANLIB = ${TOOLCHAIN}/arm-linux-ranlib OBJS = clear.o compare.o copy.o gen_uuid.o isnull.o pack.o parse.o unpack.o unparse.o uuid_time.o TARGET = libuuid.a ${TARGET}: ${OBJS} ${AR} $@ ${OBJS} ${RANLIB} $@ % cp <somewhere>/Makefile lib/uuid % cd lib/uuid % make
できた libuuid.a と uuid.h をそれぞれコピー。
# cp libuuid.a /opt/Embedix/tools/arm-linux/lib # mkdir /opt/Embedix/tools/arm-linux/include/uuid # cp uuid.h /opt/Embedix/tools/arm-linux/include/uuid
Qt/X11 版のコンパイルを行う。 Qtopia のコンパイルに uic 、 また後のネィティブ版の実行に qvfb が必要なため。 コンパイル時 -static にしておくとあとあと楽。 また、Qt/X11 の他のバージョンがインストールされているときは、 アーカイブ展開の後、以下のパッチをあてること。
--- qt-2.3.2/src/Makefile.in.orig Tue Mar 25 00:18:01 2003 +++ qt-2.3.2/src/Makefile.in Tue Mar 25 00:18:18 2003 @@ -3,7 +3,7 @@ ####### Compiler, tools and options CXX = $(SYSCONF_CXX) $(QT_CXX_MT) -CXXFLAGS= $(SYSCONF_CXXFLAGS_OPENGL) $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS_X11) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB) $(QT_CXXFLAGS_OPT) +CXXFLAGS= $(SYSCONF_CXXFLAGS_QT) $(SYSCONF_CXXFLAGS_OPENGL) $(SYSCONF_CXXFLAGS_X11) $(SYSCONF_CXXFLAGS) $(SYSCONF_CXXFLAGS_LIB) $(QT_CXXFLAGS_OPT) CC = $(SYSCONF_CC) $(QT_C_MT) CFLAGS = $(SYSCONF_CFLAGS) $(SYSCONF_CFLAGS_LIB) $(QT_CFLAGS_OPT) INCPATH =
#!/bin/sh cd /opt/Qtopia/src tar xzf <somewhere>/qt-x11-2.3.2.tar.gz cd qt-2.3.2 export QTDIR=$PWD export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-opengl -no-xft -static || exit 2 gmake || exit 2 gmake -C tools/qvfb || exit 2
なお、Qt3 用の uic は使えないので注意すること。
最後に Qtopia のコンパイル。以下のパッチをあててから行う。
diff -ur qtopia-free-1.6.0.orig/src/configure qtopia-free-1.6.0/src/configure --- qtopia-free-1.6.0.orig/src/configure Thu Feb 27 10:25:11 2003 +++ qtopia-free-1.6.0/src/configure Sun Mar 23 13:01:17 2003 @@ -401,7 +401,7 @@ if [ "$f" = server ] then # Qt dependancies, plugins, applications, libraries - EXTRALIBS="-ljpeg -Wl,-Bstatic -Wl,-whole-archive $SERVERPLUGINS -Wl,-no-whole-archive -Wl,-Bdynamic $SERVERLIBS $EXTRALIBS" + EXTRALIBS="-Wl,-Bstatic -Wl,-whole-archive $SERVERPLUGINS -Wl,-no-whole-archive -Wl,-Bdynamic $SERVERLIBS $EXTRALIBS" fi MOC_DIR=.moc OBJECTS_DIR=.obj
#!/bin/sh export PATH=/opt/Embedix/tools/bin:$PATH export PATH=/opt/Qtopia/tmake/bin:$PATH export TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-sharp-g++ cd /opt/Qtopia/src/sharp/qt-2.3.4 export QTDIR=$PWD export QTEDIR=$QTDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH rm -f bin/uic ln -s /opt/Qtopia/src/qt-2.3.2/bin/uic bin/uic cd ../qtopia-free-1.6.0 export QPEDIR=$PWD export PATH=$QPEDIR/bin:$PATH cd src ./configure -platform freebsd-g++ -xplatform linux-sharp-g++ && gmake
これで実機用アプリケーションの開発が可能になった(はず)。
実は SL-C700 シリーズの Qtopia は 1.5.0 なのだが、 1.6 で構築したアプリケーションも動く(と報告があった)。 static リンクしない場合は、 libqtopia.so.1 を実機にインストールしておく必要がある。 副作用があるかどうかは不明。
実機がなくてもアプリケーションのデバッグがホスト側でできるように、 QtE と Qtopia を FreeBSD 上でもコンパイルしておく。 Qtopia を FreeBSD でネイティブにコンパイルするためのパッチ。
以下の制限あり。
クロス版と同様、qt-embedded-2.3.4.tar.gz, qtopia-free-1.6.0.tar.gz を 展開し、つづいて上のパッチをあてる。
cd /opt/Qtopia/src tar xzf <somewhere>/qt-embedded-2.3.4.tar.gz tar xzf <somewhere>/qtopia-free-1.6.0.tar.gz patch -s -p0 < qtopia-free-1.6.0-FreeBSD4.diff
つづいて以下のようにコンパイル。
cd qtopia-free-1.6.0 export QPEDIR=$PWD cd ../qt-2.3.4 export QTDIR=$PWD export QTEDIR=$QTDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH rm -f src/tools/qconfig-qpe.h cp $QPEDIR/src/qt/qconfig-qpe.h src/tools || exit 2 ./configure -qconfig qpe -qvfb -depths 4,8,16,32 && gmake sub-src
クロス版同様 libuuid が必要になるので、 e2fsprogs を ports を使ってインストール。
# cd /usr/ports/sysutils/e2fsprogs # make install
以下の手順でコンパイル
export PATH=/opt/Qtopia/tmake/bin:$PATH export TMAKEPATH=/opt/Qtopia/tmake/lib/freebsd-g++ cd qt-2.3.4 export QTDIR=$PWD export QTEDIR=$QTDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH rm -f bin/uic ln -s /opt/Qtopia/src/qt-2.3.2/bin/uic bin/uic rm -rf lib/libuuid* include/uuid aln -s /usr/local/include/uuid include ln -s /usr/local/lib/libuuid.* lib cd ../qtopia-free-1.6.0 export QPEDIR=$PWD export PATH=$QPEDIR/bin:$PATH cd src ./configure -platform freebsd-g++ && gmake
setenv LD_LIBRARY_PATH=/opt/Qtopia/src/qt-2.3.4/lib:$LD_LIBRARY_PATH setenv QTDIR=/opt/Qtopia/src/qt-2.3.4 cd /opt/Qtopia/src/qtopia-free-1.6.0/bin /opt/Qtopia/src/qt-2.3.2/tools/qvfb/qvfb & ./qpe
$Date: 2006/03/16 20:49:12 $