The thing about linux based developers is that they usually have their own unique workflow (vim vs emacs, etc). In my opinion, linux is one big IDE that you add your own parts to. With that in mind:
If you are using a debian-based distro, run this in your command line: sudo apt-get install build-essential avr-gcc avrdude
Then find a text editor you like (google is your friend but here are a few: vim/gvim, emacs, geany, kate, jedit) and write some C. When you are ready to compile, jump onto avrfreaks and have a look at other peoples makefiles. You can probably just steal a makefile from someone else's project and modify the target device, XTAL frequency and source filenames. After you run make and have a .hex file, use avrdude to program your chip.
To go into detail would take much more space than I have, but that is the basic process. When you are comfortable with the process you can do extra cool stuff in the makefile like having a single command that compiles and downloads your code. Some text editors (like geany) let you set custom make commands to GUI menu options so you could have a compile+download button like I do.
Also, the fantastic thing about this process is that it is pretty much the same whether you are building for ARM, AVR, x86, SPARC, whatever. Once you have makefiles and gcc down, the rest of linux development is a piece of cake!
Under Linux, you'd probably use avrdude
to program them. It supports most programmers and most AVR chips. The main thing to watch out for, is that I think you need to use avr-objcopy
to extract the data from the 'ELF' binary files, you can't program the 'ELF' directly with avrdude.
Random googling for avr-objcopy / avrdude commandlines comes up with this, which looks like it might work:
# create demo.bin from demo.elf
avr-objcopy -j .text -j .data -O binary demo.elf demo.bin
# program demo.bin to the 'flash' memory in an 'atmega128' chip,
# using a 'stk200' programmer connected to the 'lpt1' port on your computer
avrdude -p atmega128 -c stk200 -P lpt1 -U flash:w:demo.bin:r
Best Answer
I agree with zklapow but check the projects section on AVR Freaks too. That's how I learnt back in the day before arduinos. Also, you will almost certainly have to read the datasheet for your chip to get anything useful done. There are no nice functions that, for example, read an analog pin in because there are so many parameters that the arduino environment hides from you. Let me give you an example:
is roughly similar to the following C (not tested):
Sure, there are delay functions in some libraries and there may be output functions in other ones, but get used to writing code like this. The only way you can possibly know what all this PORTB and DDRB stuff means is to read the datasheet. I'm sorry to drone on about this but not enough people realize that the datasheet is a goldmine for information.