A short guide to building the avr toolchain from source. Better version available at http://www.nongnu.org/avr-libc/user-manual/install_tools.html Where to get the required shit Binutils: http://ftp.gnu.org/gnu/binutils/ GCC: http://www.gnu.org/prep/ftp.html or https://gcc.gnu.org/mirrors.html LibC: http://download.savannah.gnu.org/releases/avr-libc/ Avrdude: http://download.savannah.gnu.org/releases/avrdude/ crtatmega328pb.o io.h iom328pb.h libatmega328pb.a avrdude.conf: https://github.com/watterott/ATmega328PB-Testing Install the necessary packages. Avrdude is fine from the repos. Check the output for configure if you want moar support. $ sudo apt-get install build-essentials screen flex bison libmpc-dev libelf-dev libusb-dev libusb-1.0-0-dev libftdi-dev Commands, do read them before blindly executing $ PREFIX=$HOME/local/avr $ export PREFIX $ PATH=$PATH:$PREFIX/bin $ export PATH $ bunzip2 -c binutils-.tar.bz2 | tar xf - $ cd binutils- $ mkdir obj-avr $ cd obj-avr $ ../configure --prefix=$PREFIX --target=avr --disable-nls $ make $ make install $ bunzip2 -c gcc-.tar.bz2 | tar xf - $ cd gcc- $ mkdir obj-avr $ cd obj-avr $ ../configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ --disable-nls --disable-libssp --with-dwarf2 $ make $ make install $ bunzip2 -c avr-libc-.tar.bz2 | tar xf - $ cd avr-libc- $ ./configure --prefix=$PREFIX --build=`./config.guess` --host=avr $ make $ make install $ gunzip -c avrdude-.tar.gz | tar xf - $ cd avrdude- $ mkdir obj-avr $ cd obj-avr $ ../configure --prefix=$PREFIX $ make $ make install Because fuck the repo managers, we are still missing the files for atmega328pb. Add them to their relevant locations in your $PREFIX (or default location if you didn't provide prefix. To get avrdude working with atmega328pb, add to $PREFIX/avrdude.conf after the definition of m328p (systemwide is usually at /etc/avrdude.conf if you installed from repos) part parent "m328" id = "m328pb"; desc = "ATmega328PB"; signature = 0x1e 0x95 0x16; ocdrev = 1; ; It should now work.