avrdude: ser_open(): can't open device "/dev/ttyACM0": Device or resource busy
I got exact problem with my Leonardo board and Ubuntu. Adding rule that tells ModemManger to ignore all USB devices from mentioned link didn't work for me. However, deleting modemmanager in fact did.
sudo apt-get purge modemmanager
you first need to make sure you have the correct read/write rights, as described here, esentially enter following commands:
$ sudo adduser <username> dialout
$ sudo chmod a+rw /dev/ttyACM0
the '/dev/ttyACM0' is the port your arduino is connected to, it should be listed in the /dev folder of your root.
second: after you have identified which port the arduino is connected to and you have set the correct rights for this port, you need to run following command. I am not sure what it does, I am not sure if it's really needed, but it made the uploads work for me on several occasions
$ sudo udevadm trigger
found this command here: http://starter-kit.nettigo.eu/2015/serial-port-busy-for-avrdude-on-ubuntu-with-arduino-leonardo-eth/
and third, you will find the upload sometimes a challenge of timing and luck. Keep pressing the reset (sometimes twice very consecutively) and meanwhile press the upload button of your arduino sketch. At certain moment, it will work. I had more luck when constantly changing small pieces in the code, so when I pushed 'upload', it had to compile the code first.
https://www.arduino.cc/en/Guide/Troubleshooting#upload
on some computers, you may need to push teh reset button
I have never messed with the bootloader, nor with ICSP pins and such (luckily)
Also have a look on the Arduino forum or on the link provide by yourself
The solution that worked for me always is to go to Tools -> Port -> /dev/ttyACMx
and click the selected port again.
After that IDE uploads the code without a problem.