開発ツールのコンパイル


LinuxカーネルやLinux上で動作するソフトウェアのコンパイルやアセンブル、リンクのために、binutilsgccなどのツールをインストールする必要がある。ここでは、 のインストールを行った。
なお、以下の作業はLinux(カーネル2.4.22)上で行った。(Cygwin上では途中でエラーが出て進めなくなった。)

用意するもの

方法1(手抜き)

セットアップ用のスクリプトを書いたので、これを使用すれば以下の手順でツールのコンパイルができるはずである。ただし、エラーチェックなどをあまり厳密に行っていないので注意。
  1. 上記「用意する物」のリストに示したファイルをダウンロードし、~/cross_compile/src/に置く。
  2. スクリプト(install.sh)をダウンロードし、~/cross_compile/に置く。
  3. install.shを実行する。
  4. ~/.bash_profileなどを編集し、PATHに$HOME/cross_compile/tools/binを加える。

方法2

これだけではあんまりなので、手順を詳細に説明する。ただし、内容はinstall.shそのものなので読み飛ばしても構わない。
  1. 前処理
    1. ディレクトリの作成
      ここでは、~/cross_compile/以下にツールをインストールする。 そこで、~/cross_compileを作り、その下にsrc,tools,tmpの3つのディレクトリを作る。
       $ mkdir $HOME/cross_compile
       $ mkdir $HOME/cross_compile/src
       $ mkdir $HOME/cross_compile/tools
       $ mkdir $HOME/cross_compile/tmp
      
    2. アーカイブのダウンロード
      上記「用意する物」のアーカイブをダウンロードし、~/cross_compile/src/に置く。
    3. アーカイブの展開とパッチ当て
      まず、binutilsとgccとglibcのソースアーカイブを展開する。
       $ cd $HOME/cross_compile/src
       $ tar jxvf binutils-2.14.tar.bz2
       $ tar zxvf gcc-2.95.3.tar.gz
       $ tar zxvf glibc-2.2.5.tar.gz
      
      glibcにlinuxthreadアドインを追加する
       $ cd glibc-2.2.5
       $ tar zxvf ../glibc-linuxthreads-2.2.5.tar.gz
      
      glibcはこのままではarmで使用できないので、微妙に細工を施す。
       $ perl -pi -e 's/i386/arm*)\n\tlibc_cv_gcc_unwind_find_fde=yes\n\tarch_minimum_kernel=2.0.10\n\t;;\n i386/' sysdeps/unix/sysv/linux/configure
       $ perl -pi -e 's/weak_alias \(__old_sys_nerr/\/\/ $&/' sysdeps/unix/sysv/linux/arm/errlist.c
       $ cd ..
      
      Linuxのカーネルを展開し、パッチを当てる。
       $ tar jxvf linux-2.4.19.tar.bz2
       $ mv linux-2.4.19 linux-2.4.19-rmk7
       $ cd linux-2.4.19-rmk7
       $ zcat ../patch-2.4.19-rmk7.gz | patch -p1
       $ cd ..
      
  2. binutilsのコンパイル
    binutilsをコンパイルし、パスの追加とリンクの作成を行う。
     $ mkdir $HOME/cross_compile/tmp/build-binutils
     $ cd $HOME/cross_compile/tmp/build-binutils
     $ $HOME/cross_compile/src/binutils-2.14/configure --target=arm-linux --prefix=$HOME/cross_compile/tools 
     $ make all install
     $ rm -rf $HOME/cross_compile/src/binutils-2.14
     $ cd ..
     $ rm -rf $HOME/cross_compile/tmp/build-binutils
     $ export PATH=$HOME/cross_compile/tools/bin:$PATH
     $ mkdir -p $HOME/cross_compile/tools/arm-linux/include
     $ ln -s $HOME/cross_compile/src/linux-2.4.19-rmk7/include/asm-arm $HOME/cross_compile/tools/arm-linux/include/asm
     $ ln -s $HOME/cross_compile/src/linux-2.4.19-rmk7/include/linux $HOME/cross_compile/tools/arm-linux/include/linux
    
  3. ヘッダファイルの生成(1回目)
    Linuxカーネルのソースから、必要なヘッダファイルを生成する。
     $ cd $HOME/cross_compile/src/linux-2.4.19-rmk7
     $ yes "" | make config
     $ make dep
    
  4. gccのコンパイル(1回目) まず、gccの1回目のコンパイルのためにソースにパッチを当てる。
     $ cd $HOME/cross_compile/src/gcc-2.95.3
     $ perl -pi -e 's/TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC/TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix_h/' gcc/config/arm/t-linux
     $ perl -pi -e 's/#  define SUBTARGET_EXTRA_LINK_SPEC\t\\\n\t" %{mapcs-26:-m elf32arm26} %{\!mapcs-26:-m elf32arm}"/#  define SUBTARGET_EXTRA_LINK_SPEC\t\\\n\t" %{mapcs-26:-m armelf_linux26} %{\!mapcs-26:-m armelf_linux}/'  gcc/config/arm/linux-elf.h
    
    それから、gccをコンパイルする。
     $ mkdir $HOME/cross_compile/tmp/build-gcc
     $ cd $HOME/cross_compile/tmp/build-gcc
     $ $HOME/cross_compile/src/gcc-2.95.3/configure --target=arm-linux --prefix=$HOME/cross_compile/tools --with-headers=$HOME/cross_compile/tools/arm-linux/include/ --enable-languages=c --disable-threads
     $ make all-gcc install-gcc
     $ cd ..
     $ rm -rf $HOME/cross_compile/tmp/build-gcc
    
    gccのソースはもう一度必要になるが、そのまま残すと2回目のコンパイルに支障があるので消しておく。
     $ rm -rf $HOME/cross_compile/src/gcc-2.95.3
    
  5. ヘッダファイルの生成(2回目)
    Linuxカーネルのソースから、必要なヘッダファイルを生成する。今度は1度目とは違い、arm-linux-gccを使用する。
     $ cd $HOME/cross_compile/src/linux-2.4.19-rmk7
     $ yes "" | make ARCH=arm CROSS_COMPILE=arm-linux- config
     $ make ARCH=arm CROSS_COMPILE=arm-linux- dep
    
  6. glibcのコンパイル glibcをarm-linux-gccでコンパイルする。
     $ mkdir $HOME/cross_compile/tmp/build-glibc
     $ cd $HOME/cross_compile/tmp/build-glibc
     $ AR=arm-linux-ar CC=arm-linux-gcc RANLIB=arm-linux-ranlib $HOME/cross_compile/src/glibc-2.2.5/configure arm-linux --target=arm-linux --host=arm-linux --prefix=$HOME/cross_compile/tools --disable-sanity-checks --enable-add-ons=linuxthreads
     $ make all install
     $ rm -rf $HOME/cross_compile/src/glibc-2.2.5
     $ cd ..
     $ rm -rf $HOME/cross_compile/tmp/build-glibc
    
  7. gccのコンパイル(2回目) まず、ソースファイルを解凍し直す。
     $ cd $HOME/cross_compile/src
     $ tar zxvf gcc-2.95.3.tar.gz
    
    それから、gccをコンパイルする。
     $ mkdir $HOME/cross_compile/tmp/build-gcc
     $ cd $HOME/cross_compile/tmp/build-gcc
     $ $HOME/cross_compile/src/gcc-2.95.3/configure --target=arm-linux --prefix=$HOME/cross_compile/tools --with-headers=$HOME/cross_compile/tools/include/ --with-libs=$HOME/cross_compile/tools/lib/
     $ make all-gcc install-gcc
     $ rm -rf $HOME/cross_compile/src/gcc-2.95.3
     $ cd ..
     $ rm -rf $HOME/cross_compile/tmp/build-gcc
    
  8. 後処理
    ~/.bash_profile等を編集し、PATHに"$HOME/cross_compile/tools/bin"を追加する。

[△ Kompressor BoardでLinuxのページへ]
[<< RedBootの移植] [Linux Kernelの移植 >>]

[藤田研究室 トップページへ]

SASAKI Shunsuke