google で検索すると結構古い情報が得られて私はかえって混乱したのですが、
最新の gcc や binutils を使えば苦労することはないのでした。
以下、Mac OS X 10.3.5 で作業した記録。
binutils-2.15:
% ./configure --target=avr --program-pefix='avr-'
% make
% sudo make install
gcc-3.4.2:
% ./configure --target=avr --program-prefix='avr-' --enable-languages=c
% make
% sudo make install
avr-libc-1.0.4:
% ./doconf
% ./domake
% sudo ./domake install
gdb-6.2
% ./configure --target=avr
% make
gdb は残念ながら使うことができていません。使える環境が手元にないためです。
AVR へのプログラムの書き込みは、 Cypress EZ-USB で USB CDC ACM もどき に書いたように、 uisp を改変して Cypress AN2135 で ISP 信号線の制御を行なうことで実行しています。
例として、AVR Butterfly をターゲットにした簡単なプログラムの
コンパイルと書き込みの手順は次のようになります。
次のソースは、こちら
にあった lcdhello を C に書き直したものですが、これを lcdhello.c とします。
#include <avr/io.h>
main ()
{
LCDCRB = 0xb7;
LCDFRR = 0x10;
LCDCCR = 0x0f;
LCDCRA = 0x80;
LCDDR0 = 0x10;
LCDDR1 = 0x00;
LCDDR2 = 0x01;
LCDDR3 = 0x00;
LCDDR5 = 0x45;
LCDDR6 = 0x44;
LCDDR7 = 0x05;
LCDDR8 = 0x00;
LCDDR10 = 0xef;
LCDDR11 = 0x44;
LCDDR12 = 0x05;
LCDDR13 = 0x00;
LCDDR15 = 0x10;
LCDDR16 = 0x11;
LCDDR17 = 0x01;
LCDDR18 = 0x00;
}
コンパイルは次のように行なうことができます。
% avr-gcc -mmcu=atmega169 -O lcdhello.c -o lcdhello
% avr-objcopy -O srec lcdhello lcdhello.srec
ターゲットへの書き込みは次のようにして行ないました。
% uisp -dserial=/dev/cu.usbmodempucomdev1 -dprog=pucom --segment=flash --erase
% uisp -dserial=/dev/cu.usbmodempucomdev1 -dprog=pucom --upload if=lcdhello.srec
ちなみに、この AVR Butterfly のために
Windows マシンを立ちあげたことはありません。Mac OS X
(あるいは NetBSD や Linux) だけでもなんとかなります。シリアル
ポートがついてるマシンなら uisp だけで ISP 可能のようです。
ただ、ソースコードデバッグをやろうとすると JTAG 経由にせよ何にせよ、
非公開のプロトコルを使うことになりますので、Atmel の開発環境
(JTAG ICE) またはその互換品を手に入れる必要があります。
この JTAG ICE と AVaRICE というフリーソフトを使えば、
gdb でソースレベルデバッグすることは (Mac OS X でも) できそうです。
ただし、少なくとも JTAG ICE に最新のファームウェアを書き込むために
Windows マシンが必要になるようです。
(特に、互換ハードウェアには最初はファームウェアは書き込まれておらず、
Atmel 提供の Windows 上の開発環境に最初に接続した時にファーム
ウェアをダウンロードさせるみたいなので、
Windows マシンが必須となるようです)。
私は JTAG ICE の JTAG 側のプロトコルも公開されていると誤解をしていて
なんとかなるだろうと思っていたのでちょっと残念です。