クロス開発環境の整備とRAMディスクの書き換え組み込みLinux開発入門(3)(3/3 ページ)

» 2005年10月18日 00時00分 公開
[渡辺 武夫 イーエルティ,@IT MONOist]
前のページへ 1|2|3       

RAMディスクイメージのカスタマイズ

 ここまでで、ホストPCでコンパイルしたアプリケーションをターゲット上で動作させることができるようになりました。しかし、このままではArmadillo-9を再起動すると作成したアプリケーションは消えてしまいます。実行するためには、またホストPCから転送する必要があります。

 これは、Armadillo-9側のファイルシステムがRAMディスクであるためです。実際の組み込み機器では、立ち上げに伴い毎回ファイル転送を必要とすることはあり得ません。

 それでは、このArmadillo-9でもほかの組み込み機器と同様に、起動に伴うプログラム転送を排除することができるのでしょうか。結論を先に書くと、もちろん可能です。また、電源投入と同時にプログラムを動かすこともできます。

 それをどうやって実現するかというと、RAMディスクの元データを操作するのです。ご存じのように、RAMディスクも無から生じるものではなく、どこか()にあるオリジナルRAMディスクイメージをRAMにコピーし、それを組み込みLinuxがマウントしているのです。前述したように、基となるRAMディスクイメージに作成したプログラムを追加すれば、転送作業は不要になります。RAMディスクイメージにはLinuxの各種設定ファイルやスクリプト(inittabなど)も入っています。これらを改造することにより、作成したプログラムの自動実行を含め、好みの環境に仕立て上げることが可能です。

注:Armadillo-9の場合はフラッシュメモリに格納されています。

Hermitのインストール

 Armadillo-9には、フラッシュメモリを書き換えるためのツール「Hermit」が付属しています。まず、このHermitをArmadillo-9にインストールします。

 HermitにはWindowsで動作するGUI版もありますが、ここではLinuxで動作するCUI版を利用します。Armadillo-9の付属CD-ROMをマウントしたら、以下の手順でホストPCにインストールしてください。

# cd /mnt/cdrom/hermit/rpm
# rpm -i hermit-1.3_armadillo9-3.i386.rpm

RAMディスクイメージの編集

 Hermitをインストールしたら、Armadillo-9のRAMディスクイメージ(romfs-20050506.img.gz)をCD-ROMからホストPCにコピーします。このRAMディスクイメージを編集してArmadillo-9に書き込むことで、Armadillo-9の環境を変更することができます。

# cd /mnt/cdrom/image
# cp romfs-20050506.img.gz ~/.

 RAMディスクイメージのコピーが完了したら、内容を編集しましょう。まず、romfs-20050506.img.gzをgzipコマンドで展開します。

# cd ~
# gunzip romfs-20050506.img.gz
gunzip: romfs-20050506.img.gz: decompression OK. Trailing garbage ignored

 次に、/mnt/tempというマウントポイントを作ってRAMディスクイメージをマウントします。lsコマンドでRAMディスクイメージを見ると、見慣れたファイルシステムが表示されるはずです。

# mkdir /mnt/temp
# mount -o loop romfs-20050506.img /mnt/temp
# ls /mnt/temp
bin  etc   lib      lost+found  proc  sbin  usr
dev  home  linuxrc  mnt         root  tmp   var

 作成したアプリケーション(hello)をコピーしたら、RAMディスクイメージをアンマウントして再圧縮します。

# cp hello /mnt/temp/root/.
# umount /mnt/temp
# gzip romfs-20050506.img

 以上で、一連の作業は完了です。今回の例では、構築済みのプログラムをコピーしただけですが、必要に応じてファイルを編集することで好みの設定を盛り込むことが可能です。

RAMディスクイメージの転送

 最後に、更新したRAMディスクイメージをArmadillo-9のフラッシュメモリに書き込みます。これを行うには、Armadillo-9をフラッシュ書き込みモードに変更する必要があります。

 フラッシュ書き込みモードに変更するには、Armadillo-9の電源を切断してイーサネットポート左横のピンを付属のジャンパを用いてショートさせます(写真参照)。

ジャンパ非装着時 ジャンパでショートさせた状態

 Armadillo-9を再起動すると、フラッシュ書き込みモードとなります。後は、ホストPCからHermitを使ってRAMディスクイメージを転送します。なお、転送作業を行う前に、必ずminicomを終了させておいてください。Hermitは独自にシリアルポートを使用するので、minicomを終了し忘れると、いつまでたっても転送作業ができないことになります。

 以下に、Hermitの実行例を掲載します。シリアル経由での転送なので、非常に時間がかかります。慌ててリセットなどを行わず、終了するまでじっくり待ちましょう。

# hermit download -i romfs-20050506.img.gz -r userland
target: Hermit v1.3-armadillo9-3 compiled at …
serial: completed 0x001a3162 (1716578) bytes.

 転送が完了したら、Armadillo-9の電源を切断してジャンパを取り除き、ピンを開放すれば作業完了です。minicomを再び立ち上げ、Armadillo-9の電源を入れてみてください。

 RAMディスクイメージの内容変更とフラッシュへの転送が正常に終了していれば、Armadillo-9に作成したアプリケーション(hello)が存在しているはずです。

# minicom
………
armadillo9 login: root
Password:
[root@armadillo9 (ttyAM0) ~# ls
hello*
[root@armadillo9 (ttyAM0) ~# ./hello
0 : Hello World !
1 : Hello World !
2 : Hello World !
3 : Hello World !
4 : Hello World !
5 : Hello World !
6 : Hello World !
7 : Hello World !
8 : Hello World !
9 : Hello World !

注:Armadillo-9のフラッシュメモリのうち、RAMディスクイメージを収納できる領域は約6.44Mbytes(0x670000bytes)です。このサイズを超えることはできません。RAMディスクイメージを転送する際は、転送作業を行う前にファイルサイズを確認してください。

 ここまで、組み込みLinuxにおけるプログラム開発の流れの基礎を解説していきました。何度か言及したように、組み込み固有の要点を除けば、通常のLinuxでのソフトウェア開発とさほど違いがないことが分かったでしょう。

コラム インターネットで入手したアプリケーションを構築するには

 Linuxを組み込み機器に採用する際、よく耳にするのが「インターネット上にあるオープンソース・アプリケーションを即座に使用できる」という言葉です。これは、プログラムを簡単にコンパイルして実行させることができるという意味ですが、これが成立するのはセルフ開発を行う場合に限られます。つまり、多くのオープンソース・アプリケーションは、クロスコンパイルを行う環境に対応していない、ということです。

  プログラムをコンパイルする前には、環境設定(configure)が必要ですが、configureはクロス開発に対応していません。そのため、インターネットで入手したアプリケーションを組み込み向けに構築する場合、それ相応のテクニックが必要となります。

  ちなみに筆者は、

  ・configureを取りあえず実行して、セルフ開発のための環境設定を行う
・Makefileなどを直接編集し、コンパイラ名などをクロスコンパイラに置き換える
・後は、コンパイルエラーがなくなるまで地道にコンパイル(make)を繰り返す

  といった方法でしのいでいます。正直、この手順が正統的なLinuxプログラム開発手法ではないと知っているつもりですが、もともとクロス開発対応されていないものなので、あまりこだわってもしょうがない、というのが本音です。

組み込み向けの事例などがたくさん集まることにより、もっと効率が良く、正統的なLinuxプログラム開発手法に準じさせることもできると思いますが、はてさていかがなものでしょうか。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.