AVR-gccがCygwin上でも走るようです

グレードアップ編。

更新 : 2001/09/16

   Cygwinについて

●Cygwinとは?

CygwinはWindows上でGNUツール類を走らせるためのフリーのツールです。これによりAVR-GCCなどのUNIX用のアプリが走る可能性があります。またいらなくなったらディレクトリごと消すだけです。Cygwinそのものについては次の場所を見てください。

・Cygwin情報
CygwinのDLL(cygwin1.dll)関連に詳しい。Cygwinの開発者の一人のページ。

・Cygwinを使う
Cygwin上でのGNUツール類の情報。

・Binary Wiz
Cygwin上でNEC V850、SHなどのクロスコンパイラ環境を構築。その他FPGAなど。必見。

これらあたりがポインタになると思います。以前別件で試したときは正直使える状況ではなかったような印象でしたが、最近使ってみると、これが使える(きちんとmakeできる)。

追伸(2001/09/16)
最新バージョンでセットアップしてみました。現在のバージョンでこのレポートは更新されています。バージョンは次のとおり。

Windows2000SP2
cygwin1.3.2-1
binutils-010913.tar.bz2
gcc-core-20010910.tar.gz
avr-libc-20010821.tar.gz

以前のバージョンのものはここに置いておきます。

   Cygwinのセットアップ

●Cygwinをセットアップしてみる

セットアップについても上のページを見たほうがいいのですが、一応私の時の過程を記録しときたいと思います。NetRelease版でないと走らないと思います。NT系のほうがきちんと動くのでwin2000SP2上で確認しています。95系は動きがおかしいことがある。

(1)ダウンロードツールのダウンロード
ネットから直接ダウンロードできるようになっていました。
http://sourceware.cygnus.com/cygwin/mirrors.html
ここからたどってsetup.exeをダウンロードしました。

(2)ダウンロード
このsetup.exeをつかって簡単にダウンロードできるようになっていました。便利。私はひとまずファイル類をローカルにダウンロードしました。

(3)インストール
再びこのsetup.exeを使用してパソコンにインストールしました。c:\cygwinというディレクトリができました。

(4)ひとまず走らせる
スタートアップから実行させてみます。おお、ディレクトリ関係がまともです。さらに進化してるっ。終わるときはlogoutです。

(5)cygwin1.dllの置き換え
たまにうまく動かないことがあるのはcygwin1.dllを入れなおすと直るようです。今回のバージョン(1.3.2-1)はわりとよくうごいてくれましたのでそのままにしています。もしうまくいかないときは上記のリンクのNightly Snapshotからcygwin1.dllをダウンロードして試すと直ることがあります。私は時々ダウンロードしてうまくうごいたものをとっておきました。

(6)各種設定してみる。
まずcygwin.batの環境を整えます。上記のリンクの中からセットアップ方法を参考にできます。私は以下のようにしました。

・cygwin.batの設定
インストールしたディレクトリにcygwin.batができていますのでこれを設定します。私の場合はこのように設定しました。

@echo off
C:
chdir \cygwin\bin
SET HOME=c:\cygwin\home\work
SET MAKE_MODE=UNIX
SET CYGWIN="notty binmode ntea ntsec"
bash --login -i

ホームディレクトリは試しに一度走らせたならばすでにできていると思いますのでそれにあわせます。日本語だったら通らないと思いますので新しく作ります。
その後バッチの環境を右クリック->プロパティーで設定。この設定はメモリのタブの環境変数を最大にします。その他は自動でいいと思います。更新されたこのショートカットから起動してください。

・login時の初期設定ファイル
/etc/profileを~/.bash_profileとしてコピーしました。

cp /etc/profile ~/.bash_profile

nameのところは多分コンピュータ名が入っていると思います。

・~/.bash_profileを編集
秀丸エディタとかで編集できます。設定に関しては上記のcygwin関連のリンクを見ていただきたいのですが、私の設定を一応ここにおいておきます
EUC、LFでsaveしないといけません。以降パスを通すときにもこのファイルを使います。

余談ですが、windows系からファイルの更新するときは改行コードはLFしてsaveする必要があります。秀丸エディタなど最近の高機能なエディタにはこの機能があることでしょう。

   AVR-GCCのセットアップ

今回はグレードアップ編ということで、cygwin + AvrStudio3.52 でソースコードレベルデバッグすることを目標とします。avr-gcc類は頻繁にアップデートしているので、あたらし物ずきで開発より開発環境に時間を掛けるクチの私は、いつもアップデートしないと気がすみません、笑。そんなわけでcygwin環境です。

●cygwinのディレクトリ構成の再構築

一度構築してわかったのが、avr-elfファイルに書き込まれるディレクトリがwin側から見ても同じでないと、AvrStudioできちんと読み込んでくれません。そこでcygwinのディレクトリ構成とwindowsのディレクトリ構成とをすり合わせます。cygwinはc:\cygwinいかに構成されているものとします。cygwinの基本ディレクトリ構成の情報(マウント情報)は下のレジストリのにあるのでここを編集します。

[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2]

構成はルートをc:/にして後にavr-gccを構築するホームディレクトリをwindowsのパス構成と合わせます。ただ、このままだとc:\cygwin以下の/usrなどのディレクトリが見えなくなるのでその他の基本構成ディレクトリをすべて記述しなおします。見ればわかると思いますが、cygwinから見たマウント名がついたレジストリキーの中にnative文字列を書きそこにwindows側からのディレクトリ名を対応付けます。私の場合のレジストリ情報をここにおいておきます。ついでに.bash_profileもこれに合わせて書き直します。これによりcygwinのシステム関連は独自にマウントされ、それ以外のルートやホームはwindowsと同じになります。ワークディレクトリは/cygwin/home/workにしました。

●AVR環境の構築

ホームディレクトリ(ここでは/cygwin/home/work)にAVRというディレクトリを作ります。されにその中にsrcというディレクトリを作りここでコンパイルすることにしました。

cd
mkdir avr
cd avr
mkdir src
cd src

新しく作った~/avr/以降に構築することとします。

●binutilsのインストール

CVSアクセスは面倒ですのでスナップショットのbinutils-010913.tar.bz2を使いました。これらはここからたどれます。ダウンロードしたら、~/avr/srcにおいて(もちろんwin上からできます)、

bunzip2 binutils-0109013.tar.bz2
tar xvf binutils-010913.tar

などとし展開。ここでavrobjを出すファイルをマージします。binutils-2.11用のパッチから抽出しました。まずavrobj.cを/binutils-010913/bfdの中にコピーして同ディレクトリ内のbfd.cとtargets.cにavrobj出力用のベクタを追加する記述を加えます(それぞれ2箇所ずつ行を追加)。autoconf等には私は不慣れなのであとはmakefileを手作業で(!!!)avrobj.cが組み込まれるように変更しました。ソースツリーに関してその前後でdiffをとったものをおいておきます。これでパッチ当てれば大丈夫なはずですが、上の日付つきのbinutilsはすぐにobsoleteになるので、参考です。ながったらしく見えますがほとんどはavrobj.cそのものですので簡単です。

その後binutils-010913というディレクトリに移動して

./configure --target=avr --prefix=/cygwin/home/work/avr
make
make install

で~/avr以下にbinディレクトリができ、アセンブラなどができるはずです。絶対パスを入れないといけません。

まあ、binutilsはあまり頻繁に更新されないのでちょっと手間がかかりますが、これでAvrStudio3.52でソースレベルデバッグができるavr-objcopy.exeができます。あとは新しいavr-gccだけ入れ替えていけばいい思います。

●gccのインストール

gccをコンパイルするときにbinutilsの構築で作成したavr-asを使うので/cygwin/home/avr/binにパスを通します(あたりまえです)。.bash_prifileの中で追加しています。前述のファイルを見てください。さらに一度Cygwinを終わって再起動するとパスがとおっています。envとか打って確かめてみてください。

こちらもスナップショットを使いました。スナップショットのgcc-core-20010910.tar.gzを使いました。ここからたどったところにあります。~/avr/srcにおいて

tar xvzf gcc-core-20010910.tar.gz

で展開。できたgcc-core-20010910ディレクトリに移動して

./configure --target=avr --prefix=/cygwin/home/work/avr --enable-languages=c

そしてmakeを開始します。

make
make install

これで終了です。avr-gcc -v としてバージョン情報がでたら成功です。

●avr-libcのインストール

今回はここからavr-libc-20010821.tar.gzをダウンロードして展開します。

tar xvzf avr-libc-20010303.tar.gz

その中のsrcディレクトリに入ってMakefileの以下のところを書き直します。

# installation prefix (set this if you don't install by hand)
  prefix = /cygwin/home/work/avr
  ABSPATH = /cygwin/home/work/avr/src/avr-libc-$(VER)/src/

というようにすれば、できたスタートアップなどのオブジェクトファイル内にパスが追加されます。これがないとデバッグ時にAvrStudioからファイルが見えず、動きません。このために前項でcygwinとwindowsのディレクトリ名をすり合わせる必要があったのです。その後

make
make install

これで完了です。

●AvrStudioでお試し。

たとえばこんなものをmakeしてみて、AvrStudioでできた.objファイルを開くとCのソースレベルデバッグができます。インラインアセンブラは止まってるのかと思いましたが、F10キーを押しているとステップ分過ぎたら戻ってきました。ただし、ほかでも言われているように変数は見れませんので、そこはメモリを直接監視するしかなさそうです。

   cygwinでuispを使う

cygwinではnonblock-ioがシリアルに対してできるようになっているようです。仕様上での話ですが。これを使ってuispを使ってみました。

uispをここから拝借してきて、展開します。

tar xvzf uisp20010909.tar.gz

そしてその中のsrcディレクトリのMakefileを編集して直接IOアクセスしないようにします。28行目の-DNO_DIRECT_IOと-DNO_DAPAがコメントアウトされていますが、これを含むようにします。その後

make

でuisp.exeができます。デフォルトでは/dev/avrがシリアルデバイスとなっているので、uisp側でシリアルぽポートを指定します。今のcygwinは /dev/com1 がシリアルポートとなっています。私はavr910(pavr)型のISP書き込み器を使っているのでたとえばイレースは

uisp -dserial=/dev/com1 -dprog=pavr -dpart=auto --erase

となります。pavrはavr910でも可能です。たとえばこんな感じでMakefileの中にでも書いてしまいましょう。これで構築からそのまま書き込みまでできますね。うーん快適。

ちなみにuisp20010909からはpavrのコードも入るようになっています。説明書きにはAVR910をそのままAT90S2313にできるとありますが、100行あたりのMISOとMOSIのポートが多分逆ですよね。ここだけ書き換えたらほんとに差し替えるだけで動きます。このpavrはタイミングの問題が無く、usipでもAvrStudioでもつかえて便利です。

cygwin-1.3.2なら問題なく動きます。1.3.2はX-windows(クライアント)が動いたりといい感じです。

   まとめ

cygwinは常に更新され続けていますので、そのまま通るかも知れません。しかしある程度安定したら新しい機能を追加して不安定になる時期があるようなので、うまくこれらが通ったバージョンがあれば保存しておくのがいいと思います。しかし、最近は速くそして安定もしてきているようです(特にNT上->NTでないとうまく動かないことあり)。でもPen3-1Gはほしいところ。

bunutilsにavrobj出力のマージはややこしいですが、新しいavr-gccやavr-libcを手軽に入れ替えられます。特にこの2つはいまでもどんどんよくなっているので便利です。AVR-MLの情報によると、

Good news.
I've asked on www.avrfreaks.com forum about AVR Studio support for avrgcc.
"
Hello,
I would like to know if you plan to include support for avr-gcc(elf format)
in the next version of Avrstudio.
Thanks,
Marius Harjoi

Reply To This Message
Re: AVR STUDIO REPLACEMENT
Author: morten (AVR tech. support) ( )
Date: 06-15-01 08:44

Hi Marius,
Yes, we do. It might not be available in the first release, though, but it's
a project with high priority.
Best regards,

Morten, AVR tech. support, Atmel FAE
"

Bye,
Marius Harjoi

とのことですので、AvrStudio4ではそのままサポートされるかも知れませんね。
いずれにせよすべてフリーでCのソースレベルデバッグができる環境が手に入るとは素敵な話しですね。


戻る