家で寝ていると、ちょっと現実逃避のことをしてみます。 まあ、他にもとっくにやっている人はいると思うけどね…。 てなことで、リナザウ SL-C3000 の基本クロス開発環境を、 FreeBSD 5.4 の常用マシンに入れてみました。
まずは、ports/devel/cross-linux-zaurus (cross-linux-zaurus-1.0.tar.gz) てな感じのものをさっくりと作ってみました。 普通に /usr/ports で上記 tar.gz を展開して、
# cd /usr/ports/devel/cross-linux-zaurus # make clean install clean
で Zaurus 開発環境をインストールできます (実行には x86 の Linux エミュレーション環境が必要です)。 主なファイルは /compat/linux/opt/Embedix/ 以下にインストールされます。
ライブラリは SL-C3000 から拾ってきた方が良さそうなので、ライブラリは上書きします (192.168.11.9 が Linux ザウルスのアドレス)。
# cd /compat/linux/opt/Embedix/tools/arm-linux/lib # ssh zaurus@192.168.11.9 "chdir /lib ; tar cf - ." | tar xvfp -
SL-C3000 で不満なのは、*BSD 屋さんとしては何と言っても csh が入っていないことで、 とりあえずこの辺を参考に tcsh をコンパイルしてみることに。
えっと、この辺から、 tcsh-6.14.00.tar.gz を持ってきて展開します。 で、いろいろ試した結果以下のような手順でコンパイルできました。
まず、SL-C3000 では libtermcap は libncurses のようなので、 次のようにリンクを張ります。
# cd /compat/linux/opt/Embedix/tools/arm-linux/lib # ln -s libncurses.so.4.2 libtermcap.so
で、次の内容のファイルを build-tcsh.sh として、 tcsh-6.14.00.tar.gz を展開したディレクトリ tcsh-6.14.00 に置きます。
#!/bin/sh make clean ./configure make gethost make tc.defs.c cp gethost tc.defs.c /tmp env ac_cv_func_getpgrp_void=yes ac_cv_func_setpgrp_void=yes \ CC=/compat/linux/opt/Embedix/tools/bin/arm-linux-gcc \ ./configure --build=arm-zaurus-linux -host=i386-pc-freebsd \ --libdir=/compat/linux/opt/Embedix/tools/arm-linux/lib cp /tmp/gethost /tmp/tc.defs.c . make /compat/linux/opt/Embedix/tools/bin/arm-linux-strip tcsh
あとは、
% sh build-tcsh.sh
で、カレントディレクトリに tcsh のバイナリが出来てきます。
% ls -l tcsh -rwxr-xr-x 1 hosokawa staff 316976 8 13 01:41 tcsh % file tcsh tcsh: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), stripped
あとはこれを Zaurus 側に scp して、/usr/bin/csh に置くだけです。 おお、だいぶ快適になった…。