Network Users' Group ``wheel'' / Dai ISHIJIMA's Page / SL Zaurus関連 /
FreeBSDでクロス開発 ・Linuxエミュレータクロスコンパイラ
クロスコンパイラを使ってみる

初版: 2002/12/31
最終更新日: 2003/01/06


FreeBSDでSL Zaurusのアプリ開発



FreeBSDにおける、 SL Zaurus (SL-C700) 向けソフトのクロス開発の記録です。
(本人が忘れないように (自爆))。


◎参考文献

UNIX Magazine 2003年8月号 pp.151〜158 に詳しい記事があります。
サポートページ


◎FreeBSDに開発環境をインストール

SLザウルスの開発環境 (gccのクロスコンパイラ (i386ベースのLinux用)) は、 宝箱Pro SLシリーズ関連 開発ツール一覧 (http://more.sbc.co.jp/sl_j/tool/tools.htm) で配布されています。 ここの「Linux関連 開発ツール (クロスコンパイラ; gcc, ライブラリ; glibc, ヘッダファイル; linux-headers, ユーティリティ; binutils)」 をFreeBSDマシンで動かすことができれば、 FreeBSDマシンでSLザウルス用プログラムを作成することができます。 幸い、FreeBSDには「Linuxエミュレーション」という仕組みがありますので、 問題なくこれらのツールを動かすことが可能です(可能なはずです ;^^)。

なお、これらのツールで作成できるのは、 コマンドプロンプト (SLザウルスの「ターミナル」) から起動するプログラムになります。 GUIを使った (Qtベースの) プログラムは作成できません。 (Qt向け開発ツールがインストールできるかどうかは試していません)

上記のツールをインストールするには、 まず、FreeBSDマシンに「Linuxエミュレータ」をインストールする必要があります。 わたしが日ごろ使っているマシンにインストールしたときの手順を以下に 紹介します。 マシンは、FreeBSD 4.6.2Rをインストールしたノートパソコンで、 Linuxエミュレータに必要なファイルは、手元にあった 「ぷらっとほーむ Release & Write vol.18 FreeBSD 4.3 DVD」 に入っているものを使いました。 インストールしてあるOSのバージョンと、 インストールするパッケージ(が入っているメディア)の バージョンが食い違ってるので、 かなりイレギュラーな構成ですが、動けばまぁいいでしょう(笑)。

もちろん、よい子はマネしてはいけません(笑)。 OSのバージョンと使用するパッケージは揃えて、美しくインストールしましょう。

◎Linux環境のインストール

インストール先のノートパソコンからは直接DVDを読むことができないので、 まず、別マシンにDVD-ROMをマウントし、次のファイルをノートパソコンに コピーしておきます。 最初に、linux_base をインストールします。
	# pkg_add linux_base-6.1.tgz
次にrpmをインストールします。 ここで用意したrpmは、 gettext-0.10.35, popt-1.5.1, bzip2-1.0.1 に依存します。 しかし、gettextはgettext-0.11.1_3がインストール済み、 bzip2はpacakgesではなく最初からインストール済みです。 というわけで、依存関係を無視させて
	# pkg_add -f popt-1.5.1.tgz
	# pkg_add -f rpm-3.0.6_5.tgz
としました。 無論、インストール済みのOSやパッケージ類と、 インストールするパッケージ類のバージョンが一致していれば、 このような小細工は不必要です。 最後に
	# rehash
して、rpmコマンドを有効にしておきます。

この時点で、Linuxバイナリを実行したり、 新たに (rpmコマンドで) インストールするための環境が揃います。 ファイルは/compat/linux/ディレクトリの下に置かれます (ただし、rpmコマンドは/usr/local/*/の下です)。 ここまでで必要なディスク容量は、およそ50Mバイトです。

◎クロスコンパイラのインストール

用意するファイルは次のとおりです。 これらを前述の 宝箱Pro SLシリーズ関連 開発ツール一覧 からダウンロードしておきます。

これらのパッケージのインストールは以下のようにしました。

	# rpm -i --ignoreos --root /compat/linux gcc-cross-sa1100-2.95.2-0.i386.rpm
	# rpm -i --ignoreos --root /compat/linux glibc-arm-2.2.2-0.i386.rpm
	# rpm -i --ignoreos --root /compat/linux linux-headers-arm-sa1100-2.4.6-3.i386.rpm
	# rpm -i --ignoreos --root /compat/linux binutils-cross-arm-2.11.2-0.i386.rpm
rpmコマンドの引数の「-i」はパッケージのインストールを指示するオプション、 「--ignoreos」は「OSがちゃうで」というエラーを 無視させることを指示するオプション、 「--root」はルートディレクトリを指示するオプションです。

これらのコマンドを実行すると、 /compat/linux/opt/の下に 各パッケージのファイルが展開されます。 クロスコンパイラ本体は、 /compat/linux/opt/Embedix/tools/bin/ディレクトリの下に arm-linux-gccという名前で置かれます。 また、SLザウルス向けの実行ファイルを作成する際に必要なライブラリは、 /compat/linux/opt/Embedix/tools/arm-linux/lib/などの ディレクトリの下に配置されています。

上記のパッケージを展開すると、/compat/linux/opt/の下には、

	% du -s /compat/linux/opt/
	92399   /compat/linux/opt/
と90メガバイトほどのファイルが置かれることになります。

それから、クロスコンパイラのファイル形式をfileコマンドで調べてみると、

	% file /compat/linux/opt/Embedix/tools/bin/arm-linux-gcc
	/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc: ELF 32-bit LSB executable,
	Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
と表示され、Linux向けのELFバイナリであることがわかります。

◎実際にコンパイルしてみよう

つづきは 「クロスコンパイラを使ってみる」へ どうぞ。