クロスコンパイル環境の構築(ホスト:PowerPC, ターゲット:ARM9の場合) †
目標: PowerPC Linux 上で ARM9 Linux 用のプログラムをコンパイルする。情報は2008.05.08のもの。
クロスコンパイル環境を作るにあたって †
| ホストアーキテクチャ | PowerPC | (PowerMac G5) |
| ターゲットアーキテクチャ | ARM9 | (玄箱/PRO) |
GNU のコンパイラの基本的な構成要素は以下の 3 つ。
- binutils
アセンブラ・リンカ・バイナリ操作プログラムなど
- gcc
コンパイラ
- libc
C の標準的なライブラリ
binutils と gcc をまとめて「ツールチェイン(toolchain)」とも呼ぶ。
今回は、crosstool を用いてクロスコンパイル環境の構築を行う。crosstool は、Dan Kegel 氏が作成したクロスコンパイル用 gcc、glibc の自動生成スクリプト集。PowerPC など多くのプラトフォームと、gcc と glibc の組合せに対応している。
クロスコンパイル環境の構築(main) †
- crosstool のダウンロード
- スクリプトの実行
- 事前に root 権限でユーザ権限の crosstool 用のフォルダを作成しておく。
$ sudo mkdir /opt/crosstool
$ sudo chown $USER /opt/crosstool
- コンパイルには bison と flex も必要なので事前にインストールしておく。
$ apt-get install bison flex
- 今回は、ターゲットCPUがARM9なので、ARM9用のスクリプトを実行する
$ cd crosstool-0.43
$ sh demo-arm9tdmi.sh
実行するとFTPダウンロード~展開するまで 60 分程度かかった。
※sh demo-arm.sh(unknown版)でも玄箱/PRO上で正しく動作した。arm9tdmi版との違いはわからない。
- パスを通す
- hello.c をクロスコンパイル
- hello.c を作成
#include <stdio.h>
main () {
printf ("Hello world !\n");
return 0;
}
- hello.c のコンパイル
シェアードライブラリを使用する(通常のコンパイル)
arm-9tdmi-linux-gnu-gcc -o hello-arm9 hello.c
これで hello-arm9 という名前で ARM9 上で実行可能なファイルがコンパイルされる。
スタティックリンクの場合(関数のコードを実行ファイルに組み込むため、動くマシンは多くなるがファイルサイズはかなり大きくなる)
arm-9tdmi-linux-gnu-gcc -static -o hello-arm9-static hello.c
- file コマンドでコンパイルされた内容を確認できる。
$ file hello-arm9
hello-arm9: ELF 32-bit MSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.18,
dynamically linked (uses shared libs), for GNU/Linux 2.4.18, not stripped
- 玄箱/PRO に hello-arm9 をコピー、実行権限を与えて実行してみる → 成功!
$ ./hello-arm9
Hello World !
今後、カーネルのコンパイルにもチャレンジしたい。
ハマったところ †
参考リンク †