「ベアメタルで動いた!」の記事で、ラズパイのベアメタル開発のやり方を「別記事で書く」と言っていたのだが、未だに放置していたので、そろそろ書いておく。ビルドしたのはだいぶ前なので、バージョンが古いものがあるのはご容赦願います。
1. まず、GMP(多倍長計算ライブラリ)、GNU mpfr(任意精度数値計算ライブラリ)、mpc(高精度演算ライブラリ)が必要。うちでは、gfortran 4.7 をビルドした時に /usr/local/gcc-4.7
にインストールしたので、それを流用する。
2. binutils
, gcc
, newlib
のソースパッケージをダウンロードして、あるディレクトリ(BASE
とする)内に展開する。
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