WinAVR に同梱されている AVRDUDE は USB Support を有効にしてのビルドがされていない。実行すると、
C:\WinAVR-20100110\bin>avrdude -pm328p -cjtag2isp -Pusb
avrdude was compiled without usb support.
avrdude: ser_send(): write error: sorry no info avail
みたいな感じで取り付く島もない。
前回の記事ではyukiさんビルドのAVRDUDEを使わせていただきましたが、頼ってばかりじゃだめなので、一からビルドする方法、まとめてみました。
1. MinGW/MSYS のインストール
Cygwin だと make 時の "-mno-cygwin" オプションではじかれてしまうため、MinGW/MSYS を利用する。
まずは、MinGW。
HOWTO Install the MinGW (GCC) Compiler Suite | MinGW を参考にダウンロード、インストール。なお、ここの記事中にもある通り、以後、configureする際は、
../path/to/configure --prefix=/mingw
もしくは、
../path/to/configure --prefix=`cd /mingw; pwd -W`
のようなprefix指定が必須になる。
MSYS は MSYS | MinGW を参考にダウンロード、インストール。
2. Cygwin のインストール
make 中に yacc やら bison やら必要になるが、それらを MinGW/MSYS 上でインストールしていくのは非常に骨が折れるため、Cygwin で利用できるものは利用する。
Cygwin Information and Installation を参考にダウンロード、インストール。インストール後、Cygwin の bin へパスを通ため、MSYS で /etc/profile (C:\msys\1.0\etc\profile) を好きなエディタで開き(※改行コードは LF なので注意)、
export HOME LOGNAME MSYSTEM HISTFILE
のすぐ下辺りに、
export PATH=$PATH:/c/cygwin/bin
を追記、保存。
3. LibUsb-Win32 のインストール
USB Support を有効にするためには、LibUsb-Win32 のヘッダファイルやライブラリの Static Link が必要になる。LibUsb-Win32 からダウンロードし、Cドライブ直下等にインストールしておく。
4. AVRDUDE のビルド
AVR Downloader/UploaDEr - Summary [Savannah] からソースコードをダウンロード。順にコマンドを叩いていく。
user@COMPUTER ~/user
$ tar zxvf avrdude-5.8.tar.gz
avrdude-5.8
avrdude-5.8/README
avrdude-5.8/configure.ac
~(中略)~
avrdude-5.8/doc/texinfo.tex
avrdude-5.8/doc/avrdude.texi
avrdude-5.8/doc/avrdude.info
user@COMPUTER ~/user
$ cd avrdude-5.8
user@COMPUTER ~/user/avrdude-5.8
$ export CPPFLAGS="-I/c/LibUSB-Win32/include"
user@COMPUTER ~/user/avrdude-5.8
$ export CFLAGS="-I/c/LibUSB-Win32/include"
user@COMPUTER ~/user/avrdude-5.8
$ export LDFLAGS="-L/c/LibUSB-Win32/lib/gcc"
user@COMPUTER ~/user/avrdude-5.8
$ ./configure --prefix=/mingw
checking build system type... i686-pc-mingw32
checking host system type... i686-pc-mingw32
checking target system type... i686-pc-mingw32
~(中略)~
config.status: creating avrdude.conf.tmp
config.status: creating ac_cfg.h
config.status: executing depfiles commands
user@COMPUTER ~/user/avrdude-5.8
$ make
make all-recursive
make[1]: Entering directory `/home/user/avrdude-5.8'
Making all in windows
make[2]: Entering directory `/home/user/avrdude-5.8/windows'
gcc -DHAVE_CONFIG_H -I. -I.. -I/c/LibUSB-Win32/include -I/c/LibUSB-Win32/include -mno-cygwin -DWIN32NATIVE -MT loaddrv.o -MD -MP -MF .deps/loaddrv.Tpo -c -o loaddrv.o loaddrv.c
mv -f .deps/loaddrv.Tpo .deps/loaddrv.Po
gcc -I/c/LibUSB-Win32/include -mno-cygwin -DWIN32NATIVE -mno-cygwin -L/c/LibUSB-Win32/lib/gcc -static -o loaddrv.exe loaddrv.o
make[2]: Leaving directory `/home/user/avrdude-5.8/windows'
make[2]: Entering directory `/home/user/avrdude-5.8'
/bin/sh ./ylwrap config_gram.y y.tab.c config_gram.c y.tab.h config_gram.h y.output config_gram.output -- bison -y -d
cygwin warning:
MS-DOS style path detected: C:/msys/1.0/home/user/avrdude-5.8/config_gram.y
Preferred POSIX equivalent is: /cygdrive/c/msys/1.0/home/user/avrdude-5.8/config_gram.y
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
updating config_gram.h
~(中略)~
ar cru libavrdude.a libavrdude_a-config_gram.o libavrdude_a-lexer.o libavrdude_a-arduino.o libavrdude_a-avr.o libavrdude_a-avr910.o libavrdude_a-avrpart.o libavrdude_a-bitbang.o libavrdude_a-butterfly.o libavrdude_a-config.o libavrdude_a-confwin.o libavrdude_a-crc16.o libavrdude_a-fileio.o libavrdude_a-jtagmkI.o libavrdude_a-jtagmkII.o libavrdude_a-lists.o libavrdude_a-par.o libavrdude_a-pgm.o libavrdude_a-ppi.o libavrdude_a-ppiwin.o libavrdude_a-safemode.o libavrdude_a-serbb_posix.o libavrdude_a-serbb_win32.o libavrdude_a-ser_avrdoper.o libavrdude_a-ser_posix.o libavrdude_a-ser_win32.o libavrdude_a-stk500.o libavrdude_a-stk500v2.o libavrdude_a-stk500generic.o libavrdude_a-usbasp.o libavrdude_a-usb_libusb.o libavrdude_a-usbtiny.o libavrdude_a-update.o
ranlib libavrdude.a
gcc -DHAVE_CONFIG_H -I. -DCONFIG_DIR=\"/mingw/etc\" -I/c/LibUSB-Win32/include -Wall -I/c/LibUSB-Win32/include -mno-cygwin -DWIN32NATIVE -MT avrdude-main.o -MD -MP -MF .deps/avrdude-main.Tpo -c -o avrdude-main.o `test -f 'main.c' || echo './'`main.c
mv -f .deps/avrdude-main.Tpo .deps/avrdude-main.Po
gcc -DHAVE_CONFIG_H -I. -DCONFIG_DIR=\"/mingw/etc\" -I/c/LibUSB-Win32/include -Wall -I/c/LibUSB-Win32/include -mno-cygwin -DWIN32NATIVE -MT avrdude-term.o -MD -MP -MF .deps/avrdude-term.Tpo -c -o avrdude-term.o `test -f 'term.c' || echo './'`term.c
mv -f .deps/avrdude-term.Tpo .deps/avrdude-term.Po
gcc -Wall -I/c/LibUSB-Win32/include -mno-cygwin -DWIN32NATIVE -L/c/LibUSB-Win32/lib/gcc -static -o avrdude.exe avrdude-main.o avrdude-term.o ./libavrdude.a -lusb -lhid -lsetupapi -lm
make[2]: Leaving directory `/home/user/avrdude-5.8'
make[1]: Leaving directory `/home/user/avrdude-5.8'
5. 元の WinAVR の AVRDUDE と入れ替え
ビルドでできた「avrdude.conf」「avrdude.exe」を WinAVR の AVRDUDE と入れ替える。これで実行すれば、
C:\WinAVR-20100110\bin>avrdude -pm328p -cjtag2isp -Pusb
avrdude: usbdev_open(): did not find any USB device "usb"
のように USB を探しに行ってくれる。
ちなみに MinGW/MSYS は Windows の環境変数設定の影響を結構受けるので、仮想マシンなどでクリーンなビルド環境が用意できると、変なところで悩まずに済みます。(^_^;)←
0 件のコメント:
コメントを投稿