ソフトウェアの開発環境を知る ―― さまざまなマイコンをサポートするフリー・ツールを使う
tag: 組み込み ディジタル・デザイン
技術解説 2010年2月19日
3.GNUツールを用いた開発環境
統合開発環境といってもGUIがあるだけで,裏ではGNUツール群を実行しているだけの場合があります.GNUツールは,たいていのプロセッサをサポートしています.つまり,どのようなツールがあり,どこで手に入れるかなどの基本的な知識があれば,GNUツール群を使って,すぐにでも無償で開発を始められることになります.
ただし,ROMに実行形式のデータを書き込むためのツールは必要になる場合があります.
●GNUツールでクロス開発環境を構築する
GNUツールはさまざまなOS上で利用することができます.最近よく用いられる環境はCygwinです.
Cygwinは,図10に示すWebページからsetup.
exeをダウンロードし,インストールすることができます.
GNUツールは,さまざまな環境下で動作可能です.逆に言えば,特定の環境を想定したバイナリを用意することが難しくなります.Linuxのような完全にパッケージ化された環境下の場合であれば,あらかじめバイナリを用意することができます.しかし,Cygwinはインストールする時期によってバージョンが変わってしまうため,多数の環境が存在してしまいます.特定のバイナリでは,必ずしも動作するとは限らない問題があります.
GNUツールはソース・コードで提供されています.ソース・コードをコンパイルして利用することをお勧めします.バイナリを配布をしているWebページもありますが,ウィルスがしかけられていることがあるので注意が必要です.
●GNUのライセンスの理解が必要
GNUツールのソース・コードを入手し,コンパイルすることで,GNUツールを利用する環境が整ったとします.ここで「GNUツールは有償の開発環境に比べて優れているのか,使い物になるのか」という疑問が生じることでしょう.
「GNUはフリー・ソフトウェアである.」
これは広く知られた事実です.しかし,ソフトウェアの著作権がまったくもってフリーであるということではありません.GNUソフトウェアにはGPLというライセンスがソフトウェアの使用時につきまとってきます.
GPLのポイントを簡単にまとめます.
|
例えば開発したソフトウェアにGNUソフトウェアをリンクすると,4.が適用されるため,GPLとなってしまいます.販売することを目的として開発したソフトウェアでは,大きな問題になりかねません.
ここで「有償・無償にかかわらず」,ソース・コードの公開義務がある点が重要になります.ソース・コードの公開は有償でも構わないということです.GNUツールを採用するプロセッサ・ベンダの多くは,登録したユーザにのみソース・コードをダウンロードできるようにしています.
ソース・コードが公開されていることから,例えばウイルスを埋め込んだバイナリ・パッケージを生成・公開される危険もあります.GNUソフトウェアのダウンロードは,初期から開発を行っている公式サイトからダウンロードするべきでしょう.
●コンパイラの最適化能力はほどほど
GNUツールは,多くのプロセッサ・アーキテクチャに対応できる機構を備えています.このため,コードの最適化能力,つまりコンパイラの能力については,個別のアーキテクチャに特化したツールにはかなわない面もあります.
例えば,プロセッサに固有の裏技的な命令列の生成が難しいことは,想像できると思います.レジスタやメモリ使用量の削減は可能ですが,超高速実行可能な命令列への置き換えなどは不可能です.
このように,ターゲット・プロセッサに極度に特化した最適化が必要なアプリケーションに関しては,アセンブリ言語で直接書く必要があります.
●GNUツールを入手する
GNUツールでは,一つ以上のツールを含むパッケージと呼ばれる単位で配布されています.このため,組み込みソフトウェア開発環境を構築するためには,どのパッケージが使われるかを知っておく必要があります.さらに,それぞれのパッケージがどのツールを含むかを把握しておく必要があります.
そこで,組み込みソフトウェア開発に必要なパッケージを説明します.
(1)バイナリ・ツール(binutils)
ビンユーティルズbinutilsパッケージは以下のWebページからダウンロードできます.
http://ftp.gnu.org/gnu/binutils/
本稿執筆時点における最新のバージョンは2.19です.「binutils-2.19.1.tar.bz2」がソース・コードです.
ドキュメントや多くの情報を得るにはbinutilsのWebページ(図11)にアクセスするとよいでしょう.
http://www.gnu.org/software/binutils/)
このパッケージには,アセンブラ(as),バイナリ・ツール(objcopy,ranlib,arなど),逆アセンブラ(objdump)が含まれます.つまり,バイナリ・フォーマットのファイルを扱うためのツールが含まれています.
(2)コンパイラ・コレクション(GCC)
GCCパッケージは以下のWebページからダウンロードできます.
ftp://ftp.gnu.org/gnu/gcc
本稿執筆時点における最新はバージョンは4.40です.「gcc-4.4.0.tar.bz2」がソース・コードです.
ドキュメントや多くの情報を得るにはGCCのWebページ(図12)にアクセスするとよいでしょう.
このパッケージには,コンパイラが含まれます.C,C++,Java,Fortranの高級言語がサポートされています.サポートされるプロセッサ・アーキテクチャは現存するすべてのプロセッサといえるほど,網羅されています.
(3)ライブラリ(newlib,glibc)
ライブラリは,コンパイラで使用する高級言語によって異なります.組み込みソフトウェア開発ではC言語が主流です.C言語で使うライブラリとしてnewlib(フリーではあるがGNUではない)とglibcが有名です.
newlibは以下のWebページ(図13)からダウンロード可能です.
http://sourceware.org/newlib/
一方,glibcは以下のWebページ(図14)からダウンロードできます.
http://www.gnu.org/software/libc/
どちらもよく階層化されており優劣つけがたいですが,glibcは組み込みLinuxで使われることが多いようです.
(4)デバッガ(GDB)
GDBパッケージは以下のWebからダウンロードできます.
ftp://ftp.gnu.org/gnu/gdb/
本稿執筆時点における最新はバージョンは6.8です.「gdb-6.8.tar.bz2」がソース・コードです.
ドキュメントや多くの情報を得るにはGDBのサイトにアクセスするとよいでしょう.
GDBはコマンド・ラインで動作するツールです.GUIを用意して使いやすくしたInsightと呼ばれるパッケージも以下のWebページから入手可能です.こちらのパッケージはGDBを丸々収録しているので,筆者はInsightを愛用しています.
http://sourceware.org/insight/
●GNUツールによる開発フローを確認する
図8で説明した開発フローにGNUツールを当てはめると,図15のようになります.
ソース・コードから実行形式までの一連の作業は,GCCが関連するツールを順次呼び出してくれます.個別に実行しなくても,実行形式を作成することができます.この際,リンカなどの細かな制御は固定になります.プロセッサ・ベンダの用意する統合開発環境を使った場合や,ネイティブ開発環境ではこの方が便利です.
逆に,個別のツールを順次実行していく方式では細かな制御が可能になります.クロス開発環境下で,統合開発環境のない場合は,この方式が便利です.
やまぎわ・しんいち
高知工科大学 情報学部 准教授