それでは実際にプログラムを作ってみましょう。まずは、“Hello World !”を出力するプログラムhello.cを例に、一連の作業について解説します。
クロスコンパイルを体験するのが目的ですから、サンプルコードは単純な方がいいでしょう。以下の内容のファイルをhello.cとして作成してください。
main() |
hello.cのソースコード |
このファイルをクロスコンパイラでコンパイルすることにより、ターゲットで動作する実行ファイルが生成されます。「クロスコンパイラで」と書くと特殊な作業が要求されるように思えるかもしれません。しかし実際には、コンパイラ(コマンド)の名称をセルフ用(gcc)からクロス用(arm-linux-gcc)に変えるだけで、手法自体はこれまでと同じであることが分かるでしょう。
# arm-linux-gcc -o hello hello.c |
ただし、生成された実行ファイル(例では「hello」)をfileコマンドで確認すると、ホストPCのLinux(CPU:x86)ではなく、ターゲットのLinux(CPU:ARM)で動くものであることが分かります。
# file hello |
ちなみに、同じプログラムをセルフコンパイラでコンパイルした場合、fileコマンドの出力は以下のようになります。
# gcc -o hello hello.c |
このように、コンパイラをクロスに変えること(コンパイラ名を変えること)により、動作する環境(CPU)が異なるファイルを生成することができるわけです。
注:コンパイラ名を変えるだけでターゲット用の実行ファイルが作れると解説しましたが、これは自作プログラムの場合です。インターネットなどで入手したLinux用ソフトウェアの場合は、コンパイルに前後してさまざまな作業が必要になるので注意してください。 |
プログラムをコンパイルできたら、後は実行するだけです。しかし、プログラムを実行するには、ファイルをターゲットに転送しなければなりません。これにはFTPを用います。
前回解説したようにホストPCとターゲット(Armadillo-9)を接続し、Armadillo-9の電源を入れて立ち上げておきます。また、この際にネットワークも接続しておくことを忘れないでください。
# ftp 172.16.6.25 |
Armadillo-9に設定したIPアドレスに対してftpコマンドを実行します。FTPのユーザー認証については、Armadillo-9に初めから設定されているanonymousアカウント(ftpアカウント)を使います。このアカウントはパスワードチェックがないので、今回のような試験プログラムの転送には最適といえます。
なお、転送先ディレクトリはアクセス権限の関係上、FTPのルートディレクトリ(/home/ftp/)ではなく、その下のpubディレクトリに限定されます。
自作アプリケーションのFTP転送が完了したら、そのプログラムが正しく動作するかどうかを実際に実行して試すことになります。これは、ホストPC上のminicomを通して(第2回参照)、ターゲット上の組み込みLinuxを操作して実施します。
# minicom |
FTPで転送したファイル(/home/ftp/pub/hello)を、実行したいディレクトリに移動し、実行権を設定(注)します。準備ができたら実行します。
注:FTPで転送した時点でファイル属性が失われてしまうので、あらためて実行権を与える必要があります。 |
後は、実行結果が予想と異なっていれば、
ホストコンピュータでの再構築 |
↓ |
ファイル転送 |
↓ |
ターゲットでの実行 |
を繰り返すだけとなります。
今回はFTPでファイル転送を行いましたが、この方法ではプログラム改修のたびにファイル転送をしなければならないことになります。単純な作業ですが、単純であるが故に、転送し忘れて、いつまでたっても問題が直っていないと勘違いしてしまうことがあります。 こうした単純ミスをなくすため、組み込みLinuxの開発ではNFSを用いて開発ディレクトリをホストPCとターゲットで共有する方法がよく使われます。この場合、プログラム開発(コンパイル)をしたディレクトリをターゲットでも共有しているため、転送操作を意識して行う必要がありません。 |
Copyright © ITmedia, Inc. All Rights Reserved.