後は、「make」を実行すると構築が開始されますが、必要なファイルをデフォルトでは“dl”ディレクトリにダウンロードしながらコンパイルを行っていくので、Buildrootを構築するたびにダウンロードしなくても済むようにダウンロードファイル格納用のディレクトリを別途作成してリンクを張っておくとよいでしょう。
$ mkdir ../dl $ ln -s ../dl
そして、コンパイルを開始します。
$ make
無事コンパイルが終了すると、先ほど指定したディレクトリ内にクロスコンパイル用の環境が出来上がります。“usr/bin”以下には、例えば、ARM用の場合“arm-linux-”から始まるコンパイラやリンカが作成されています。利用しやすいようにパスを通しておくとよいでしょう。今回の場合、環境変数PATHの最後に以下の記述を追加しています。
$ PATH=$PATH:/home/shinji/cross/usr/bin
ここで試しに「Hello World」をコンパイルしてみましょう。まず、以下の内容の“hello.c”を作成します。
#include <stdio.h> int main(void) { printf("Hello World!\n"); }
そして、以下のようにコンパイルを実行します。ここでは静的にリンクをし、“hello-arm”という名前で実行ファイルを作成しています。
$ arm-linux-gcc -static -o hello-arm hello.c
ファイルはできましたが、ちゃんとARM用のバイナリはできているでしょうか? 「file」コマンドで調べてみましょう。
$ file hello-arm hello-arm: ELF 32-bit LSB executable, ARM, version 1, statically linked, not stripped
いかがでしょうか? ARM用の静的リンクによる実行ファイルが出来上がっていると思います。
先ほど作成した実行ファイルは本当に実行できるのでしょうか?
コンパイルのたびにファイルをターゲットに転送して実行してもよいのですが、わざわざターゲットにファイルを転送する手間や、それ以前にターゲットが利用できない場合などがあり得るため、あまりお手軽とはいえません。
そのような場合は、CPUエミュレータである「QEMU」を利用することで、簡単な動作確認が可能になります。QEMUは、Linuxの多くのディストリビューションで利用できます。例えば、Fedoraでは「yum」コマンドで、
$ yum install qemu
インストールできます。
またDebianでは「apt-get」コマンドで、
$ apt-get install qemu
インストールできます。
インストールが完了すると、「qemu-<アーキテクチャ名>」といったコマンドが利用できるようになります。アーキテクチャ名には、armやmips、ppcなどを指定することによって、それぞれのアーキテクチャ用の実行ファイルを動作させることが可能となります。
それでは、先ほどコンパイルしたhello-armを実行してみましょう。ARMをエミュレートするコマンドは「qemu-arm」ですので、そのコマンドの後に、hello-armを指定します。
$ qemu-arm hello-arm Hello World! $
うまく動作確認できたと思います。うまくいかなかった方はもう一度本稿を参考に設定などの見直しをしてみてください。
さて、今回はBusyBoxのおさらいと組み込み向けのクロスコンパイル環境の準備を行いました。次回は、今回準備した環境を使って実際に“BusyBoxをコンパイル”してみます。ご期待ください!(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.