


where is the (optiboot) bootloader? Hex file is here:
arduino-1.8.5/hardware/arduino/avr/bootloaders/optiboot_atmega328.hex

ref: https://forum.arduino.cc/index.php?topic=125622.0

example cmd:
avrdude -c dragon_isp -P usb -p atmega328p -U flash:w:main.hex:i

ref: https://forum.arduino.cc/index.php?topic=350727.0

HOWEVER THAT IS WRONG. TRAP.

EDIT: also need fuse bits programmed or else this will not work.
(external crystal is used, in uno.)
TRAP #2: you need an external crystal (16MHz) in the avrdragon, AFTER programming
the fuse bits. You can solder wires to another uno board's crystal
with the chip removed, if you don't have a 16MHz piece of quartz around.



see https://learn.sparkfun.com/tutorials/installing-an-arduino-bootloader
example there (note this is usbtiny)
#avrdude -b 19200 -c dragon_isp -p m328p -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m
EDIT: looks like sparkfun has incorrect information (or outdated).
see arduino-1.8.5/hardware/arduino/avr/boards.txt
for what arduino has for board values
wrong entry (out of date):
avrdude -b 19200 -c dragon_isp -p m328p -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m

correct entry: (efuse must be 0xFD, as the reserved high bits must be set as 1's)
avrdude -b 19200 -c dragon_isp -p m328p -v -e -U efuse:w:0xFD:m -U hfuse:w:0xDE:m -U lfuse:w:0xFF:m

below are fuse bits. These should be used as well.
avrdude -b 19200 -c dragon_isp -p m328p -v -e -U flash:w:hexfilename.hex -U lock:w:0x0F:m

see also
http://www.martyncurrey.com/arduino-atmega-328p-fuse-settings/




Get a good ziff socket for the dragon.

Notice that the first header is VCC/GND breakout, the second is ICSP, and the
third is directly tied to ZIFF socket.

Also notice that JTAG and HV_PRG are not connected.

My dragon was already setup for this, though some extra gnds were connected
(e.g. I had vcc/gnd header's gnd connected to ICSP #6, and then another GND to
pin 8 on the third breakout. But this picture has only ISP #6 to 8 (omitting
the ground loop). Possibly either will work. I know mine works.



You can watch the leds on the uno to see if it's working.

if you do it correctly, LED 13 lights up with optiboot, then goes blank (or
into sketch). If you have it failed, from a blank atmega328p, it will
go solid, then after a short while start to blink.


I have a dedicated Avrdragon for programming optiboot onto atmega328p.
makes things easy. 


WRONG CHIP:
remember atmega328p-pu is the right chip
atmega328-pu is wrong. 
You can program atmega328-pu, by changing avrdude paramters, or using
-F

In this case, I changed atmega328p to atmega328 to reflect that I had the
incorrect chip



error:
sometimes it will error out:
avrdude: usbdev_open(): Found AVRDRAGON, serno: 00#########
avrdude: jtagmkII_getsync(): sign-on command: status -1
^C


at this point, just disconnect and reconnect avrdragon from gnulinux box
