事前にbuild-essential、texinfo、gawkをインストールしておく。
ARM用クロスコンパイラのモジュールのインストール先を$HOME/Programs/armccとするので、ディレクトリと環境変数を作っておく。
$ mkdir -pv $HOME/Programs
$ mkdir -pv $HOME/Programs/armcc $ export PATH="$HOME/Programs/armcc/bin:$PATH" |
binutils-2.25 をビルド
$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.25.tar.bz2
$ tar jxvf binutils-2.25.tar.bz2 $ mkdir -pv binutils-2.25/build $ cd binutils-2.25/build $ ../configure --target=arm-linux-gnueabi --prefix=$HOME/Programs/armcc $ make $ make install |
gcc-4.9.2 をビルド(1回め)
※gmp、mpc、mpfr を一緒にビルドする
$ wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.bz2
$ wget http://ftp.gnu.org/gnu//gmp/gmp-6.0.0a.tar.xz $ wget http://www.multiprecision.org/mpc/download/mpc-1.0.2.tar.gz $ wget http://www.mpfr.org/mpfr-3.1.2/mpfr-3.1.2.tar.xz $ tar jxvf gcc-4.9.2.tar.bz2 $ tar -xf gmp-6.0.0a.tar.xz $ mv gmp-6.0.0 gcc-4.9.2/gmp $ tar -xf mpc-1.0.2.tar.gz $ mv mpc-1.0.2 gcc-4.9.2/mpc $ tar -xf mpfr-3.1.2.tar.xz $ mv mpfr-3.1.2 gcc-4.9.2/mpfr $ mkdir gcc-4.9.2/build1 $ cd gcc-4.9.2/build1 $ ../configure --target=arm-linux-gnueabi --prefix=$HOME/Programs/armcc --with-newlib \ --without-headers --disable-nls --disable-shared --disable-multilib \ --disable-decimal-float --disable-threads --disable-libatomic \ --disable-libgomp --disable-libitm --disable-libquadmath \ --disable-libsanitizer --disable-libssp --disable-libvtv \ --disable-libcilkrts --disable-libstdc++-v3 \ --enable-languages=c,c++ $ make $ make install |
Linux ヘッダインストール
$ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.tar.xz
$ tar -xf linux-3.19.tar.xz $ cd linux-3.19 $ make mrproper $ make headers_install ARCH=arm CROSS_COMPILE=arm-linux-gnueabi INSTALL_HDR_PATH=$HOME/Programs/armcc/arm-linux-gnueabi |
glibc-2.21 のビルド
$ wget http://ftp.gnu.org/gnu/glibc/glibc-2.21.tar.xz
$ tar -xf glibc-2.21.tar.xz $ mkdir -pv glibc-2.21/build $ cd glibc-2.21/build $ ../configure --prefix=$HOME/Programs/armcc/arm-linux-gnueabi \ --host=arm-linux-gnueabi --build=$(../scripts/config.guess) \ --disable-profile --enable-kernel=2.6.32 \ --with-headers=$HOME/Programs/armcc/arm-linux-gnueabi/include \ libc_cv_forced_unwind=yes \ libc_cv_ctors_headers=yes \ libc_cv_c_cleanup=yes $ make $ make install |
libstdc++ のビルド
$ mkdir -pv gcc-4.9.2/build_libstdcpp
$ cd gcc-4.9.2/build_libstdcpp $ ../libstdc++-v3/configure --target=arm-linux-gnueabi \ --prefix=$HOME/Programs/armcc/arm-linux-gnueabi --disable-multilib \ --disable-shared --disable-nls --disable-libstdcxx-threads \ --disable-libstdcxx-pch \ --with-gxx-include-dir=$HOME/Programs/armcc/arm-linux-gnueabi/include/c++/4.9.2 $ make $ make install |
gcc-4.9.2 のビルド(2回め)
$ mkdir -pv gcc-4.9.2/build2
$ cd gcc-4.9.2/build2 $ ../configure --target=arm-linux-gnueabi --prefix=$HOME/Programs/armcc \ --disable-nls --disable-shared --disable-multilib \ --disable-libgomp --disable-threads --enable-languages=c,c++ \ --disable-libstdcxx-pch --disable-bootstrap $ make $ make install |
gdb-7.11 のビルド
$ wget http://ftp.gnu.org/gnu/gdb/gdb-7.11.tar.xz
$ tar -xf gdb-7.11.tar.xz
$ mkdir -pv gdb-7.11/build $ cd gdb-7.11/build $ ../configure --target=arm-linux-gnueabi --prefix=$HOME/Programs/armcc $ make $ make install |
コンパイルテストする。a.c に以下のコードを書く。
#include <stdio.h>
int main() { printf("Hello ARM\n"); return 0; } |
ビルドしたクロスコンパイラでa.cをコンパイルする。
$ arm-linux-gnueabi-gcc a.c -o pa
$ arm-linux-gnueabi-readelf -h pra ELF ヘッダ: マジック: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 クラス: ELF32 データ: 2 の補数、リトルエンディアン バージョン: 1 (current) OS/ABI: UNIX - System V ABI バージョン: 0 型: EXEC (実行可能ファイル) マシン: ARM バージョン: 0x1 エントリポイントアドレス: 0x102c4 プログラムの開始ヘッダ: 52 (バイト) セクションヘッダ始点: 7520 (バイト) フラグ: 0x5000202, has entry point, Version5 EABI, soft-float ABI このヘッダのサイズ: 52 (バイト) プログラムヘッダサイズ: 32 (バイト) プログラムヘッダ数: 8 セクションヘッダ: 40 (バイト) セクションヘッダサイズ: 37 セクションヘッダ文字列表索引: 34 |
qemu-arm で動かしてみる
$ qemu-arm -L $HOME/Programs/armcc/arm-linux-gnueabi ./pra
Hello ARM |
0 件のコメント:
コメントを投稿