AVR Libc Home Page AVRs AVR Libc Development Pages
Main Page User Manual FAQ Library Reference Additional Documentation Example Projects

Original page is here.

Toolchain Overview

Introduction

Atmel AVR用オープンソース開発ツールセットの世界へようこそ!

これらは単独のツールではなく、AVRソフトウェア開発に必要なあらゆるものがあります。多数のツールが協同して働きます。これらのツールの集合はツールセットとかツールチェーンとかよばれます。ツールがお互いに鎖でつながれたように最終的にAVR用実行可能アプリケーションを作り出す様からそうよばれます。

以下の章ではこれらツールの概略を紹介します。あなたがたは全てをGUIフロントエンドで賄われたクロスコンパイラに慣れていることでしょう。そしてフードの下の下働き??について知らないと思います。あなたがたはデスクトップPCやサーバーコンピューターを扱っていて、埋め込みシステムについては慣れていないかも知れません。また、一般的なUNIXやLinuxで動くUNIX上開発ツールチェーンについて学んでいる最中かも知れませんね。これから述べる概要紹介が、あなた方の展望に役立ってくれることを期待しています。

FSF and GNU

ウェブサイトによれば、 "1985年に創立された the Free Software Foundation (FSF), は専ら、コンピューターユーザーが、ソフトウェアを使用する・学ぶ・複製する・改変する・再配布する権利を推し進めてきました。FSFはフリーソフトウェアの開発と使用、特にGNU operating system(広くGNU/Linux variantとよばれる)のを促進してきました。"とあります。
FSFはGNUプロジェクトの基本的なスポンサーなのです。

GNU Project は1984年に完璧なUnix-likeなOSを開発し、これをフリーソフトウェアとするために立ち上げられました。それがGNU systemです。
GNUは再帰的な頭文字です。"GNU is Not Unix"(GNUはUnixではありません)。
これはぐ〜ぬ〜(guh noo)と発音されます。"カヌー"のような発音です。

GNU systemの主要プロジェクトの1つがGNUコンパイラ(GCC)であり、その姉妹プロジェクトのGNU Binutilsです。これら2つのオープンソースプロジェクトはソフトウェア開発ツールチェーンの土台を提供します。これらのプロジェクトは元来はUnix類似のシステムで動作するように作られています。

GCC

GCCという言葉は" GNU Compiler Collection"を意味します。GCCは高度に柔軟なコンパイラシステムです。異なった言語のための異なったコンパイラフロントエンドも持っています。GNUはたくさんの異なったプロセッサのためのたくさんの"バックエンド"も持ちます。これらは全て、共通の"ミドルエンド"を共有しています。これらはコンパイラの汎用パーツを持ち、たくさんの最適化手法も持ち合わせています。

GCCにおいて、ホストシステムとは、コンパイラが動いているコンピュータのシステム及びOSのことです。
ターゲットシステムとは、コンパイラがコンパイルして提供する先のシステムのことです。
ビルドシステムとは、コンパイラ自身がソースコードから組み立てられたシステムのことです。
もしもコンパイラのホストとターゲットで同じシステムの場合、これはネイティブコンパイラです。
もしもコンパイラのホストとターゲットが異なるシステムの場合、これはクロスコンパイラです。
(そして、もしビルド/ホスト/ターゲットシステムの三者が全て異なるなら、これはCanadian cross compilerとよばれていますが、ここでは論じません)
GCCがFreeBSDやLinuxやWindowsなどのホストシステム用に組み立てられ、AVRマイクロコントローラターゲットのためのコードを精製するなら、これはクロスコンパイラです。そしてこのバージョンのGCCは一般的に、"AVR GCC"とよばれます。文書や議論の中でAVRGCCと言う言葉は、AVRをターゲットにしたGCC又はGCCでAVR特異的なものをさしています。GCCという用語は、GCCの総称またはGCC全体を指しています。

GCCは他のコンパイラと異なった点があります。GCCの役割はは高レベル言語からターゲットのアセンブラ言語への翻訳だけに絞られています。AVRGCCはAVRのためにC、C++、Adaの3つの利用できるコンパイラを提供しています。コンパイラ自身はアセンブルや最終コードへのリンクを行いません。

GCCはまた他のプログラムを継ぎ目無く操って最終産物を産み出すための"driver" プログラムでもあります。アセンブラやリンカはGNU Binutilsとよばれる、また別のオープンソースプロジェクトです。GCCはGNUアセンブラ(gas)でコンパイラの出力をアセンブルする方法を知っています。GCCはオブジェクトモジュールを最終的な実行ファイルにリンクするためにGNUリンカ(ld)を操る術も知っています。

GCC とBinutilsの2つのプロジェクトは、相互に密接な関係があり、同じボランティアが多数、両方のオープンソースプロジェクトに関わっています。

GCCがAVRターゲット用にくみ上げられた場合、実際のプログラム名は頭に"avr-"がつけられます。それで、実際のAVR GCCの実行形式の名前は "avr-gcc"になります。この名前 "avr-gcc"は文書や議論の中でAVRGCC全体ではなく、GCCのプログラムそれ自身を指すときに使われています。

GCCについてさらなる情報を得たければ、GCCウェブサイトやGCCユーザーマニュアルをご覧ください。

GNU Binutils

GNU Binutils と言う名前は、"Binary Utilities"を意味します。これにはGNU assembler (gas), GNU linker (ld)の他に、ソフトウェア開発ツールチェーンの一部として働たくさんのユーティリティが含まれています。

GCCがAVRターゲット用にくみ上げられた場合、実際のプログラム名は頭に"avr-"がつけられます。たとえば、アセンブラプログラムの名前は"as"です(GNUアセンブラの名称は"gas"とされてはいますが)。AVRターゲット用にこうつくされた場合、アセンブラの名前は "avr-gs" となります。
以下にBinutilsに含まれるプログラムを列挙します。

avr-as
アセンブラです
avr-ld
リンカです
avr-ar
ライブラリ(アーカイブ)のコードを生成、改変、抽出します
avr-ranlib
ライブラリ(アーカイブ)の内容の索引を生成します
avr-objcopy
オブジェクトファイルを異なったフォーマットに変換します。
avr-objdump
オブジェクトファイルから、ディスアセンブル表示を含む各種情報表示を行います。
avr-size
各セクションのサイズや全体のサイズを表示します。
avr-nm
オブジェクトファイルからシンボルをリストアップします。
avr-strings
印字可能文字をファイルからリストアウトします。
avr-strip
ファイルからシンボルを削除します
avr-readelf
ELFフォーマットファイルの内容を表示します
avr-addr2line
アドレスをファイルやline(コンソール??)に変換します
avr-c++filt
エンコードされたC++のシンボルを復号するためのフィルタ

avr-libc

GCC と Binutils はソフトウェア開発のための多数のツールを提供していますが、これら3つのツールには1つ問題があります:標準Cライブラリは提供していません。

あなたのシステムに合わせて?標準Cライブラリを提供する複数のオープンソースプロジェクトがあります。ネイティブコンパイラ用(GNU Libc)、ある種の組み込みシステム用(newlib)、あるバージョンのLinux用の物(uCLibc)などです。オープンソースAVRツールチェーンは自前の標準Cライブラリを持っています。それがavr-libcです。

AVR-Libc は正規の標準Cライブラリにあるのと同じ関数を多数提供し、さらにAVR固有の追加関数も多数提供します。PC環境では使われるいくつかの標準Cライブラリ関数は、機能制限があったり、組み込みシステムでの使用において但し書きがついている場合もあります。

AVR-Libc は、AVRツールチェーン全体についての解説文書も提供しています。

Building Software

GCCやBinutilsやavr-libcは、AVRソフトウェアを構築るのに使われるコアプロジェクトを成しているのですが、これらをまとめるのにもう一つソフトウェアが要ります。それがMakeです。
GNU Makeはこのまとめ役を実行する中心のソフトウェアです。Makeは開発プロジェクト用に書かれた"Makefile"というファイルを翻訳実行します。Makefileにはファイル間依存ルールが記されており、どの出力ファイルがどの入力ファイルから作られるか、それをどうやって作るかの指示などが書かれています。

いくつかのツールチェーン配布物や、その他のMfileなどのAVRツールにはMakefileテンプレートが含まれています。これはAVRツールチェーン用に書かれていて、あなたが自分のアプリケーション用にコピー・一部書き換えして使えるようになっています。

詳しくはGNU Make ユーザーマニュアルをご覧ください。

AVRDUDE

ソフトウェアを作った後、組み込みデバイスにプログラムを書き込む必要があります。AVRDUDEというプログラムでそれができます。これは多くの種類のハードウェアデバイス(※AVRライタ)と通信し、AVR書き込みを行うことができます。

AVRDUDE はとても柔軟なパッケージです。各種AVRプロセッサと多数のハードウェアの情報がテキスト形式データベースに納められています。このデータベースをユーザーが書き換えて、対応外の新しいAVRライタや新しいAVRプロセッサを追加することもできます。

GDB / Insight / DDD

The GNU Debugger (GDB) はコマンドラインデバッガで、その他のAVRツールチェーンと協調して使うことができます。
Insightは、GDBの機能に加えて、Tcl/Tkで書かれたGUI環境を提供します。
GDBInsightも、AVR用に構成されており、中心になる実行ファイルはターゲットの名前に合わせて、avr-gdbavr-insightとなっています。
"text mode"のGUIを持つ??、avr-gdbtuiというものもあります。
DDD(Data Display Debugger)も人気のあるGDB用GUIフロントエンドで、Unix/Linuxシステムで利用可能です。

AVaRICE

AVaRICE はAVR GDBへのバックエンドプログラムで、Atmel JTAG In-Circuit Emulator (ICE)とのインタフェースをとり、エミュレーション能力を提供します。

SimulAVR

SimulAVR はAVR GDBへのバックエンドプログラムとして使われるAVRシミュレータです。
残念なことに、このプロジェクトは現在は維持できておりませんが、援助することはできます。
Unfortunately, this project is currently unmaintained and could use some help.

Utilities

他にもツールセットに追加できる便利なユーティリティがあります。

SRecord はEPROM load filesを操作できる強力なツールです。これは各種EPROMファイルフォーマットを読み書きでき、各種操作ができます。

MFile はシンプルな Makefile 生成ソフトで、AVRアプリケーション用のMakefileを素早く構築することができます。

ツールチェインの配布(Distros)

これらすべてのツールチェインを形成するオープンソースプロジェクトは通常ソースコードとして配布されます。ソースコードからツールアプリケーションを構築するのはユーザーに委ねられます。この作業はユーザーの能力次第では大変な作業になるでしょう。

幸いなことに、この分野に助け船をだす人々がいます。ボランティア達がソースコードから特定のホストプラットホーム向けにアプリケーションを構築し、エンドユーザーにも簡単にインストールできるようなパッケージに仕立て上げてくれました。これらのパッケージは各種ツールのバイナリ実行形式ファイルがいつでも使える状態で納められています。これらのパッケージはAVRツールチェーンの"distributions"と呼ばれ、時に縮めて "distros"と呼ばれます。

AVRツールチェン distros はFreeBSD, Windows, Mac OS X, and certain flavors of Linux用があります。

Open Source

多数のプロジェクトのオリジナルソースコードから各種distrosまで、これらツールのすべては、たくさんの、たくさんのボランティア達の手により作られています。
これらプロジェクトは時間を割いてくれるボランティアの援助求めています。各々のスキルや割ける時間に応じて援助にはいろいろな方法があります。

avr-gcc-listのようなメーリングリストやAVRFreaks websiteのフォーラムなどで、質問に対して答えることで援助することができます。これにより新たにオープンソースAVRツールを使い始める助けになります。

もしツールにバグを見つけたとお思いでしたら、これは大きな援助となります。適切なプロジェクトにバグレポートを送ってください。よいバグレポートは常に問題を解析して、将来のバージョンのソフトウェアで解決するボランティアの助けになります。

ソフトウェアプロジェクトでバグフィックスをしてくれたり、要望される新機能を追加することで援助することもできます。

ボランティアはいつでも大歓迎\(^o^)/