gcc-3.4.5クロス環境(1)

一番楽なのは、crosstoolを使う方法でしょう。
crosstool-0.42.tar.gz(現時点での最新バージョン)を展開し、 demo-*.sh を実行するだけ。必要なファイルもDLしてくれます。
また、toolchainの作成手順やconfigureオプションが参考になるし、パッチ(patches/*)も利用できます。


実際にgcc-3.4.5のクロスコンパイラを作る方法は、attyさん2006-03-30の日記が参考になります。これを元にして、例えば hardfloat にするには、

arm-xscale_hardfloat.dat

NELCONFIG=`pwd`/arm.config
TARGET=arm-xscale_hardfloat-linux-gnu
TARGET_CFLAGS="-O"
GCC_EXTRA_CONFIG="--with-float=hard --with-cpu=xscale --enable-cxx-flags=-mcpu=xscale"
GLIBC_EXTRA_CONFIG="--without-fp"

demo-arm-hardfloat.sh

eval `cat arm-xscale_hardfloat.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest -gdb


共有ライブラリを参照しないものはこれで大丈夫ですが、依存関係を解消しようとすると面倒になります。
つづく

gcc-3.4.5クロス環境(補足)

以下、gcc やリンカ・共有ライブラリに関する一般的な話。 gccのマニュアルも参照のこと。ビルド環境と実行環境が違う場合に起こる問題です。

  • 実行時に「libgcc_s.so.*がない」と言われる
    • libgcc_soをインストールする (SL-C3000はデフォルトで持っていない)
    • コンパイル毎に "-static-libgcc" オプションを付ける
    • 上記オプションをデフォルトにするため、gccの設定ファイル(specs)をいじる(→参考)
  • 実行時に「lib*.soがない」と言われる
    • zaurus に lib*.soをインストールする
    • コンパイル時に "-static" オプションを付ける
    • 或いは、個々のlib*.aを静的リンクする(リンカが*.soより先に*.aを参照するようにする)
  • softfloatのライブラリとhardfloatのそれをリンクすることは出来ない
    • 従って、libqpe.soに依存するもの(Qtopia)は全てhardfloat
    • OpenZaurus はsoftfloat ([VFP][SoftFP]、さらにkernelが2.6 なので速い?)
  • glibc-2.2.*とglibc-2.3.*の間には、完全な互換性はない
  • gcc-2.95.3でビルドしたglibc-2.2.2と、gcc-3.4.5でビルドしたそれは互換性に問題がある?
    • 後者のlibc-2.2.2.soは "__register_frame_info"関数を含むが 前者には無い、など

zpsx のソース

PSエミュSDL版 (2006-04-18) のソースをアップします。ライセンスはGPL。詳細はソース内の README.sdl-bvddを参照のこと。

Emulator for zaurus SL-xxxさんが 06/04/25 の記事でも触れているとおり、本家フォーラムに動きがありそうだったので、それを待っていたのですが…。

gcc-2.95*クロス環境

スペシャカーネルの構築用。
SHARP提供のクロス開発環境(gcc-2.95.2, glibc-2.2.2) を、binutils-2.16.1で上書きすることで、"-mcpu=iwmmxt" が使えるようになります。

# (1) ザウルス宝箱より (/opt/Embedix/tools/にインストールされる)
rpm -ivh \
    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

# (2) binutils-2.16.1 のビルドとインストール 
# "--enable-targets=xscale-linux-elf" は無くてもいい? (未検証) 
tar jxvf binutils-2.16.1.tar.bz2
cd binutils-2.16.1
./configure \
    --prefix=/opt/Embedix/tools \
    --target=arm-linux \
    --enable-targets=xscale-linux-elf
make
make install

参考:hisさん, たたかうデジタリアンさん

squashfs3.0

v18用モジュール(2004-04-09)で、「squashfsパッチを当てるとzImageのビルドに失敗する」と書きましたが、修正したパッチを作成したので置いておきます(ついでにipkも)。

ちなみに、squashfs3.0から unsquashfs コマンドが追加されました。便利。


(追記) ver.2.2で作成したイメージは、3.0と互換性の問題があるようなので、旧バージョンも置いておきます。