Yo le cargué el bootloader a varios atmega328p-pu usando un Arduino UNO r3, utilicé esta guia y me sirvió de mil maravillas:
http://www.arduteka.com/2012/06/cargando-el-bootloader-en-el-atmega328/obviamente no tuve que hacer la modificación al archivo de configuración.
Pero vale que vuelvas a leer bien estas lineas y comprobar si lo estás haciendo bien.
En caso de que tengas un 328P-PU, puedes ir directamente al último párrafo. Pero en caso contrario, es preciso modificar un archivo de configuración del entorno de Arduino para “engañarlo” y que piense que se trata del otro modelo de chip.
Para ello, sólo hay que abrir el archivo avrdude.conf, que se encuentra en hardware/tools/avr/etc/ y encontrar hacia la segunda mitad del archivo la línea 9245:
signature = 0x1e 0×95 0x0F;
y cambiarla por ésta (lo que viene siendo reemplazar el 0F por un 14):
signature = 0x1e 0×95 0×14;
Cuando hayas terminado de cargar el bootloader, revierte el cambio que acabamos de hacer, ya que entonces si no lo haces no podrás cargar archivos a tu Arduino. No obstante, tendrás que volver a hacer esto siempre que quieras cargar tu ATMega328-PU. Como curiosidad, si se omite esta parte la consola del entorno nos mostrará el siguiente error:
avrdude: Expected signature for ATMEGA328P is 1E 95 0F
Double check chip, or use -F to override this check.
Suerte!