Hi! This text document is about getting started in bare AVR programming on Linux without any GUI shit by programming a basic led blinker. You can apply this guide to programming an Arduino board, too, if you prefer not to start from scratch. It came to be because the one I used disappeared from the web which annoys me greatly. Please send all requests for improvement to Emil@IRCnet/Libera/Rizon/OFTC. I hope to do justice to the guide I had. If you want to build the toolchain from source (to get support for atmega328pb for example), I have put up "guide" for it, available at https://emil.fi/toolchain 1. The AVR (usually means Attiny and Atmega) platform is a collection of 8-bit (everything is really 8 bits max) microcontrollers that enjoy a huge userbase, excellent free software development tools and many, many guides and tutorials. In particular, most of "Arduino" is just avr-based devices with a serial bootloader and a (shitty) hardware abstraction layer (hal). 2. To get started you need to install some software. In Debian based distributions, do ($ represents shell input): $sudo apt install avrdude gcc-avr avr-libc binutils-avr (naming may vary in other distributions) 3. Let's wire our circuit. You need: -An atmega328p in dip package (though you can use pretty much any attiny/atmega/avr, just change the definitions when compiling and check the pinouts), -A usbasp/similar for programming (which plugs to usb on your computer, also get the adapter which usually comes with it), -A breadboard, -A led, -A 300 //Here are definitions for all basic IO. #include //Some convenience functions for delays. void vdelay(unsigned char d) //Another convenience function since one that accepts variables is not provided in the standard libraries. { unsigned char i; //We need a counter. for(i=0; i