CQ出版発行の組み込みエンジニアのための Embedded Unix の記事関連のダウンロード・コーナです。 |
MIPSアーキテクチャ(MIPS32)のAu1100CPUをLittle Endianで利用する組み込みLinuxボードである、E!Kit-1100用のアプリケーション・プログラムのクロス開発環境の構築手順を説明します。
Embeded Unix誌の本文中のカーネル用クロス開発環境を使用して、アプリケーション・プログラムをクロスコンパイルする場合には、いくつかの不具合があることが判明しています。そのためにここでは、「E!Kit-1100」用のアプリケーション用クロス開発環境を/export以下に構築する手順を示します。一旦このアプリケーション用クロス開発環境を構築してしまえば、カーネル・コンパイルもそのままできるので便利です。
インストールに必要な条件として、すでにEmbeded Unix誌の本文中に掲載のカーネル用クロス開発環境がインストールしてある事とします。適宜ディレクトリ名を変更することで、別なディレクトリにインストールする事ができますが、ここの手順ではカーネル用クロス開発環境を元にして環境を構築するため、ディレクトリはすでにインストールしてある環境と同じにする必要があります。また、必要な環境変数も(milsel-env.sh)で定義してある同じものを使用します。
ここの説明ではまず、/exportディレクトリ以下に必要なバージョンのbinutils, gcc, glibcが展開してある事をls コマンドで確認します。以下のように見えれば大丈夫でしょう。
# ls /export/* /export/local: bin include info lib man mipsel-linux share /export/src: linux linux-2.4.21-p4b1 /export/tar: binutils-2.13.2.1.tar.bz2 busybox.tgz ekit1100.srec mipsel-env.sh mk_ramdisk.sh /export/tool: binutils-2.13.2.1 gcc-3.2.3 lib sbin etc glibc-2.3.2 usr
mipsel-env.shの中身の表示(確認)させた後で、環境変数と、PATHの設定をします(mipsel-env.sh を実行)
# cd /export # cat tar/mipsel-env.sh TARGET=mipsel-linux PREFIX=/export/local KERNELSRC=/export/src/linux TOOLROOT=/export/tool LANG=en_US PATH=/export/local/bin:$PATH export TARGET PREFIX KERNELSRC TOOLROOT PATH LANG # . tar/mipsel-env.sh
binutilsを再インストールします。
# cd $TOOLROOT # cd binutils-2.13.2.1 # cd build # rm -rf * # ../configure --prefix=$PREFIX --target=$TARGET --disable-nls \ --with-sysroot=$PREFIX/$TARGET # make # make install
カーネルツリー以下にインクルード・ヘッダ・ファイルのシンボリックリンクとversion.hが作成されている必要があります。
/export/src/linux のシンボリックリンク
/export/src/linux/include/asm のシンボリックリンク
/export/src/linux/include/linux/version.h ファイル
のいずれかが無い場合には、カーネルのクロスコンパイル手順に従って、一度カーネルのクロスコンパイルを実行するか、以下の手順でmake depまでのステップを実行しておきます。
(/export/src/linux のシンボリックリンクが無い場合)
# cd /export/src # ln -s linux-2.4.21-p4b1 linux
(以下の何れかが無い場合)
/export/src/linux/include/asm のシンボリックリンク
/export/src/linux/include/linux/version.h ファイル
# cd /export/src/linux # make oldconfig # make dep
まずCライブラリを構築するために、gcc, cppといったCクロスコンパイラ本体をコンパイル、インストールします。
# cd $TOOLROOT # cd gcc-3.2.3 # cd build # rm -rf * # ../configure --prefix=$PREFIX --target=$TARGET --host=`../config.guess` \ --with-local-prefix=$PREFIX/$TARGET --disable-multilib --with-newlib \ --with-headers=$PREFIX/$TARGET/include \ --disable-nls --enable-threads=no --enable-symvers=gnu \ --enable-__cxa_atexit --enable-languages=c --disable-shared # make all-gcc install-gcc
アプリケーション開発時にクロスコンパイラが使用してリンクするライブラリを、ソースコードから前項で作成したクロスコンパイルして作成し、インストールします。
# cd $TOOLROOT # cd glibc-2.3.2
Patchファイルをコピーしておいてから、Patchを当ててglibcの問題点を修復します。
# cp -p /export/tar/*.patch . # patch -p1 < glibc-2.3.2-cross.patch # patch -p1 < glibc-2.3.2-mips.patch # patch -p1 < glibc-2.3.2-without-fp.patch
ライブラリを再度作成します。
# cd build # rm -rf * # BUILD_CC=gcc CFLAGS="-O2 -finline-limit=10000" \ CC=${TARGET}-gcc AR=${TARGET}-ar RANLIB=${TARGET}-ranlib \ ../configure --prefix=/usr --host=${TARGET} \ --build=`../../gcc-3.2.3/config.guess` --without-tls --enable-add-ons \ --without-__thread --enable-kernel=2.4.3 --without-cvs --without-gd \ --disable-profile --disable-debug --enable-clocale=gnu \ --with-headers=$PREFIX/$TARGET/include # make # make install_root=$PREFIX/$TARGET prefix= install
glibc-fix.shを実行して、libc.so と libpthread.so 内に誤った絶対Pathが入ってしまう問題を修正します。
# cat /export/tar/glibc-fix.sh #!/bin/sh SYSROOT=/export/local/mipsel-linux/lib for file in libc.so libpthread.so; do mv ${SYSROOT}/$lib/$file ${SYSROOT}/$lib/${file}_orig sed 's,/lib/,,g' < ${SYSROOT}/$lib/${file}_orig > ${SYSROOT}/$lib/$file done # /export/tar/fix-glibc.sh
# cd ${TOOLROOT} # cd gcc-3.2.3 # cd build # rm -rf * # ../configure --target=$TARGET --prefix=$PREFIX --host=`../config.guess` \ --with-headers=$PREFIX/$TARGET/include \ --with-local-prefix=$PREFIX/$TARGET --disable-nls \ --enable-threads=posix --enable-symvers=gnu \ --enable-__cxa_atexit --enable-languages=c,c++ \ --enable-shared --enable-c99 --enable-long-long # make all # make install
以上でアプリケーション・プログラム用のクロス開発環境の作成とインストールが終了しました。試しに、busybox等のアプリケーションがコンパイルできて、正しく実行できる事を確認して下さい。
更新日:2004年2月15日
日高亜友(ひだか あとむ)
Hidaka, Atomu
戻る→