http://awawa.hariko.com/eclipse_avr.html を参考に
crtm168.o(-mmcu=atmega168を指定した時)とかcrttn2313.o(-mmcu=attiny2313を指定した時)
とかがないと言われるので、
この2つを/usr/local/AVR/avr/libに置く。
そしてなぜかArduinoのライブラリの場所を指定するとうまくいく。
(ライブラリを2回見ている?)
テストファイル
copy.cの中身
% cat copy.c #include<avr/io.h> int main(void) { uint8_t i; i = 0; DDRB = 0xff; while (1) { i++; PORTB = i; } }
% avr-gcc -L /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/avr/lib/ -mmcu=attiny2313 copy.c
または最適化
% avr-gcc -L /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/avr/lib/ -mmcu=attiny2313 copy.c -O2 -Os
hex生成
% avr-objcopy -R .eeprom -O ihex a.out copy.hex
できた
% cat copy.hex :1000000012C017C016C015C014C013C012C011C052 :1000100010C00FC00EC00DC00CC00BC00AC009C07C :1000200008C007C006C011241FBECFEDCDBF02D04F :1000300007C0E6CF8FEF87BB80E08F5F88BBFDCF27 :04004000F894FFCF62 :00000001FF
% avr-objdump -d a.out a.out: ?ե???????? elf32-avr Disassembly of section .text: 00000000 <__vectors>: 0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end> 2: 17 c0 rjmp .+46 ; 0x32 <__bad_interrupt> 4: 16 c0 rjmp .+44 ; 0x32 <__bad_interrupt> 6: 15 c0 rjmp .+42 ; 0x32 <__bad_interrupt> 8: 14 c0 rjmp .+40 ; 0x32 <__bad_interrupt> a: 13 c0 rjmp .+38 ; 0x32 <__bad_interrupt> c: 12 c0 rjmp .+36 ; 0x32 <__bad_interrupt> e: 11 c0 rjmp .+34 ; 0x32 <__bad_interrupt> 10: 10 c0 rjmp .+32 ; 0x32 <__bad_interrupt> 12: 0f c0 rjmp .+30 ; 0x32 <__bad_interrupt> 14: 0e c0 rjmp .+28 ; 0x32 <__bad_interrupt> 16: 0d c0 rjmp .+26 ; 0x32 <__bad_interrupt> 18: 0c c0 rjmp .+24 ; 0x32 <__bad_interrupt> 1a: 0b c0 rjmp .+22 ; 0x32 <__bad_interrupt> 1c: 0a c0 rjmp .+20 ; 0x32 <__bad_interrupt> 1e: 09 c0 rjmp .+18 ; 0x32 <__bad_interrupt> 20: 08 c0 rjmp .+16 ; 0x32 <__bad_interrupt> 22: 07 c0 rjmp .+14 ; 0x32 <__bad_interrupt> 24: 06 c0 rjmp .+12 ; 0x32 <__bad_interrupt> 00000026 <__ctors_end>: 26: 11 24 eor r1, r1 28: 1f be out 0x3f, r1 ; 63 2a: cf ed ldi r28, 0xDF ; 223 2c: cd bf out 0x3d, r28 ; 61 2e: 02 d0 rcall .+4 ; 0x34 <main> 30: 07 c0 rjmp .+14 ; 0x40 <_exit> 00000032 <__bad_interrupt>: 32: e6 cf rjmp .-52 ; 0x0 <__vectors> 00000034 <main>: 34: 8f ef ldi r24, 0xFF ; 255 36: 87 bb out 0x17, r24 ; 23 38: 80 e0 ldi r24, 0x00 ; 0 3a: 8f 5f subi r24, 0xFF ; 255 3c: 88 bb out 0x18, r24 ; 24 3e: fd cf rjmp .-6 ; 0x3a <main+0x6> 00000040 <_exit>: 40: f8 94 cli 00000042 <__stop_program>: 42: ff cf rjmp .-2 ; 0x42 <__stop_program>