FreeBSD で Qtopia for Linux Zaurus (http://startide.jp/freebsd/qtopia/freebsd/) - 削除

[ サイトトップ | 上へ | 編集 | 一覧・作成 ]
円周率を小数点以下二桁まで入力してください:


このページを削除します。

あらまし

Linux Zaurus (SLシリーズ) を購入することを前提に FreeBSD (4.7-R) 上に Qt/Embedded, Qtopia の開発環境を構築中。 以下はそのメモ。メモ書き以上のものではないので不備は御容赦。 ただし、以下の方法で作成したアプリケーションは実機上で 一応動作しているそうです。

Linux 互換環境

シャープが供給するツールチェインは 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
%

Qt/Embedded

つづいて 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

つづいて Qtopia のコンパイルに進むが、下準備が必要。

tmake

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

libuuid

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

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

最後に 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 を実機にインストールしておく必要がある。 副作用があるかどうかは不明。

native 環境

実機がなくてもアプリケーションのデバッグがホスト側でできるように、 QtE と Qtopia を FreeBSD 上でもコンパイルしておく。 Qtopia を FreeBSD でネイティブにコンパイルするためのパッチ。

以下の制限あり。

Qt/E

クロス版と同様、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

クロス版同様 libuuid が必要になるので、 e2fsprogs を ports を使ってインストール。

# cd /usr/ports/sysutils/e2fsprogs
# make install

Qtopia

以下の手順でコンパイル

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

native 版の実行

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 $