GNUとフリーソフトウェア、オープンソースソフト
GNUは無償、無保証のソフトをソースリストで公開しています。このソースリストで公開していることから、オープンソースソフトと混同されることがしばしばありますが、GNUは自分らが公開しているソフトウェアをフリーソフトウェアとしています。これらの違いは、筆者よりはるかに詳しい方がウェブの各所で説明されていますので、興味のある方は各自でお調べください。
連載第2回の今回は、このGNUソフトウェアのクロスコンパイラGCCとデバッガGDB(上記の1.と2.)の入手とインストールです。この辺は、プログラミングを生業とされる方々には馴染み深い範囲かと思います。
GCC/GDB(Windows)
Windowsでは、自分自身のソフトウェアのコンパイルは通常状態では用意されていません。Visual C++やCygwinで自分でビルドと言う手もありますが、あまり一般的ではありません。そこでコンパイル済みのバイナリを利用します。
入手とインストール
Windows版のARMのクロスコンパイラは下記から入手できます。
ですが、最新版で生成したRoboShellのバイナリは動作しません。以前のバージョンのクロスコンパイラを利用します。
以前のバージョンのクロスコンパイラはTeamKNOxのサイトからダウンロードできます。適当なディレクトリに展開してパスを通しておきます。DOSプロンプトから、
arm-none-eabi-gcc[Enter]
を実行し、
arm-none-eabi-gcc: no input files
と表示されれば OK です。
gdbも同梱されていますので、展開すれば使えるようになります。
arm-none-eabi-gdb[Enter]
を実行し、
GNU gdb (CodeSourcery ARM Sourcery G++ 2006q3-26) 6.5.50.20060822-cvs Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "--host=i686-mingw32 --target=arm-none-eabi". For bug reporting instructions, please see: . (gdb)
と表示されればOKです。
quitでプログラムを終了します。
GCC/GDB(UNIX系OS)
現在、一般的に利用されているUNIX系OSと言えば、LinuxとMacOSXでしょう。これらの環境では標準的にコンパイラが用意されているので、本家GNUからtarボールを入手して自分自身でビルドすることができます。
Linux
筆者はLinux環境としてFedora Core(FC)7を使っています。インストールはDVDでブートディスクを作成した後にネットワークで最新環境に保つようにしています。
MacOSX
Tigerを想定しています。
MacOSXの場合はXCODEが必須です。予め、下記からダウンロードしてインストールしておきます。ダウンロードするためにはユーザ登録が必要になりますので、こちらは各自で済ませておいてください。
gccの入手
GNUや関連サイトから下記のファイルをダウンロードしておきます。
最近ではプレリリース版である4.2.3がダウンロード出来るようになっています。好みでダウンロードすればよいでしょう。本稿でクロスコンパイラのビルドの方法をマスターすれば、常に最新版でソフト開発を行うことが出来るようになり、いわゆる GCCの「おっかけ」になることが出来ます。
gccのインストール
ビルドの仕方は、LinuxもMacOSXもほぼ共通です。インストールは全てroot権限で行っておくと良いでしょう。全てのファイルは/tmpディレクトリにダウンロードしておきますが、MacOSXでは起動時に/tmpディレクトリの内容は全て消去されてしまうので注意してください。
1.binutils
tar xvzf binutils-2.18.tar.gz ./configure --target=arm-elf --prefix=/usr/local/arm make install
2.newlibの展開
gccのメイク時にnewlibのヘッダファイルを使用するので、展開しておきます。ここでは、/tmp以下に展開します。
また、gcc/g++のメイクの際に、newlibのヘッダファイルの位置を指定しますが、うまく動作しないため/usr/local/arm/includeというシンボリックリンクを作成しておきます。
tar xvzf newlib-1.15.0.tar.gz cd newlib-1.15.0 ln -s /tmp/newlib-1.15.0/newlib/libc/include /usr/local/arm/include
3.gcc/g++ 1回目
デフォルトでインストールされているgcc(x86用)では、libsspを有効にしてconfigureを実行するとlibsspのリンクチェックの際に、newlibのcrt0.oのリンクに失敗するため、まずはlibsspを使用しないARM用のクロスコンパイラを作成します。
export PATH=$PATH:/usr/local/arm/bin bzip2 -dc gcc-4.2.1.tar.bz2 | tar xvf - bzip2 -dc gcc-g++-4.2.1.tar.bz2 | tar xvf - cd gcc-4.2.1 ./configure --target=arm-elf --prefix=/usr/local/arm/ --enable- languages=c,c++ --with-cpu=arm7tdmi --with-newlib --with-headers= /tmp/newlib-1.15.0/newlib/libc/include/ --disable-ada --disable-libssp make make install
4.newlib 1回目
メイクしたlibssp無効のコンパイラを使用して、newlibをメイクします。なお、make installの前に、シンボリックリンクを削除しておきます。
cd /tmp ./configure --target=arm-elf --prefix=/usr/local/arm/ --disable-ada --disable-libssp make rm /usr/local/arm/include
5.gcc/g++ 2回目
1回目でメイクしたlibssp無効のコンパイラを使用して、libssp有効のコンパイラをメイクします。なお、make installの前に、1回目にメイクしたコンパイラをアンインストールします。
export PATH=$PATH:/usr/local/arm/bin mv gcc-4.1.1 gcc-4.1.1-1st bzip2 -dc gcc-4.2.1.tar.bz2 | tar xvf - bzip2 -dc gcc-g++-4.2.1.tar.bz2 | tar xvf - cd gcc-4.2.1 ./configure --target=arm-elf --prefix=/usr/local/arm/ --enable -languages=c,c++ --with-cpu=arm7tdmi --with-newlib --with-headers= /tmp/newlib-1.15.0/newlib/libc/include/ make make uninstall 注)ルールがない場合あり make install
6.newlib 2回目
メイクしたlibssp有効のコンパイラを使用して、newlibをメイクします。
mv newlib-1.15.0 newlib-1.15.0-1st tar xvzf newlib-1.15.0.tar.gz cd newlib-1.15.0 ./configure --target=arm-elf --prefix=/usr/local/arm/ make make uninstall 注)ルールがない場合あり make install