fc2ブログ

seanchas_lab :: blog

適当なメモなど

ARM用のGCC環境( arm-none-eabi-gcc + newlib )ビルド in Mac  

雑誌Interfaceの2009年5月号(LPC2388付録基板付き)を購入しました(1年以上前のものですが普通にCQ出版のWebサイトで通販してます)。しかし、Mac上などでコンパイラGCCを使って開発する方法は紹介されていない…(当たり前?)
そこで、自分でARM用のGCC( arm-none-eabi-gcc 4.5.0 + newlib 1.18.0 )をビルドして、Mac上でこのLPC2388(ARM7TDMI-S)の開発をできるようにし、newlibによるC標準ライブラリも使えるようにしました。環境はMac OS X上ですが、それ以外のLinuxやCygwinなどでも似たような方法でビルドできると思います。

環境:Mac OS X Snow Leopard 10.6.4

XCodeおよびMacPortsのインストールが前提で話を進めていきます。(MacPortsの入れ方は後で紹介するかも。ただ、検索すればあちこちで紹介されているはず。)あと、Mac OS Xのバージョンがあまりに古すぎてもだめっぽいです。ターミナルの使い方がわからない人は調べてください。

1) MacPortsでGMP、MPFR、およびMPCライブラリをインストール

GCC 4.5.0のビルドには、GMPMPFR、およびMPCの各ライブラリが必要となっています。これらのライブラリを一から自分で作るのは面倒なので、MacPortsで一括インストールしちゃいます。
このように、ターミナルを開いて実行します(要管理者パスワード)。

$ sudo port install libmpc


どうも、MPCライブラリはGMP、MPFRに依存しているようなので、MacPortsではMPCをインストールすると、GMP、MPFRも一緒にインストールされます。

ちなみに、Ubuntu上とかだったら、

$ sudo apt-get install libmpc-dev


とかすればいい気がします。自信はないけど

2) 自前でビルドするもののソースコードをゲットして展開する

今回自前で作るものは、
binutils(アセンブラやリンカなど。GCCの使用に必要)
gcc(メインのコンパイラ。無敵のオープンソースコンパイラ)
newlib(RedHatが公開している組み込み用途向けのC標準ライブラリ集。gccと組み合わせてビルド)
になります。これらをARM向け(arm-none-eabi)としてビルドしていきます。

まず、上のリンクからそれぞれのソースコードを落としてきます。今回私が落としたのは、
binutils-2.20.1.tar.bz2
gcc-4.5.0.tar.bz2
newlib-1.18.0.tar.gz
です。それぞれ現時点(2010/06/23)での最新版です。

そうしたら、それぞれを適当な解凍ソフトで解凍し(別にコマンドラインでもいいけど)、フォルダに展開します。ここでは、ホームフォルダ直下の「Temp」というフォルダ(~/Temp)に展開したという設定で話をします。

~/Temp の内容物:
binutils-2.20.1
gcc-4.5.0
newlib-1.18.0


こんな感じにフォルダがなっているでしょう。

3) 環境変数を登録

これらをビルドするのには、先ほど入れたライブラリたちをMacのコンパイラ(これももちろんgcc)が知っておく必要があります。そこで、ターミナルで次のコマンドを実行して、環境変数を一時的に登録します。これは、ターミナルのウィンドウを閉じれば無効になってしまいます。この環境変数はこの先使うので、ウィンドウは閉じないように。

$ export CFLAGS="-I/opt/local/include -O2"
$ export LDFLAGS="-L/opt/local/lib"


MacPortsのインストール先をインクルードファイルやライブラリファイルとして参照させています。CFLAGS(gccへの引数)の"-O2"では、最適化レベル2を指定しています。

4) binutilsのビルド

binutilsをビルドします。先ほど環境変数を登録したウィンドウで以下のコマンドを実行します。

$ cd ~/Temp/binutils-2.20.1
$ ./configure --prefix=/usr/local/development --disable-werror --target=arm-none-eabi --enable-interwork --enable-multilib
$ make
$ sudo make install


この手のソフトではお決まりの手順です。

--prefixの部分:
インストール先を決めています。デフォルトインストール先の/usr/localには、ほかのソフトも入っている場合があり、混ざって面倒になる可能性が大きいので、別のフォルダ(ここでは例として/usr/local/development)にインストールします。

--disable-werror:
現行のbinutils(2.20.1)には、Snow Leopard上でビルドすると、エラーが起こって途中でビルドが止まってしまうという問題があるようです。そこで、このオプションを選択して、強制的にビルドを続けるようにします。

--target=arm-none-eabi:
ターゲットはもちろんARMです。

5) gccのビルド

いよいよ本日のメイン、arm-none-eabi-gccのビルドです。インストール先はbinutilsと同じです。ウィンドウは引き続き。

$ cd ~/Temp/gcc-4.5.0
$ ln -s ../newlib-1.18.0/newlib .
$ mkdir build
$ cd build
$ ../configure --prefix=/usr/local/development --target=arm-none-eabi --enable-interwork --enable-multilib --with-newlib --enable-languages="c,c++"
$ make
$ sudo make install


ln -s ../newlib-1.18.0/newlib .:
まず、newlibのソースのフォルダのシンボリックリンクをgccのフォルダの下に置いています。

mkdir build; cd build:
buildというビルド専用のフォルダを作って、そこでビルドをします(最近のgccはそうしないといけないようになっています)。

--enable-languages="c,c++":
今回はC言語、C++がコンパイルできるようにしています。

6) 実際にコンパイルして試す

一応これでarm-none-eabi-gcc周りの環境はできましたが、実際に何かをコンパイルするまでは安心できません。そこで、『ARM LPC2388 開発環境構築方法』の方が公開してくださっているサンプルプロジェクト(リンク先)を実際にコンパイルしてみます。

まず、gccのインストール先の/usr/local/development/binを、コマンドのあるパスとして登録しなければなりません。そこで、不可視ファイルをいじれるエディタ(「Fraise」がおすすめ)を使って、ホームフォルダの.profileファイル(~/.profile)に、次の記述を追加します。

export PATH=$PATH:/usr/local/development/bin


これで、次以降開いたターミナルのウィンドウでは、arm-none-eabi-gccがコマンドとして利用できるようになります。

つづいて、ダウンロードしたファイルを展開します。そして、開き直したターミナルで、

$ cd <展開したフォルダのパス>
$ make


とやります。

このフォルダの中に「main.hex」「main.elf」などができれば、arm-none-eabi-gccは使えています。環境構築は、これで完了です。





これで、ARMマイコンの開発をGCCですることができるようになりました。私は、今まではSH-2の開発をsh-elf-gccでやっていたのですが、ARMの開発環境にスムーズに移行できそうです。
スポンサーサイト



Posted on 00:21 [edit]

category: ARMマイコン

thread: 電子工作 - janre: コンピュータ

tb: 0   cm: 1

コメント

承認待ちコメント

このコメントは管理者の承認待ちです

 |  #
2014/02/18 18:00 | edit

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://theest.blog133.fc2.com/tb.php/5-71f7575f
この記事にトラックバックする(FC2ブログユーザー)

カレンダー

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

検索フォーム

RSSリンクの表示

リンク

ブロとも申請フォーム

QRコード