Support » Developing for the ATmega328P under Linux »
5. Compiling AVRDUDE
<h3>Checking the currently installed version of AVRDUDE</h3>
<p>Run the following command:</p>
<pre>avrdude -v</pre>
<p>You need at least version 5.6 for ATmega328P support.</p>
<h3>Downloading the source code</h3>
<p>Get the latest version from the <a href="http://www.nongnu.org/avrdude/">AVRDUDE web site</a>.</p>
<h3>Unpacking the archive</h3>
<p>Run the following command:</p>
<pre>tar xzf ~/Desktop/avrdude-5.6.tar.gz
cd avrdude-5.6</pre>
<h3>Compiling and installing AVRDUDE</h3>
<p>Unlike the other packages, AVRDUDE does not need to be specifically told to compile for the AVR. So you should be able to compile it with no special options:</p>
<pre>./configure
make
sudo make install</pre>
<h3>Optional: configuring earlier versions of AVRDUDE for the ATmega328P</h3>
<p>The following configuration file will let versions of AVRDUDE before 5.6 work with the 328. Just copy these definitions to the end of avrdude.conf, which can be found in <code>/etc</code>, <code>/usr/local/etc</code>, or sometimes in the same directory as the <code>avrdude</code> executable.</p>
<pre class="long_file">#------------------------------------------------------------
# ATmega328P
#------------------------------------------------------------

part
 id = "m328p";
 desc = "ATMEGA328P";
 has_debugwire = yes;
 flash_instr = 0xB6, 0x01, 0x11;
 eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
 0x99, 0xF9, 0xBB, 0xAF;
 stk500_devcode = 0x86;
 # avr910_devcode = 0x;
 signature = 0x1e 0x95 0x0F;
 pagel = 0xd7;
 bs2 = 0xc2;
 chip_erase_delay = 9000;
 pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
 "x x x x x x x x x x x x x x x x";

 chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
 "x x x x x x x x x x x x x x x x";

 timeout = 200;
 stabdelay = 100;
 cmdexedelay = 25;
 synchloops = 32;
 bytedelay = 0;
 pollindex = 3;
 pollvalue = 0x53;
 predelay = 1;
 postdelay = 1;
 pollmethod = 1;

 pp_controlstack =
 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
 hventerstabdelay = 100;
 progmodedelay = 0;
 latchcycles = 5;
 togglevtg = 1;
 poweroffdelay = 15;
 resetdelayms = 1;
 resetdelayus = 0;
 hvleavestabdelay = 15;
 resetdelay = 15;
 chiperasepulsewidth = 0;
 chiperasepolltimeout = 10;
 programfusepulsewidth = 0;
 programfusepolltimeout = 5;
 programlockpulsewidth = 0;
 programlockpolltimeout = 5;

 memory "eeprom"
 paged = no;
 page_size = 4;
 size = 1024;
 min_write_delay = 3600;
 max_write_delay = 3600;
 readback_p1 = 0xff;
 readback_p2 = 0xff;
 read = " 1 0 1 0 0 0 0 0",
 " 0 0 0 x x x a9 a8",
 " a7 a6 a5 a4 a3 a2 a1 a0",
 " o o o o o o o o";
 
 write = " 1 1 0 0 0 0 0 0",
 " 0 0 0 x x x a9 a8",
 " a7 a6 a5 a4 a3 a2 a1 a0",
 " i i i i i i i i";

 loadpage_lo = " 1 1 0 0 0 0 0 1",
 " 0 0 0 0 0 0 0 0",
 " 0 0 0 0 0 0 a1 a0",
 " i i i i i i i i";

 writepage = " 1 1 0 0 0 0 1 0",
 " 0 0 x x x x a9 a8",
 " a7 a6 a5 a4 a3 a2 0 0",
 " x x x x x x x x";

 mode = 0x41;
 delay = 5;
 blocksize = 4;
 readsize = 256;
 ;

 memory "flash"
 paged = yes;
 size = 32768;
 page_size = 128;
 num_pages = 256;
 min_write_delay = 4500;
 max_write_delay = 4500;
 readback_p1 = 0xff;
 readback_p2 = 0xff;
 read_lo = " 0 0 1 0 0 0 0 0",
 " 0 0 a13 a12 a11 a10 a9 a8",
 " a7 a6 a5 a4 a3 a2 a1 a0",
 " o o o o o o o o";
 
 read_hi = " 0 0 1 0 1 0 0 0",
 " 0 0 a13 a12 a11 a10 a9 a8",
 " a7 a6 a5 a4 a3 a2 a1 a0",
 " o o o o o o o o";
 
 loadpage_lo = " 0 1 0 0 0 0 0 0",
 " 0 0 0 x x x x x",
 " x x a5 a4 a3 a2 a1 a0",
 " i i i i i i i i";
 
 loadpage_hi = " 0 1 0 0 1 0 0 0",
 " 0 0 0 x x x x x",
 " x x a5 a4 a3 a2 a1 a0",
 " i i i i i i i i";
 
 writepage = " 0 1 0 0 1 1 0 0",
 " 0 0 a13 a12 a11 a10 a9 a8",
 " a7 a6 x x x x x x",
 " x x x x x x x x";

 mode = 0x41;
 delay = 6;
 blocksize = 128;
 readsize = 256;

 ;
 
 memory "lfuse"
 size = 1;
 min_write_delay = 4500;
 max_write_delay = 4500;
 read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
 "x x x x x x x x o o o o o o o o";
 
 write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
 "x x x x x x x x i i i i i i i i";
 ;
 
 memory "hfuse"
 size = 1;
 min_write_delay = 4500;
 max_write_delay = 4500;
 read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
 "x x x x x x x x o o o o o o o o";
 
 write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
 "x x x x x x x x i i i i i i i i";
 ;
 
 memory "efuse"
 size = 1;
 min_write_delay = 4500;
 max_write_delay = 4500;
 read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
 "x x x x x x x x x x x x x o o o";
 
 write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
 "x x x x x x x x x x x x x i i i";
 ;
 
 memory "lock"
 size = 1;
 min_write_delay = 4500;
 max_write_delay = 4500;
 read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
 "x x x x x x x x x x o o o o o o";
 
 write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
 "x x x x x x x x 1 1 i i i i i i";
 ;
 
 memory "calibration"
 size = 1;
 read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
 "0 0 0 0 0 0 0 0 o o o o o o o o";
 ;
 
 memory "signature"
 size = 3;
 read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
 "x x x x x x a1 a0 o o o o o o o o";
 ;
;
</pre>