Archive for November, 2011

Building a working toolchain for AVR and Arduino development using Gentoo Linux

Wednesday, November 23rd, 2011


Gentoo‘s crossdev is not able to compile a toolchain with one command in one process. Since I am using Ardunio for embedded prototyping I really needed to fix this!

If you don’t have crossdev installed just execute:

emerge crossdev

Here you find more information about crossdev

crossdev is modifying /etc/portage/package.use while compile time… :/ Before stage2 it adds the obsolete USE=”nocxx” flag to cross-avr/gcc. If you have USE=”cxx” flag set in /etc/make.conf or when USE=”cxx” is not set in make.conf it will fail to build; I think it is a default value. So you need to add USE=”-cxx” in /etc/make.conf at the beginning of the process. When crossdev reaches stage2 it removes USE=”nocxx” in /etc/portage/package.use and expects USE=”cxx” and not USE=”-cxx” in /etc/make.conf. If the compile error rises up, simply change USE=”-cxx” to USE=”cxx” in /etc/make.conf. Then execute the crossdev command again. Since everything before gcc stage2 is compiled already, crossdev is not doing it again and continues at gcc stage2 with the USE flag changes set.


  1. /etc/make.conf: USE=”-cxx”
  2. crossdev -t avr
  3. Compile error at stage2
  4. Change USE=”-cxx” to USE=”cxx” in /etc/make.conf
  5. crossdev -t avr
  6. Installation complete! :)
  7. ln -s /usr/i686-pc-linux-gnu/avr/lib/ldscripts /usr/avr/lib/ldscripts

    This is filed in Gentoo bug #147155.

  8. For each AVR MCU you are using you need to do this:

    ln -s /usr/avr/lib/avr5/crtm168.o /usr/avr/lib/crtm168.o

    The Arduino IDE gives an error if the library for the used MCU is not found! Simply create a symlink for it and everything works… :/

  9. All done!

After all this pain in the last two days I have decided to build my own AVR toolchain in the future. I will never again go through this evil process of installing all this with packages provided by a Linux distribution regardless of Gentoo…

More about:

For Arduino users this solution does not fix the following problem:

It seems Gentoo is using a broken version of the avr-gcc toolchain. I have tried installing older versions of gcc, binutils and libc for AVR but with no luck. It took hours trying this out… :/

All the time I am getting problems related to the error described in the link from Archlinux above or much more complex problems I don’t wanna talk about. I am using the workaround described above for now but I think there must be a solution for these problems in the future.

I think this does not only happen for Arduino users because the compiled file implies the broken data and when writing it to an AVR using avrdude your program is broken regardless of Arduino. This is a problem for all people trying to use Gentoo for AVR development. After talking to some people on the Arduino develper list it seems not only Gentoo is broken at this place. Many distributions are shipping the latest avr-gcc version, utterly unaware how broken the most recent versions usually are.

I hope this information is helpful to someone and I wish good luck… ;)

BTW: I am using the wonderful GNOME based Arduino IDE called Gnoduino which I found by researching my problems today… ;) Give it a try! I love it because it natively runs on my Desktop, not GNOME but Xfce, without the use of JAVA.

Just ask me if you have questions!

Posted in: DIY, embedded, linux



Account ACTA Amsterdam Android App Arduino Arm Attiny Automation Avr Beach Board Book Bootstrap Circuit Clouds Code Community Cross Css3 Cyanogen Denhaag Denmark Desaster Deutsch Device Distribution DIY Dotnet Electronics Embedded Extension Extension news Firefox Foo Fosdem Freedom Freifunk Friends internet Fun Games GCC Gentoo German Git Gnoduino Hamburg Header Hello Holiday Host Howto HTML Html5 Httpd Internet Irc Jabber Javascript Keitum Kernel Language Lcd Led Lego Leiden Leo Leo-search Life Linspector Linux Madurodam MariaDB Matrix Mindstorms Minimal Mirror Mobile Monitoring Moon Music Mysql Nagios Nas Netduino Netherlands Network News NXT Ooc Openmediavault Opensource Openwrt Patents Pcsc Petition Photo Photos Php Politics Programming Python Question Recovery Robotics Rsync Sabayon Scheduler Scm Sensor Server Service Shell Simulation Smartcards Snow Soap Society Software Starwars Static Sun Sweden Sylt Techno Telemichel Toolchain Translation Vpn Website Wget Wine Wiring Wordpress Wsdl Xmpp Zsh Zynk