昨今の携帯電話やゲーム機などをはじめとした、ちょっと気の利いたデバイスには必ず制御用のCPUとしてARMが使われている。世間に注目されている組込み機器と言うわけだが、これらのデバイスを開発するためにはARMのクロスコンパイラが必要になる。本ページでは ARM のクロスコンパイラの作成方法について述べる。今回は ARM を対象としたが、適宜読み替えることにより他のターゲット(SH)などにも応用できると思われる。
-
目的
ARM用のGCCをインストールする
-
準備
GCC のインストールに必要なソフトをダウンロードする。
今回は、C/C++のみインストールするため、gobjcや、gcj等は必要ない。
- binutils-2.16.1.tar.gz
2007/2/7時点での最新版であるbinutils 2.16.1を使用する。
- gcc.4.1.1.tar.gz
2007/2/7時点での最新版であるg++ 4.1.1を使用する。
- g++ 4.1.1.tar.gz
2007/2/7時点での最新版であるg++ 4.1.1を使用する。
- newlib
2007/2/7時点での最新版であるnewlib 1.15.0を使用する。
-
インストール
インストール作業は全て root 権限でおこなう。
- binutils
- tar xvzf binutils-2.16.1.tar.gz
- ./configure --target=arm-elf --prefix=/usr/local/arm
- make install
- newlibの展開
gccのメイク時にnewlibのヘッダファイルを使用するので、展開しておく。ここでは、/tmp以下に展開する。
また、gcc/g++のメイクの際に、newlibのヘッダファイルの位置を指定するが、うまく動作しないため
/usr/local/arm/includeというシンボリックリンクを作成しておく。
- "ftp://sources.redhat.com/pub/newlib/index.html" より、newlibをダウンロードする。
- cd /tmp
- 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
- gcc/g++ 1回目
PS3Linuxにデフォルトでインストールされているgcc (x86用)では、libsspを有効にしてconfigureを実行すると
libsspのリンクチェックの際に、newlibのcrt0.oのリンクに失敗するため
まずは、libsspを使用しないARM用のクロスコンパイラを作成する。
- "http://gcc.gnu.org" より、gcc/g++をダウンロードして、展開する。 尚、はじめは、libsspを外したコンパイラを作成する。
- export PATH=$PATH:/usr/local/arm/bin
cd /tmp
- tar xvzf gcc.4.1.1.tar.gz
- tar xvzf g++.4.1.1.tar.gz
- cd gcc-4.1.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
- 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
- make install
- 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
- tar xvzf gcc.4.1.1.tar.gz
- tar xvzf g++.4.1.1.tar.gz
- cd gcc-4.1.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
- 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
-
実行方法
- path の設定
.bash_profile の最終行に
export PATH="$PATH:/usr/local/arm/bin"
付け加える。
- 実行
arm-elf-gcc [Enter]
-
今後
- 実際に使ってみて、使用方法やTIPSなどをレポートする。
-
謝辞
インストールに尽力してくれた TeamKNOx の非常勤研究員 T.M.氏に感謝します。
|