Building ARM tool chain & Linux Kernel

ARMのクロスコンパイラ及び Linuxの作成手順のメモ

事前に必要なものはこちらを参考にビルドしてください。

各ソフトウェアのバージョン

ビルド環境

さくらサーバの Ubuntuで行いました。

Prefixと makeの並列オプションは環境に合わせて修正してください。

Binutilsのビルド

   % tar xf binutils-2.21.1.tar.bz2
   % cd binutils-2.21.1 && mkdir build_arm && cd build_arm
   % ../configure --target=arm-linux-eabi --prefix=/home/syohei/local/arm-eabi --disable-nls \
      --enable-interwork --enable-multilib
   % make -j2
   % make install
   % export PATH=/home/syohei/local/arm-eabi/bin:$PATH

GCCのビルド

  % tar xf gcc-4.6.1.tar.bz2
  % tar xf newlib-1.19.0.tar.gz
  % cd gcc-4.6.1
  % ln -s ../newlib-1.19.0/newlib . && ln -s ../newlib-1.19.0/libgloss .
  % mkdir build_arm && cd build_arm
  % ../configure --target=arm-linux-eabi --enable-languages=c --with-gmp=/usr/local \
     --with-mpfr=/usr/local --with-mpc=/usr/local --with-ppl=/usr/local --with-gloog=/usr/local \
     --prefix=/home/syohei/local/arm-eabi --disable-nls --disable-libssp --disable-shared \
     --disable-threads --with-newlib --with-headers=/home/syohei/src/gcc-4.6.1/newlib/libc/include \
     --enable-interwork --enable-multilib --with-gnu-as --with-gnu-ld --disable-libmudflap \
     --disable-libquadmath --disable-libgomp
  % make -j2
  % make install

newlibのビルド

   % cd newlib-1.19.0
   % mkdir build_arm && cd build_arm
   % ../configure --target=arm-linux-eabi --prefix=/home/syohei/local/arm-eabi --disable-nls \
      --enable-interwork --enable-multilib
   % make -j2
   % make install

gdbのビルド

   % tar xf gdb-7.3.tar.bz2
   % cd gdb-7.3 && mkdir build_arm && cd build_arm
   % ../configure --target=arm-linux-eabi --prefix=/home/syohei/local/arm-eabi --disable-nls \
      --enable-interwork --enable-multilib
   % make -j2
   % make install

Linuxカーネルのビルド

  % tar xf linux-3.0.1.tar.bz2
  % cd linux-3.0.1
  % make ARCH=arm menuconfig
  # ターゲットに合わせたコンフィギュレーションを行う
  % make -j2 ARCH=arm CROSS_COMPILE=arm-linux-eabi- KCFLAGS='-D__linux__'

ロスコンパイラに__linux__ってマクロができているかと思っていたん
ですけどなかったので, フラグ変数で定義を追加しています。
ビルドに使ったコンフィギュレーションファイルはgistに置きました


目的があったわけでもないので、ビルド通すためだけの設定です。
そのままではいくつかビルドできないドライバがありましたが、
特定の環境に絞り込んでやれば、その問題と遭遇することはまあ
ないんじゃないかなと思います。