「これから組み込みソフト開発に取り組むWindowsプログラマ」を対象に,組み込みLinuxを用いた開発の基本について解説します。第2回は,組み込みLinuxのアプリケーション開発時の流れと,どの部分を開発しなければならないのかを説明します。

 前回は,アプリケーション開発における「Windowsと組み込みLinuxの違い」を説明しました。今回は,もう少し具体的に,(1)組み込みLinuxのアプリケーション開発時の流れと,(2)どの部分を開発しなければならないのか,を紹介します。

組み込みLinuxにおけるアプリケーション開発の流れ

 組み込みLinuxにおけるアプリケーション開発は,図1のように進みます。

図1●組み込みLinuxの開発の進め方
図1●組み込みLinuxの開発の進め方

(1)クロス・コンパイル

 組み込みLinux用のプログラムを開発する場合,実際にプログラムを動作させる機器(以下,実機と呼びます)上ではなく,開発用のPC(以下,開発用PCと呼びます)上で行います。

 開発用PCは通常,LinuxディストリビューションをインストールしたPCです。Windows上の仮想マシンでLinuxディストリビューションを動作させ,その上で開発することもよくあります。

 開発用PC上で,テキスト・エディタなどを使ってソースコードを作成します。プログラミング言語としては,C言語が広く用いられています。エディタで記述したソースコードを,コンパイラでコンパイルし,実機上で実行可能なバイナリコードを生成します。ここで生成されるバイナリは,実機のCPUアーキテクチャ用の機械語命令で成り立っています。

 例えば,CPUがARMならば,バイナリコードはARMの機械語命令で構成されます。開発用PCのCPUは通常,米Intelのx86系アーキテクチャを採用しているので,このバイナリはPC上では実行できません。

 このように,開発用PCのものとは違ったCPUアーキテクチャの実行ファイルにコンパイルすることを「クロス・コンパイル」と呼びます。また,違った機械語を出力するコンパイラを「クロス・コンパイラ」と呼びます。Linuxでよく用いられるコンパイラである「GCC(GNU Compiler Collection)」は,主要な組み込み機器用CPU向けのクロス・コンパイラとして使えるようになっています。

 なお,開発用PCのことを「ホスト」,実機のことを「ターゲット」と呼ぶこともあります。

(2)バイナリコードの転送

 開発用PC上で生成したバイナリコードを,組み込み機器に転送します。

 転送の仕方は複数あります。LANケーブルでつながっている場合は,NFS(Network File System)やHTTPが用いられます。シリアル・ケーブルでつながっている場合はxmodemという手順を使います。

 また,コンパクトフラッシュをサポートした組み込み機器の場合は,開発PC上で,コンパクトフラッシュにファイルをセーブ(保存)し,実機にコンパクトフラッシュを差し込み,ファイルを転送します。

(3)テストとデバッグ

 PC向けのアプリケーション開発時にテストやデバッグを行う場合,通常はアプリケーションを動作させて,ディスプレイの表示を確認します。しかし,組み込み機器では,ディスプレイがつながっていなかったり,そもそも入力機器であるキーボードやマウスがつながっていなかったりします。

 このような場合に用いられるのが,「シリアル・コンソール」(図2)です。

図2●シリアル・コンソールの画面例。組み込み機器からの出力がPCに表示されている。この例ではWindows用のターミナル・エミュレータ・ソフトウエアである「Tera Term」をシリアル・コンソールとして使っている
図2●シリアル・コンソールの画面例。組み込み機器からの出力がPCに表示されている。この例ではWindows用のターミナル・エミュレータ・ソフトウエアである「Tera Term」をシリアル・コンソールとして使っている
[画像のクリックで拡大表示]

 シリアル・コンソールを使うには,前回の図1にあるようなシリアル・ケーブルでPCと組み込み機器を接続します。これにより,組み込み機器からの出力をPCのコンソール画面に表示することができます。

 また,PCでのキーボード入力を組み込み機器に送り,組み込み機器上のプログラムに入力をすることもできます。このようにして,PCから組み込み機器を,コマンドプロンプトのようなインタフェースで操作できるわけです。