GNU/Linux: Felmeddelande 'error opening serial port', 'avrdude: ser_open(): can`t open device <port>', 'permission denied'

Vad gör man om man inte kan få tillgång till den seriella porten/USB under GNU/Linux?

Om åtkomsträttigheterna till enhetsfiler (seriella portar, USB) inte är korrekt inställda under GNU/Linux kan användaren varken programmera en mikrokontroller eller använda gruvprogrammet "AVR_Miner.py".

Om du vill programmera en Arduino UNO med Arduino IDE för första gången kommer du nästan alltid att stöta på problemet under GNU/Linux att IDE inte har tillgång till den seriella porten (dvs. USB) och därför inte kan hitta mikrokontrollern. Lösningen: Korrigera grupptillhörigheten (och inte släppa enhetsfiler för alla/alla som ofta beskrivs!).

Tillgång till seriell USB

Arduino IDE fungerar "out of the box" - med ett undantag: du kan inte skriva till de seriella portarna och kan därför inte komma åt USB-enheter. Detta är en förnuftig säkerhetsinställning i Unix-system som Linux eller BSD. Linux följer (åtminstone delvis) Unix filosofi: "Allt är en fil", vilket är anledningen till att USB-enheter också mappas som filer i katalogträdet. Om du ansluter en Arduino UNO till en USB-port visas den som en fil i katalogen /dev:

mipl@t5500:~$ ls -l /dev/ttyACM* /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 14. Feb 09:03 /dev/ttyACM0

Vad betyder informationen på den andra raden?

  • crw-rw---- Åtkomsträttigheter för UGO (Användare "rw", Grupp "rw", Andra "--")
  • root dialout Filen/enheten tillhör root och gruppen dialout.
  • 14 Feb 09:03 Filen skapades nu (Arduino inkopplad).
  • /dev/ttyACM0 Namnet på den fil genom vilken Arduino UNO kan nås.
Förresten: Original Arduino UNO/Nano loggar in på systemet som /dev/ttyACMx, kloner däremot som /dev/ttyUSBx.

PermissionError: [Errno 13] Permission denied: 'dev/ttyACM0'

Skärmdump Arduino IDE Fehler 13

Om det kommer ett felmeddelande vid åtkomst till den seriella porten (USB-port /dev/ttyACM0original Arduino UNO, /dev/ttyUSB0Clones) saknar användaren rättigheter att komma åt denna enhet/fil. Under inga omständigheter bör du, som det ofta sägs, låta enhetsfilen tillhöra användaren (chown ttyACM mipl:mipl) eller till och med släppa åtkomsträttigheterna för allt och alla (chmod 777 ttyACM0). Detta är extremt osäkert och dumt. I stället måste användaren gå med i gruppen "dialout" (för modem och därmed seriell/USB-åtkomst). Detta måste göras med root-rättigheter och ser ut så här:

sudo usermod -a -G dialout mipl

Detta lägger till "mipl" till gruppen dialout. Med "-a" läggs den angivna gruppen till (utan "-a" skulle "dialout" vara den enda gruppen). Efter "-G" listas alla grupper (flera är separerade med kommatecken) som användaren ska gå med i.

Om du nu anger kommandot id igen ser du att användaren har lagts till i gruppen dialout. Som användare är detta gruppmedlemskap dock ännu inte synligt. Det irriterande är att du måste logga in igen eller starta om systemet för att ändringen ska träda i kraft för den aktuella sessionen.

I standardinstallationen är du inte medlem i gruppen dialout. Den här gruppen har tillgång till seriella gränssnitt (dialout = att ringa ut, kommer från tider då dataöverföring sker via modem).

Efter en omstart visar anropet av id att du inte är root (du bör aldrig arbeta som root, oavsett vilket operativsystem du använder), utan att du tillhör gruppen dialout:

mipl@t5500:~$ id
uid=1000(mipl) gid=1000(mipl) Gruppen=1000(mipl),24(cdrom),25(floppy),
29(audio),30(dip),44(video), 46(plugdev),102(netdev)

Nu kan du programmera mikrokontroller via Arduino IDE (eller avrdude) och styra Arduino UNO via

python3 AVR_Miner.py

för att bryta Duinocoin (DUCO).