GNU/Linux on SuperH 開発ツール ここにあるRPM はHitachi SuperH プロセサ上で動作するLinuxのための クロス開発環境を含んでいます。 これらは GNU/Linux on SuperH Project の成果を、使いやすいように パッケージにまとめたものです。 binutils-2.11.2, gcc-3.0.1, glibc-2.2.4 をベースにしています。 *注意* いかなる動作も保証しない完全無保証ですので、使用される場合は すべて自己責任でお願いします。 必要なシステム これらのRPMをインストールするには、ホストシステム上にrpm-4.0 以上が インストールされていることが必要です。RedHat 7.1 はこの条件を満たします。 RedHat 6.2 にインストールするには、rpm-4.x にアップデートが必要です。 動作確認は、RedHat 7.1, RedHat 6.2 で行いました。その他のRPM系ディストリ ビューションにもインストールは可能かと思いますが、もしコンパイラなどが動作 しないときは、後述する手順で、SRPM からビルドしてみてください。 以前のバージョンの開発パッケージがインストールされている場合は、あらかじめ 全てアンインストールしておくことをお勧めします。 また以下のようにして、/usr/sh[34]*-linux/include を削除しておいてください。 # rm -rf /usr/sh[34]*-linux/include インストール(host) インストールはroot で行います。 # rpm -Uvh rpm/RPMS/i386/Redhat7.1/*.rpm # rpm -Uvh rpm/RPMS/noarch/host/*.rpm SH/Linux カーネルはパッケージに含まれていません。クロス開発を行うには最低でもカーネルの ヘッダファイルが必要ですので、/usr/src/linux-sh-2.4 以下にインストールしておきます。 # cd /tmp # tar xzf linux-2.4.9.tar.gz # mv linux /usr/src/linux-sh-2.4 # cd /usr/src/linux-sh-2.4 # make ARCH=sh menuconfig インストール後のディレクトリ構造は以下のようになります。 usr --+-- bin binaries, shell scripts +-- lib ---- gcc-lib --+--- sh-linux cross compiler | +--- sh3-linux | +--- sh3eb-linux | +--- sh4-linux | +--- sh4eb-linux | +-- sh-linux --+-- bin binary executables (binutils) | +-- include include files | +-- lib libraries for sh3-linux (symlinks) | +-- m4 libraries for sh4-linux (symlinks) | +-- mb libraries for sh3eb-linux (symlinks) | +-- m4 libraries for sh4eb-linux (symlinks) | +-- sh3-linux --+-- bin symlink, shell script | +-- include symlink to /usr/sh-linux/include | +-- lib libraries for sh3-linux | +-- sh3eb-linux ... +-- sh4-linux ... +-- sh4eb-linux ... | +-- src --- linux-sh-2.4 --- include kernel include files インストールが成功すると、以下のようなコマンドが使えるようになります。 binutils(アセンブラ、リンカなど) sh-linux-as, sh-linux-ld, etc ... executable binaries sh3-linux-as, sh3-linux-ld, etc ... for sh3-linux sh3eb-linux-as, sh3eb-linux-ld, etc ... for sh3eb-linux sh4-linux-as, sh4-linux-ld, etc ... for sh4-linux sh4eb-linux-as, sh4eb-linux-ld, etc ... for sh4eb-linux gcc(c,c++コンパイラ) sh-linux-gcc --- multilibed cross compiler for sh-linux sh3-linux-gcc --- non-multilib cross compiler for sh3-linux sh3eb-linux-gcc --- non-multilib cross compiler for sh3eb-linux sh4-linux-gcc --- non-multilib cross compiler for sh4-linux sh4eb-linux-gcc --- non-multilib cross compiler for sh4eb-linux インストール(target) /home/foo/export にターゲット(sh3-linux)用のパッケージをインストールする手順です。 作業は root で行います。 rpm データベースの初期化 # mkdir -p /home/foo/export/var/lib/rpm # rpm --root /home/foo/export --initdb 全てインストール # rpm --root /home/foo/export -ivh --force --nodeps --ignorearch --noscripts rpm/RPMS/noarch/target/*.rpm # rpm --root /home/foo/export -ivh --force --nodeps --ignorearch --noscripts rpm/RPMS/sh3/*.rpm rpm には /dev/* が含まれていないので、host からコピーします。 # cp -a /dev /home/foo/export その後 /home/foo/export/etc 以下にある設定ファイルを適当に編集しておきます。 host で nfsd を動作させ、/home/foo/export を targetの root fs としてマウントしてみます。 互換性の問題 以前にリリースされた glibc-2.2.2 ベースのrpm とは shared library の バージョン番号が異なってしまっているため、今回リリースした glibc-2.2.4-1.*.rpm を ターゲット上にインストールすると、以前のバイナリが動作しなくなります。 動作しないバイナリを新しい環境で再リンクするか、ターゲット上に以下の symlink を作成すれば、この問題を回避することができます。 /lib/libc.so.6.1 -> libc.so.6 /lib/libm.so.6.1 -> libm.so.6 /lib/libBrokenLocale.so.1.1 -> libBrokenLocale.so.1 SRPM からのビルド 通常のユーザ(foo)としてRPMの作成をするために~/.rpmmacros に以下のように書いておきます。 --- ここから --- %_topdir /home/foo/rpm --- ここまで --- 作業用のディレクトリを作成します。 $ mkdir -p rpm/RPMS $ mkdir rpm/BUILD $ mkdir rpm/SRPMS $ mkdir rpm/SPECS $ mkdir rpm/SOURCES SRPM をインストールします。 $ rpm -ivh xxx.src.rpm これで、rpm/SPECS, rpm/SOURCES にspecファイルとソースファイルが展開されます。 binutils,gcc のビルドは次のようにして行います。 (gcc のビルドを行うときには glibc-sh*-linux-*.noarch.rpm をあらかじめインストールしておいてください。) $ cd rpm/SPECS $ rpm -bb --target=i386-linux binutils-sh-linux.spec $ rpm -bb --target=i386-linux gcc-sh-linux.spec 正常に終了すると rpm/RPMS/i386/ に rpm が生成されますので、root になってインストールします。 HOSTで使用するライブラリパッケージのビルド SRPM をインストールした後、以下のようにしてください。 $ rpm -bb --target=noarch xxx-sh-linux.spec ターゲット用パッケージのビルド SRPM をインストールした後 $ rpm -bb --target=sh3-linux xxx-sh-linux.spec でターゲット用rpmの再ビルドが行えます。 杉岡利信