2007年9月7日金曜日

スクラッチからAVR-GCC構築中 on Linux (その3)

解決しました、avr-gccの構築問題。

いずれもFedraCore4(kernel 2.6.x) & gcc4.x(4.0.0)ベース

1) gcc4.xを使う場合
binutils-2.17 / gcc-4.0.4 / avr-libc-1.4.6 を使えば普通にコンパイルできます。gcc-4.1.x以上を使うとコンパイルに失敗するのでいまのところ4.0.4止まり(4.0.xの最新版)。このavr-gccでATtiny2313もATmega48もコンパイル可能です。

2) gcc3.xを使う場合
binutils-2.17 / gcc-3.4.6 / avr-libc-1.4.6 を利用する場合、gccに利用デバイスを追加するpatchが必要です。"真似して足す"のが簡単なので、gcc-3.4.6/gcc/config/avr/ の下にある avr.c avr.h t-avr に gcc-4.0.4あたりのソースを参考にしながら利用したいデバイスを追加します。binutils / avr-libc はこのバージョンではこのままATtiny2313もatmega48も利用可能です。gccをコンパイルしたのち、必ずavr-libcもコンパイルし直します。所望のデバイスが利用可能かどうかは、avr-gccをインストールしたディレクトリ(/usr/local/avr-gcc3/avr/lib, うちの場合)下に、リンカがリンクするオブジェクトファイルが存在するかどうかを調べます。たとえば、ATtiny2313の場合は、crttn2313.o が、ATmega48の場合はこの階層のさらにひとつ下 avr4/ に crtm48.o が正しくコンパイルさせていれば存在します。

で、gcc-3.xとgcc-4.xを比べた結果ですが、やはりgcc-4.xの方が5%程度おおきく仕上ります。下の比較はUSBaspのソースをatmega48でコンパイルしたものです。
10200 9月 6 23:18 main.hex_3.4.6
10683 9月 7 07:52 main.hex-4.0.4

0 件のコメント:

++ Myself ++

普通(?)のサラリーマン -- 生活のすきま時間にキーボードとはんだごてを持ち替えてプログラミングと電子工作してます