2016年07月28日

ラズパイのベアメタル開発:クロスコンパイラをビルドする

 「ベアメタルで動いた!」の記事で、ラズパイのベアメタル開発のやり方を「別記事で書く」と言っていたのだが、未だに放置していたので、そろそろ書いておく。ビルドしたのはだいぶ前なので、バージョンが古いものがあるのはご容赦願います。

1. まず、GMP(多倍長計算ライブラリ)、GNU mpfr(任意精度数値計算ライブラリ)、mpc(高精度演算ライブラリ)が必要。うちでは、gfortran 4.7 をビルドした時に /usr/local/gcc-4.7 にインストールしたので、それを流用する。

2. binutils, gcc, newlib のソースパッケージをダウンロードして、あるディレクトリ(BASE とする)内に展開する。

3. binutils のビルド。

$ cd $(BASE)/binutils-2.26
$ ./configure --target=arm-none-eabi --prefix=/usr/local/cross-pi
$ make
$ sudo make install

4. gcc 1回目。

$ cd $(BASE)/gcc-4.9.3
$ mkdir build1; cd build1
$ ../configure --prefix=/usr/local/cross-pi --target=arm-none-eabi \
  --enable-multilib --with-newlib --enable-languages="c,c++" \
  --enable-interwork -with-gmp=/usr/local/gcc-4.7 \
  --with-mpfr=/usr/local/gcc-4.7 --with-mpc=/usr/local/gcc-4.7
$ make all-gcc
$ sudo make install-gcc

5. newlib のビルド。--disable-newlib-supplied-syscalls がポイント。

$ cd $(BASE)/newlib-2.2.0
$ mkdir build; cd build
$ ../configure --prefix=/usr/local/cross-pi --target=arm-none-eabi \
  --disable-newlib-supplied-syscalls
$ (cd /usr/local/cross-pi/bin; sudo ln -s arm-none-eabi-gcc arm-none-eabi-cc) \
  # なぜか arm-none-eabi-cc が要求されるので、シンボリックリンクを張っておく
$ export PATH=/usr/local/cross-pi/bin:$PATH  #  PATH に加えておく
$ make
$ sudo make install

6. gcc 2回目。

$ cd $(BASE)/gcc-4.9.3
$ mkdir build2; cd build2
$ ../configure --prefix=/usr/local/cross-pi --target=arm-none-eabi \
  --enable-multilib --with-newlib --enable-languages="c,c++" \
  --enable-interwork -with-gmp=/usr/local/gcc-4.7 \
  --with-mpfr=/usr/local/gcc-4.7 --with-mpc=/usr/local/gcc-4.7
$ make
$ sudo make install

 これで、/usr/local/cross-pi 以下にクロスコンパイラがインストールできた。

タグ:Raspberry Pi
Posted at 2016年07月28日 00:53:31
email.png