ソフトウェアの開発環境を知る ―― さまざまなマイコンをサポートするフリー・ツールを使う

山際 伸一

ここでは,マイコンのソフトウェア開発環境について解説します.特定のマイコン・ファミリに依存せず,多くのアーキテクチャで共通に使えるツールを例にします.統合環境に見えるツールでも裏ではここで説明するツールが動いていることがあります.(編集部)

 ここではマイコンに搭載するソフトウェアの開発に必要な知識を解説していきます.特にソフトウェア開発で必要となるツールとはどのようなものか,それはどのように手に入れればよいのか,どんな知識があればそれらを使いこなせるのかについて説明します.組み込み機器向けのソフトウェアを開発したことのない技術者が心配になる事柄を網羅します.

 具体的なツールとして,世の中のすべてのプロセッサをサポートしているといっても過言ではない「GNU」を使った開発環境に関して取り上げます.さまざまなソフトウェア開発環境に関する疑問を解決していきます.

1.組み込みソフト開発の基礎知識

 皆さんの中には,ソフトウェアを開発する環境として,例えば,Windowsが動作しているパソコンに向かって,グラフィカルな画面を持つ開発ツールを使い,さらにそのパソコン上でソフトウェアの挙動を確認する,といった手順を思い浮かべる方がいるかもしれません.パソコンで動作するソフトウェア開発は,実際にこのような環境が用いられています.

 マイコンを搭載する組み込み機器でも,パソコン用アプリケーション・ソフトウェアの開発と同じような開発環境が使用できれば大変便利です.しかし,組み込み機器の場合,Windowsのようなオペレーティング・システムは搭載していないほうが普通です.便利なAPIなどは用意されておらず,マイコンのハードウェアを直接制御しなければなりません.そもそも,最終的に動作させるマイコンの上で動作する開発環境なんてものは存在しないでしょう.

●パソコン向けとは大きく異なる環境で開発する

 マイコンを搭載する機器で動作させるソフトウェアは,「組み込みソフトウェア」と呼ばれ,パソコン向けとは大きく異なる開発の方法を用います.

 パソコン向けのアプリケーションでは,ソフトウェアを開発するプロセッサ(CPU)と,開発されたソフトウェアが実行されるプロセッサが同じです.このような場合を,「ネイティブ開発環境」と呼びます(図1).

図1 ネイティブ開発環境
ソフトウェアを開発するプロセッサ(CPU)と,開発されたソフトウェアが実行されるプロセッサが同じ.

 

 これに対し組み込みソフトウェアでは,最終的に動作させるマイコン・システムを使ってソフトウェアを開発することは困難です.そこで,Windowsパソコンなどで利用可能なソフトウェア開発環境を用います.そして,開発されたソフトウェアは,マイコンのメモリにダウンロードして動作させます.最終的に正しい動作が確認されたソフトウェアはROMなどに書き込まれ,組み込み機器に搭載されることになります.この開発手法では,開発に使われるプロセッサと,開発されたソフトウェアが実行されるプロセッサが異なります.このような環境を「クロス開発環境」と呼びます(図2).


図2 クロス開発環境
開発に使われるプロセッサと,開発されたソフトウェアが実行されるプロセッサが異なる.組み込み機器の開発は,多くの場合がこの方式になる.

 

 クロス開発環境において,開発に使うコンピュータを「ホスト・マシン」,ホスト・マシンのCPUのことを「ホスト・プロセッサ」と呼びます.一方,開発したソフトウェアが動作するCPUのことを「ターゲット・プロセッサ」と呼びます.

●組み込みソフト開発ではさまざまツールを使う

 組み込みソフトウェア開発では,ホスト・マシンにおいて,ターゲット・プロセッサ向けのソフトウェアを開発していくことが目的となります.この際に使われるのがクロス開発ツール群です.

 主要なクロス開発ツールについて説明します.

(1)アセンブラ
 アセンブリ言語で書かれたソース・コードをターゲット・プロセッサ向けの機械語に変換するツールをアセンブラといいます(図3).



図3 アセンブラの役割
アセンブリ言語で書かれたソース・コードをターゲット・プロセッサ向けの機械語に変換する.

 

 アセンブラは,ターゲット・プロセッサが規定するアセンブリ言語に即した文法を解釈することが特徴です.例えば,OPコードに対するオペランドの個数などを解釈し,機械語に変換します.

(2)コンパイラ
 C,C++,Java,C#にような高級言語と呼ばれるプログラミング言語で書かれたソース・コードを機械語へと変換するツールをコンパイラといいます(図4).



図4 コンパイラの役割
高級言語で書かれたソース・コードを機械語へと変換する.

 

 コンパイラは,入力されたソース・コードをできる限りソフトウェア開発者の希望に沿うように最適化を実施する機能も持ちます.

(3)ライブラリ
 ライブラリは厳密にはツールではありません.しかし,組み込みソフトウェアを開発する際に活用するものなので,ツールの一部と見なした方が自然です.

 ライブラリは頻繁に使う関数やルーチンをまとめたバイナリ・ファイルです.ソース・コード中でライブラリ内のルーチン呼び出すと,ライブラリのコードが組み込まれます.

(4)リンカ
 アセンブラとコンパイラで生成した機械語コードとライブラリをつなぎ合わせ,さらに,アドレス情報を加味し,実行形式を作成するツールをリンカといいます(図5).



図5 リンカ
アセンブラとコンパイラで生成した機械語コードとライブラリをつなぎ合わせ,さらにアドレス情報を加味し,実行形式を作成する.

 

 例えば,ある関数や変数の配置場所を指定したいとき,それらのアドレスをリンカに与えることで,アドレス情報を調整します.

(5)バイナリ・ツール
 アセンブラやコンパイラが出力するバイナリ・ファイルの内容は,人間が簡単に判断できないデータ列です.そこで,バイナリ・ファイルの内容を分かりやすい形式に変換したり,表示したり,データの表現形式を変換するといった作業が求められる場合があります.これを行うためのツール群がバイナリ・ツールです(図6).



図6 バイナリ・ツール

バイナリ・ファイルの内容を分かりやすい形式に変換・表示したり,データの表現形式を変換したりするツールがバイナリ・ツールである.ここでは,逆アセンブル・ツールであるobjdumpを用いてバイナリ・ファイルの中身を逆アセンブルし,そのニーモニックを確認している.画面左にある8けたの16進数が命令のバイナリ・データであり,右側がその変換後のニーモニック.

 

 例えば,機械語をアセンブリ言語で表示したり,ライブラリに含まれる関数名を表示したり,バイナリ・データのフォーマットの変換などを行います.

(6)デバッガ
 多くの組み込み機器は,パソコンのようなディスプレイを持っていません.例えば,MP3プレーヤのような携帯機器の場合には,LEDや解像度の低いLCDくらいしか搭載していません.このような表示装置だけでソフトウェアをデバッグするのは困難を極めます.

 そこで,デバッガと呼ばれるツールを用います(図7).デバッガは,ある番地やある変数が期待値になったときにソフトウェアの実行を停止したり,システムの状態を検査できる機能を持ちます.


図7 デバッガ

ある番地やある変数が期待値になったときにソフトウェアの実行を停止したり,システムの状態を検査したりする機能を持つツールをデバッガという.ここでは,GDBベースのデバッガであるInsightを用いてデバッグしている.画面左のコンソールからコマンドを送信し,ブレークポイントで処理を停止させ,右側に示すソース・コマンドを参照しながらレジスタの値を確認している.

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日