組み込みシステム用クロスコンパイラの作成

水内 郁夫


目次

  1. Introduction
  2. 手順
  3. 開発環境パッケージの追加
  4. 各ソースのダウンロード
  5. 各ソースの展開
  6. configure
  7. make
  8. binutilsのmakeとインストール
  9. gccのmake
  10. newlibのmake
用語集

戻る

  1. はじめに
  2. これは、組み込みプロセッサ向けのCコンパイラの作成に関するドキュメント。
    GNUのツールを利用する。
    gcc, binutils, newlib(またはglibc) を利用。
    ビルド環境はgccが動く環境。(cygwinLinuxなど)

  3. 手順
    1. 開発環境パッケージの追加。
    2. gcc,binutils,newlibのソースをダウンロード。
    3. binutilsを作り、インストール。
    4. gcc を作り、インストール。
    5. newlib を作り、インストール。
    6. 使う。
    ※それぞれの役割は、用語集を参照。

  4. 開発環境パッケージの追加
  5. 組み込み用Cコンパイラを作成するためには、 Cygwin側にC言語の開発環境が必要になる。 パッケージの追加を参考に gcc, make, bzip2 を追加すること。 gcc, make はDevel カテゴリーにある。bzip2は Utilカテゴリーにある。

  6. 各ソースのダウンロード
  7. GNUのFTPサイト (またはそのミラー(tron.um.u-tokyo.ac.jpとか)) から、
    ソースのtarball(tar.gzしたもの)を取ってくる。
    演習では、O:\soft-ensyu\compilerに置いてあるものを 各自の端末のローカルディレクトリに展開する。手順は次項を参照。

    1. gcc
      ftp://ftp.gnu.org/gnu/gcc/
      ftp://tron.um.u-tokyo.ac.jp/pub/GNU/prep/gcc/

    2. binutils
      ftp://ftp.gnu.org/gnu/binutils/
      ftp://tron.um.u-tokyo.ac.jp/pub/GNU/prep/binutils/

    3. newlib または、 glibc
      glibcはGNUのもので、
      ftp://ftp.gnu.org/gnu/glibc/
      ftp://tron.um.u-tokyo.ac.jp/pub/GNU/prep/glibc/
      から。
      newlibはRedHatのもので、
      ftp://sources.redhat.com/pub/newlib/index.html
      から。
      glibcではコンパイルが通らないTARGET()でも、newlibなら通ったりする。

  8. ダウンロードしたソースの展開
  9. プロンプトを 'カレントディレクトリ名$ ' とすると、次のようにして各ソースを展開する。
    インストールは/usr/local/以下にするとしても、 ビルド(make)はディスクアクセスの速いローカルドライブで行うのがよい。
    cygwinでは、/cygdrive/<ドライブ名>/という形で、 ドライブにアクセスできる。 例えば、D:\tmp\というディレクトリに展開するならば、 /cygdrive/d/tmp/ に展開すればよい。 C:\tmpならば、/cygdrive/c/tmpである。
    以下の例は、O:\soft-ensyu\compiler\ にあるソースのアーカイブを、 D:\tmp\以下に展開している。
    ~$ cd /cygdrive/d/
    /cygdrive/d$ mkdir -p tmp
    /cygdrive/d$ cd tmp
    /cygdrive/d/tmp$ bzcat /cygdrive/o/soft-ensyu/compiler/binutils-2.13.tar.bz2 | tar xvf -
    ...
    /cygdrive/d/tmp$ zcat /cygdrive/o/soft-ensyu/compiler/gcc-2.95.3.tar.gz | tar xvf -
    ...
    /cygdrive/d/tmp$ zcat /cygdrive/o/soft-ensyu/compiler/newlib-1.10.0.tar.gz | tar xvf -
    ...
    /cygdrive/d/tmp$ ls -F
    gcc-2.95.3/                 binutils-2.13/
    newlib-1.10.0/
        
    tar のオプションの意味は、z:gunzip, x:extract, f:file, j:bunzip2, v:verbose。 詳しくは、tar --help や、zcat --help などを参照。

  10. configure
  11. configureというのは、これからmakeを行おうとしているマシン(BUILD())の環境を調べて、Makefile等を準備するスクリプ ト。
    configure --help とすると、オプションが表示される。
    GNUのコンパイラをビルドする際には、 binutils→gcc→newlib(又はglibc) という順序でビルドを行う。
    1. ビルド(make)を行うディレクトリを作成する。
      /cygdrive/d/tmp$ cd binutils-2.13/
      /cygdrive/d/tmp/binutils-2.13$ mkdir m68k-coff
      /cygdrive/d/tmp/binutils-2.13$ cd m68k-coff
      /cygdrive/d/tmp/binutils-2.13/m68k-coff$ 
      	  
    2. configureスクリプトを実行する。
      /cygdrive/d/tmp/binutils-2.13/m68k-coff$ ../configure --help
      ... (オプションが表示される)
      /cygdrive/d/tmp/binutils-2.13/m68k-coff$ ../configure --target=m68k-coff 2>&1 | tee configure.out
      ...
      	  
    【説明】

  12. make
  13. 前項のconfigureスクリプトにより作成されたMakefileにより、 実行ファイルをビルドする。
    /cygdrive/d/tmp/binutils-2.13/m68k-coff$ make 2>&1 | tee make.out
    ...
        

  14. インストール
  15. 前項のmakeによりビルドされた実行ファイルやオンラインマニュアル等を、 /usr/local(--prefixで指定したディレクトリ)以下にインストールする。
    /cygdrive/d/tmp/binutils-2.13/m68k-coff$ make install 2>&1 | tee make-install.out
    ...
        

  16. binutilsのmakeとインストール
  17. まずbinutilsをmakeし、 PATHの通ったところにインストールしなければならない。
    なぜなら、gccやglibc(newlib)のコンパイルの際に、 binutilsのツール(m68k-coff-ld, m68k-coff-arなど)を利用するから。
    前三項のconfigure,make,インストールの説明では、 binutilsのmakeとインストールの説明をしているので、 すでにこれらを実行していれば、 以下は実行せずに次項(gccのmakeとインストール)へ進んでよい。
    /cygdrive/d/tmp/binutils-2.13$ mkdir m68k-coff
    /cygdrive/d/tmp/binutils-2.13$ cd m68k-coff
    /cygdrive/d/tmp/binutils-2.13/m68k-coff$ ../configure --target=m68k-coff 2>&1 | tee configure.out
    ...
    /cygdrive/d/tmp/binutils-2.13/m68k-coff$ make 2>&1 | tee make.out
    ...
    /cygdrive/d/tmp/binutils-2.13/m68k-coff$ make install 2>&1 | tee make-install.out
    ...
        

  18. gccのmakeとインストール
  19. 前項でmake installされたbinutilsを利用する。 --program-prefix は、前項と同じにしなければならない。
    PATHが/usr/local/binに通っていることを確認するのを忘れずに。
    /cygdrive/d/tmp/gcc-2.95.3$ cp -r ../newlib-1.10.0/newlib/libc/include /usr/local/m68k-coff
    /cygdrive/d/tmp/gcc-2.95.3$ mkdir m68k-coff
    /cygdrive/d/tmp/gcc-2.95.3$ cd m68k-coff
    /cygdrive/d/tmp/gcc-2.95.3/m68k-coff$ ../configure --target=m68k-coff --with-newlib --nfp -v 2>&1 | tee configure.out
    ...
    /cygdrive/d/tmp/gcc-2.95.3/m68k-coff$ make LANGUAGES="c c++" 2>&1 | tee make.out
    ...
    /cygdrive/d/tmp/gcc-2.95.3/m68k-coff$ make LANGUAGES="c c++" install 2>&1 | tee make-install.out
    ...
        

  20. newlibのmakeとインストール(参考)
  21. ソフトウェア演習では、libc等の標準Cライブラリは利用しないので、 この項(newlibのmakeとインストール)は必要ない。
    /cygdrive/d/tmp/newlib-1.10.0$ mkdir m68k-coff
    /cygdrive/d/tmp/newlib-1.10.0$ cd m68k-coff
    /cygdrive/d/tmp/newlib-1.10.0/m68k-coff$ ../configure --target=m68k-coff --with-gnu-ld --with-gnu-as --nfp -v 2>&1 | tee configure.out
    ...
    /cygdrive/d/tmp/newlib-1.10.0/m68k-coff$ make all-target-newlib 2>&1 | tee make-all-target-newlib.out
    ...
    /cygdrive/d/tmp/newlib-1.10.0/m68k-coff$ make install-target-newlib 2>&1 | tee make-install-target-newlib.out
    ...
        

  22. ビルドしたソースの保存
  23. 端末のローカルドライブでビルドしたソースツリーは、 インストールが完了したら消しておく。
    今後もビルドの履歴を参照するかもしれないので保存しておきたい場合は、 サーバの各自のディレクトリ(P:\)に移動しておけばよい。 Cygwinで移動するならば、
    /cygdrive/d$ mv tmp /usr/local/src
        
    とすればよい。 (/usr/local/は、P:\cygwin\usr\localだから、Cygwinから見ると、 /usr/local/src/gcc-2.95.3/m68k-coff/ に今回ビルドした状態があることになる。)

※用語集

戻る
Last modified: Mon Oct 21 23:49:12 JST 2002