« JavaScript shell (js)、OSSP js 1.6.20060820のZaurus向けパッケージ | Main | Zaurusで音響生成プログラミング言語Csoundを使う »

2006.09.17

Mac OS X Tiger上にAVR-GCC環境を構築する@2006

WinAVRもいいけど、Mac OS XにもAVR-GCCの環境を構築してみよう。
現在使っているのはMac OS X Tiger(10.4.7)。
intel Macは持ってないので、PPC Mac上で試している。

スキルが無いくせして新しいもの好き。
だから、可能な限り、最新版で構築したい。ちなみに、

sudo gcc_select 3.3

としてGCC3.3で作業している。

参考サイト

Mac OS X で Atmel AVR マイクロコントローラのプログラムを作る
Programming ATMEL microprocessors on a Mac
AVR Microcontroller Programming on a Mac
Using AVR Microprocessors Under OS/X
Installing AVR Toolchain on MAC OS X

今は、binutilsにしろgccにしろ、本家本元がAVRに対応しているので、昔のように特別な作業をする必要無し。
binutils、gcc、avr-libc、uispの最新版を入手してビルドすればいいだけ。

基本のインストール方法はAVR LibCのマニュアルに書いてある。

http://www.nongnu.org/avr-libc/user-manual/index.html
http://www11.ocn.ne.jp/~akibow/AVR-LibC_1.2.3J/

GNU Binutils、GCC、AVR LibCの順でビルドする。

GNU Binutils(アセンブラ、リンカ等)

http://www.gnu.org/software/binutils/

最新のリリース版をダウンロードしてくる。CVS先端を試してみたけど、現時点のものはうまくビルドできなかった。

tar xvzf binutils-2.17.tar.gz
cd binutils-2.17
mkdir obj-avr
cd obj-avr
../configure --target=avr --program-prefix='avr-' --disable-nls; make; sudo make install

GCC, the GNU Compiler Collection(Cコンパイラ)

http://gcc.gnu.org/

GCC4.2のsnapshotを落としてきた。snapshot版はMPUのサポートがリリース版より厚い。

http://gcc.gnu.org/mirrors.html

上記のミラーから適当なftpサーバを探してダウンロードする。

wget ftp://ftp.iij.ad.jp/pub/gcc/snapshots/LATEST-4.2/gcc-core-4.2-20060916.tar.bz2
tar xvjf gcc-core-4.2-20060916.tar.bz2
cd gcc-4.2-20060916
mkdir obj-avr
cd obj-avr

../configure --target=avr --program-prefix='avr-' --enable-languages=c --with-dwarf2 --disable-nls --disable-libssp; make; sudo make install

--disable-libsspを指定しないとダメなので注意。

AVR LibC(Cランタイムライブラリ)

http://www.nongnu.org/avr-libc/

これは、AVR LibCのマニュアルが勧める通りmkdir obj-avr、cd obj-avrしてからconfigureしようとすると失敗したので、カレントディレクトリでconfigureしている。

CVS先端ですんなりビルドできたので、それを使った。

cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/avr-libc login
cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/avr-libc co avr-libc
cd avr-libc
cvs update -dP
./bootstrap
./configure --build=`./config.guess` --host=avr; make; sudo make install

uisp(ユニバーサルインシステムプログラマ)

http://savannah.nongnu.org/projects/uisp/

tar xvzf uisp-20050207.tar.gz
cd uisp-20050207
mkdir obj-avr
cd obj-avr
../configure; make; sudo make install

AVR-GDB

役に立つかどうか分からないので試してない。
AVR LibCのインストールマニュアルに解説あり。

スクラッチから環境を作る際の注意点

上記の手順だけではサポートデバイスが不十分かもしれない。その場合はパッチを当てる必要があるそうだ。

http://www7a.biglobe.ne.jp/~attlee/avr-jp-wiki/wiki.cgi?page=AVR-LibC

USB Serial変換アダプタとuisp関係

手持ちのUSB Serial変換アダプタは、秋月通商のUSB-RS232変換ケーブルとKeyspanのUSA-19HS。
秋月通商のUSB-RS232変換ケーブルの中の人はATEN社のUC-232Aで、Mac OS X用のドライバは以下にあった。

http://www.aten.com.tw/download/download.php?pid=20050824161341006&type=driver#showResult

KeyspanのUSA-19HSは、現在ドライバーがデッドリンクになっていて、どうしたものかと思ったら以下にあった。

http://www.keyspan.com/downloads-files/usa/UniversalBinary/

ドライバをインストールし、接続すると/dev/tty.xxxxにデバイスが現れる。

使っているのは、MorosansoftさんのAVRISP互換ライタ。とても簡単に作れ、AVR Studioで認識するし、USB Serial変換アダプタ経由でも使えるので便利。マイコンをいじるのはほぼ初めてで、ライタを自作したのも初めてなので客観的評価はできないが、とても素晴らしいライタに思える。AVR Studioからはちゃんと使えているが、パフォーマンスのいい新しいプロトコルのみの対応。よって、古いプロトコルを使うuispからは使えないとのこと。

uispから書き込むには、古いプロトコルにも対応し、なおかつUSB Serial変換アダプタ経由でも使えるSTK500のようなライタが必要のようだ。

その後、MorosanさんのAVRISP互換ライタは、avrdudeでなら使えるという情報をsenshuさんからいただいた。
AT90S2313のようなレガシーデバイスの場合はエラーが出ていたが、その後のMorosanさんの対応作業のおかげで、avrdudeから、レガシーデバイスであっても問題無く書き込むことができるようになった。
AVRISP互換ライタ対応済みavrdudeのMac OS X用のバイナリは配布していないが、avrdude5.1のソースをもらってきて、Morosanさんのサイトに記載されている変更をし、ビルドすればOK。

AVR Studio 4.12 Service Pack 4で使おうとすると警告メッセージが出ていたが、新ファームで問題無くなった。なおかつ、ターミナルソフト経由で設定変更が可能になっている。EEPROMにバージョン番号を保存してしまうんだね。カコイイ。

MorosanさんのAVRISP互換ライタは、(いろいろ前提条件があるけれども)Mac OS Xユーザにも有用な選択肢になった。
Morosanさんsenshuさん、本当にお世話になりました。

最近のAVR-GCCの仕様変更

最近(といっても、ここ2年ぐらいの話だと思うが)のAVR-GCCは、結構仕様が変わっているらしく、昔のソースはそのままではほぼ動かない。
とても頻用するであろうoutp等が使えなくなくなったことに始まり、少なくとも以下のような変更がある。

outp(PORT, val) は PORT = val に

BV() は _BV() に

sbi(PORT, bit) は PORT |= _BV(bit) に

また、avr/signal.hは、avr/interrupt.hに統合している。
その他、いっぱい仕様変更はあると思われる。

ちなみに、GCC3.x用と思われるMakefileをどこかのサイトから頂戴して流用しようとしたら、コンパイル、hexの生成まですんなりできるものの、うまく動かなかったので注意。原因がどこにあったか、根性が無いので追及しておらず。


objcopyの問題

avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex main.elf main_eeprom.hex
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 never used
make: *** [main_eeprom.hex] Error 1

こんなようなエラーに遭遇するかもしれない。これは、binutilsのobjcopy.cの以下の行のFALSEをTRUEにすると回避できるそうだ。

if (bfd_count_sections (obfd) == 0)
{
non_fatal (_("there are no sections to be copied!"));
return FALSE;
}

情報元

参考サイト

テスト

PORTBにLED付けたAT90S2313でテスト。

ダウンロード at90s2313test.c (0.7K)

適当にソース書く。

avr-gcc -mmcu=at90s2313 main.c -o main.o; avr-objcopy -O ihex main.o main.hex

出来たmain.hexをプログラムして動作すればOK。
どのバージョンのことだよオマエ、と思うことがよくあるので、念のためバージョンも併記しておく。

iMacG5:~/workshop/avr/gcctest $ avr-gcc -v
Using built-in specs.
Target: avr
Configured with: ../configure --target=avr --program-prefix=avr- --enable-languages=c --disable-nls --disable-libssp
Thread model: single
gcc version 4.2.0 20060916 (experimental)

既成の環境を使う

フルスクラッチしなきゃいけないわけじゃない。
ここにGCC3.xの環境だけど、バイナリあり。

Using AVR Microprocessors Under OS/X

Darwinportsにもバイナリがある。バージョンは本日時点のもの。

http://darwinports.com/

avr-gcc (4.0.2)
avr-libc (1.2.5)
avr-binutils (2.16.1)
uisp (20050207)

Finkにもバイナリがあった。intelバイナリもあった。

http://fink.sourceforge.net/index.php?phpLang=en

avr-gcc (3.3.2)
avr-libc (1.0.4)
avr-binutils (2.14)
uisp (20050207)

Source Package

DebianにSource Packageあり。バージョンは本日時点のもの。
適度に枯れたのがよければこれを使えばいいかも。

http://packages.qa.debian.org/g/gcc-avr.html (4.1.0)
http://packages.qa.debian.org/a/avr-libc.html (1.4.4)
http://packages.qa.debian.org/b/binutils-avr.html (2.16.1)
http://packages.qa.debian.org/u/uisp.html

|

« JavaScript shell (js)、OSSP js 1.6.20060820のZaurus向けパッケージ | Main | Zaurusで音響生成プログラミング言語Csoundを使う »