スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ATtiny10環境をそろえる(GCC)

前回はライターでしたが、ソフト面で必要とするコンパイラを準備します。といっても、ATMELから Atmel AVR Toolchain 3.4.1 for Windows というのが出ているので、これをインストールすれば終わりなんですね………。

それじゃ面白くないでしょ!!

Toolchainのページにコンパイル時に使用したソースコードが置いてある事が分かり、自分で作って見る事にしました(基本、GCCにパッチをあてたものなので公開してるんですよね)。可能であれば64bit版を作成したいところですし…。と気軽に考えていたのが間違いでした。コンパイラをコンパイルした事がなかったので、コンパイラのコンパイルに多くの難所が存在する事を知りませんでした。なので、できあいの物をインストーラでインストールする事をおすすめします。しかし、ToolchainはWinAVR時代には機能毎にbinとutilsに分かれていて使いやすかったのですが、今は両方いっしょくたにしてbinに入っているようです。基本機能をcygwinですましている私にとって、余分なものにパスを通すのは気が引けますが。

ここからは avr-gcc と関連するツールについての作成奮闘の追憶です。

AVRは8bit品しか興味がないので、avr32はパスします。avr側のソースコードは、binutils, gcc, avr-libc それと パッチ集、コンパイル(ビルド)用のシェルスクリプトがおいてあります。これをReadmeの通りに実行すればよさそうだけど、シェルスクリプトを読み解く事ができず、どんな方法でコンパイルして何処にインストールされるのか、そもそもコンパイル環境は何なのか読み解く事ができませんでした。とにかくやってみるかと思い、ATMELのサイトからDLしたファイルを使って、シェルスクリプトは使わずに各モジュールのReadmeとconfigureのhelpを参考にいつも通りcygwin上でmingw(i686-w64-mingw32)でコンパイルしてみました。しかし、いきなりコンパイルエラー発生です。ソースコード中の何かに問題がありそうな内容でした。cygwin上のmingwを使ったのがまずかったのかと思い、無難にLinux(Ubuntu)で挑戦してみましたが、やはりエラーをはき出します。msys上でのmingwでも試してみましたが同じ結果。これにはまいりました。

ここまでくると、そもそも置かれていたソースコードを使うのでよかったのか? と疑問が沸いてきました。そこで、パッチはそのまま使うとして、それぞれのベースコードを各サイトから取得してきて、パッチをあててmsysでコンパイルしてみる事にしました。しかし、途中でエラーが出てコンパイル完了せずです。しかたがないので、エラー部分を手動で修正して何とかbinutilsはコンパイル出来ました。次はGCCです。これもベースコードを取得してきてパッチをあててコンパイルしてみました。コンパイルは比較的すんなりと行きそうな雰囲気だったのですが…ここで最大級の問題に直面してしまいました。なんと、msysが "Couldn't commit memory for cygwin heap" というエラーを表示して止まってしまうのです。ググってもググっても最終的な解決策が書いてある所はなく、Window用の avr-gcc のコンパイルを諦めようかと何度も思ってしまいました。因みに、この時点でLinux上ではbinutilsとGCCをコンパイルできています。

このmsys(mingw)を使っているにも関わらず、"cygwin"のヒープが問題と言っている事象は本当に意味不明です。msysの初期バージョンがcygwinで作られていたという話しを何処かで読んだ気もしたので、Web上にあったcygwinの対策(レジストリ値の書き換え)等を行ってみましたが、問題は解決しませんでした。ほとほと参っている時に、すzさんのblogに気になる事が書いてあった気がしてその部分を探し出して見たところ、すzさんも同様の現象におちいり、この部分にかんしては流されて(ギブアップされて?)ました。

Linuxではコンパイル出来ている事、msysを使うとヒープが…と言ってくる事から、やはり原因はmsysにありそうという事で、msys関連を徹底的にググっているうちに "Couldn't commit memory for cygwin heap" 問題に対応したという文章に出会いました。notabs.orgというサイトです。MinGWをコンパイルされているサイトかな? win-build-env-005.7zで対応されてますが、肝心のmsys-1.0.dllはmsys-for-xgcc-build-001.7zというのに入っているのと同じです。気になる部分はいろいろとありますが、試す価値ありと思い、msysのウィンドウを閉じて、今使用しているmsys-1.0.dllをリネームしておき、このmsys-1.0.dllをコピーして再度msysウィンドウを起ち上げました。これといって何も起こらなかったので、コンパイルを再開してみたら、何か良い感じです。結構時間がかかりましたが、GCCのコンパイルが完了してしまいました。どういった改良がされているのか全く分かりませんが、コンパイルするのはgccの方なのでできあがった物には影響は無いだろうと判断し、コンパイル続行です。

今度はavr-libcのコンパイルでしたが、これまた…パッチが足りません。もうこの状況になれてしまった自分がなんだかな~と思いながら対策しようとしたのですが、結構難しいです。何気に今あるパッチのファイル名でググってみると、なんと crossavr-libc なるプロジェクト(?)があり、gitでパッチを取得できるではありませんか。それもATMELには無かったパッチまであります!! 試しに他のパッチもググってみると crossavr-binutils, crossavr-gcc なるものが存在するではありませんか!!! これらをゲットして既存のファイル部分は差分が無かったので、無いファイルを追加して……このパッチにも若干問題があったので修正して全部コンパイルし直してみるとうまく生成できました。試しにWindowsのコンソール(CMD.exe)にmake.exeを実行するにあたって、msysのbinだけにパスを通してATtiny2313用に以前作成していたプロジェクトをコンパイルしたところ、msys環境下以外だとDLLファイルが足りないと言われてしまったのでbinフォルダ内にMinGWのDLLを入れた所、無事コンパイル出来き、更に実機に書き込んでみたところ、無事動きました。MinGWのDLLも何とかしたかったのですが、何回かチャレンジしてダメだったので、これでよしとしました。気が向いたら再チャレンジするかも…。それと、64bit版でのコンパイルも気が向いたら…。

追加・修正を加えたパッチは【物置】に置きました。
また、コンパイルの手順を下記します(テキストをパッチファイルと一緒に入れてもいます)。

$ unzip ./avr-patches.zip

$ wget ftp://ftp.gmplib.org/pub/gmp/gmp-5.1.1.tar.bz2
$ tar jxf ./gmp-5.1.1.tar.bz2
$ cd ./gmp-5.1.1
$ mkdir ./build
$ cd ./build/
$ ../configure --prefix=/usr/local/winavr/tool --disable-shared --enable-static
$ make
$ make check
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../

$ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.gz
$ tar zxf ./mpfr-3.1.2.tar.gz
$ cd ./mpfr-3.1.2
$ mkdir ./build
$ cd ./build/
$ ../configure --prefix=/usr/local/winavr/tool --disable-shared --enable-static --with-gmp=/usr/local/winavr/tool
$ make
$ make check
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../

$ wget http://www.multiprecision.org/mpc/download/mpc-1.0.1.tar.gz
$ tar zxf ./mpc-1.0.1.tar.gz
$ cd ./mpc-1.0.1
$ mkdir ./build
$ cd ./build/
$ ../configure --prefix=/usr/local/winavr/tool --disable-shared --enable-static --with-gmp=/usr/local/winavr/tool --with-mpfr=/usr/local/winavr/tool
$ make
$ make check
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../

$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.bz2
$ tar jxf ./binutils-2.22.tar.bz2
$ cd ./binutils-2.22
$ for file in $(find ../avr-patches/binutils/ -type f -name "*.patch" | sort); do patch -p0 -i $file; done
$ mkdir ./build
$ cd ./build
$ ../configure --enable-languages=c --with-mpc=/usr/local/winavr/tool --with-mpfr=/usr/local/winavr/tool --with-gmp=/usr/local/winavr/tool --prefix=/usr/local/winavr/3.4.1 --target=avr
$ make
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../


$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.6.2/gcc-4.6.2.tar.bz2
$ tar jxf ./gcc-4.6.2.tar.bz2
$ cp -r ./gmp-5.1.1 ./gcc-4.6.2/gmp
$ cp -r ./mpfr-3.1.2 ./gcc-4.6.2/mpfr
$ cp -r ./mpc-1.0.1 ./gcc-4.6.2/mpc
$ cd ./gcc-4.6.2
$ for file in $(find ../avr-patches/gcc/ -type f -name "*.patch" | sort); do patch -p0 -i $file; done
$ mkdir ./build
$ cd ./build
$ ../configure --prefix=/usr/local/winavr/3.4.1 --target=avr --program-prefix=avr- --enable-languages=c --with-dwarf2 --enable-doc --disable-shared --disable-libada --disable-libssp --disable-nls --enable-fixed-point --with-gmp=/usr/local/winavr/tool --with-mpc=/usr/local/winavr/tool --with-mpfr=/usr/local/winavr/tool
$ make
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../

$ wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-1.8.0.tar.bz2
$ tar jxf ./avr-libc-1.8.0.tar.bz2
$ cd ./avr-libc-1.8.0/
$ for file in $(find ../avr-patches/avr-libc/ -type f -name "*.patch" | sort); do patch -p0 -i $file; done
$ unset CC
$ ./bootstrap
$ PREFIX=/usr/local/winavr/3.4.1
$ export PREFIX
$ PATH=$PATH:$PREFIX/bin
$ export PATH
$ mkdir ./build
$ cd ./build/
$ ../configure --prefix=/usr/local/winavr/3.4.1 --build=`../config.guess` --host=avr
$ make
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../

スポンサーサイト

コメントの投稿

非公開コメント

黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
最新記事
最新コメント
カテゴリ
ユーザタグ

ぺるけ RaspberryPi Linux トランジスタ式ミニワッター TRminiWatterPart4 MPD OpenOCD イーサネットコンバータ FON2405E DAC buildroot FM3ペリフェラル BeagleBoneBlack FM3評価ボード library OpenGL mingw ODROID-U2 TL-WR700N Edison bitbake KiCad 計測 VMware シングル FM4 ミニワッター 6N6P プリアンプ 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。