AVR Dude unter Linux: Permission denied

Gast #4330310
Lesenswert?

Hallo,

Ich habe hier einen Sparkfun Pro Micro. Der Mircocontroller hat den 
Vorteil dass er als USB-Gerät verwendet werden kann. Weil ich dachte 
dass das irgendwie "out of the box" funktionieren würde habe ich die 
Arduino-IDE (unter Linux) genommen. Leider kann ich kein Programm 
hochladen.

Ich bekomme folgende Ausgabe:

Der Sketch verwendet 6.042 Bytes (21%) des Programmspeicherplatzes. Das 
Maximum sind 28.672 Bytes.
Globale Variablen verwenden 362 Bytes des dynamischen Speichers.
avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied
avrdude: ser_send(): write error: Bad file descriptor


Das Wundert mich doch sehr, es scheint mir als hätte ich genügend 
Rechte:

$ls -lah /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 Okt 30 23:01 /dev/ttyACM0
$id
uid=1002(rtzui) gid=1002(rtzui) Gruppen=1002(rtzui),20(dialout)


Ich kann auch einfach völligen Blödsinn in das Gerät schreiben (ich 
hoffe es verzeiht mir das):


$ echo "test" >/dev/ttyACM0
$

Das einzige Programm was nicht dort hinschreiben zu können scheint ist 
AVR-dude, und das wäre das einzige was mich interessiert.

Mit chmod Berechtigungen oder Eigentümer ändern geht wohl auch, udev 
scheint die Berechtigungen fest festzulegen.


Kann mir hier jemand helfen?

Rtzui
Gast #4330324
Lesenswert?

rtzui schrieb:
> Ja, als Root funktioniert es.

Dann ist es ziemlich sicher ein permissions Problem und wir können in 
diese Richtung weiter suchen.

Welche Distribution benutzt du?
Ist eventuell SELinux, AppAmor oder ähnliches aktiviert?
Hast du nach dem du den user zur Gruppe dialout hinzugefügt hast dich 
ab- und wieder angemeldet?
Gast #4330463
Lesenswert?

rtzui schrieb:
> Das soll von Leuten (Kindern) bedient werden die definitv
> kein Root sein dürfen.
Müssen Sie ja auch nicht... einfach die Anwendung mit sudo starten und 
gut. Wo ist das Problem?
Alternativ den Owner auf root setzen, und das Userbit setzen, dann wird 
das programm immer mit den Rechten des Owners ausgeführt, egal wer es 
aufruft.
Oder per udev entsprechende berechtigungen beim mounten des devices 
setzen, oder, oder, oder...
Gast #4330473
Lesenswert?

ich hatte den selben fehler in der arduino IDE, war auch in der gruppe 
dialout, /dev/ttyACM0 war ebenfalls 0760, als root gings. das selbe 
eben.

was geholfen hat war der von kaj gepostete vorschlag: udev rules.
1
@devel:~$ cat /etc/udev/avrisp.rules 
2
# diese datei ist /etc/udev/avrisp.rules
3
# link anlegen "ln -s /etc/udev/avrisp.rules /etc/udev/rules.d/60-avrisp.rules"
4

5
SUBSYSTEM!="usb_device", ACTION!="add", GOTO="avrisp_end"
6

7
# Atmel Corp. JTAG ICE mkII
8
ATTR{idVendor}=="03eb", ATTR{idProduct}=="2103", MODE="666", GROUP="dialout"
9
# Atmel Corp. AVRISP mkII
10
ATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", MODE="666", GROUP="dialout"
11
# Atmel Corp. Dragon
12
ATTR{idVendor}=="03eb", ATTR{idProduct}=="2107", MODE="666", GROUP="dialout"
13

14
LABEL="avrisp_end"

jetzt gehts auch als normaler nutzer, und wahrscheinlich müsste man 
nichtmal in dialout sein, weil die rechte auf 0666 gesetzt sind.
Gast #4330549
Lesenswert?

Ich habe Ubuntu 14.4. Appamor ist (standartmäßig) installiert, weiß aber 
ehrlich gesagt nicht wie ich es bedienen kann und ob es Zugriffe auf den 
Port verhindert oder nicht.


Ich sehe zwar nicht Welche mehr Rechte die Berechtigung 666 gegeüber der 
jetzt vorhanden Berechtigung 661 bringen soll, aber gut, ich hab mal 
versucht es umzustellen.

Bislang sieht es so aus:

crw-rw---- 1 root dialout 166, 0 Okt 31 10:38 /dev/ttyACM0

Das Gerät wird von lsusb als

Bus 001 Device 042: ID 2341:0036 Arduino SA

Angezeigt, also habe ich eine Datei /etc/udev/rules.d/micropro.rules mit 
dem Inhalt

ATTR{idVendor}=="2342", ATTR{idProduct}=="0036", MODE="666", 
GROUP="dialout"

Angelegt und mit udevadm control --reload-rules die Regeln neu geladen, 
das ändert aber nichts an den Berechtigungen der Datei. Auch

KERNEL=="/dev/ttyACM0", MODE="666"

ändert nichts.

Einerseits war ich schon immer ein Fan von udev (fast noch besser als 
Pulseaudio), und das tut nicht was es soll, anderseits glaube ich auch 
nicht dass des an den Berechtigungen liegt.

Ich wäre für weitere Ideen dankebar, speziell zu Appamor.

Rtzui
Gast #4330652
Lesenswert?

Ich bin Mitglied der Gruppe dialout. Und nein, ich glaube nicht dass es 
an den (Datei-)Berechtigungen liegt, zumindest fällt mir keine Sinnvolle 
Erklärung dazu ein. Wenn ihr Glaub zu wissen woran es liegt, schriebt es 
doch einfach.

Ansonsten wäre ich tortzdem an einer Erklärung interessiert wie ich die 
Berechtigungen von /dev/ttyACM0 ändern kann.

Appamor o.Ä. könnte ich mir deutlich eher vorstellen, aber da habe ich, 
wie gesagt, keine Ahnung von.

Rtzui
Gast #4330811
Lesenswert?

bei mir läuft apparmor auch, und es funktioniert wie oben beschrieben.
1
@devel:~$ service apparmor status
2
● apparmor.service - LSB: AppArmor initialization
3
   Loaded: loaded (/etc/init.d/apparmor)
4
   Active: active (exited) since Fr 2015-10-30 13:07:51 CET; 24h ago
5
     Docs: man:systemd-sysv-generator(8)
6

7
Okt 30 13:07:51 devel systemd[1]: Starting LSB: AppArmor initialization...
8
Okt 30 13:07:51 devel apparmor[640]: * Starting AppArmor profiles
9
Okt 30 13:07:51 devel apparmor[640]: Skipping profile in /etc/apparmor.d/di...ox
10
Okt 30 13:07:51 devel apparmor[640]: Skipping profile in /etc/apparmor.d/di...gd
11
Okt 30 13:07:51 devel apparmor[640]: ...done.
12
Okt 30 13:07:51 devel systemd[1]: Started LSB: AppArmor initialization.
13
Hint: Some lines were ellipsized, use -l to show in full.

und derElf hat recht, wenn du dir die gruüüe dialout gegeben hat, musst 
du dich grafisch ab- und wieder anmelden damit das in X wirksam wird.
Gast #4330851
Lesenswert?

Ich habe mich an und ab-gemeldet, wie man an der Ausgabe von `id` sehen 
kann. Scheint aber aus irgendeinem Grund nicht gereicht zu haben. Nach 
einem Neu-Boot funktioniert das Programmieren. \o/

Wenn man bei udev die falsche Vendor-ID angibt kann es natürlich nicht 
funktionieren. m(

Mit der Angegeben Zeile kann ich jetzt zwar den Owner und die Gruppe 
ändern, der Modus bleibt aber immer 166. Ist aber glaube ich auch egal, 
programmieren funktioniert ja.


Jetzt habe ich nur noch das Problem dass ich mit dem controller nicht, 
wie versprochen, wenn das Programm läuft, über einen USB-emulierten 
seriellen Port unterhalten kann. lsusb zeigt schlicht kein Gerät an. 
Aber hier ist vermutlich das Programm, die library oder der Bootloader 
schuld und nichts am PC.
Gast #4330993
Lesenswert?

Ok, und schon ist wieder alles hin. Das ganze hat genau ein mal 
Funktioniert. Jetzt lautet die Fehlermeldung

Caused by: jssc.SerialPortException: Port name - /dev/ttyACM0; Method 
name - openPort(); Exception type - Port busy.

Einziger Vorschlag den ich bislang so recht gefunden habe war

ENV{ID_MM_DEVICE_IGNORE}="1"

in die udev regel zu schreiben. Das bringt aber auch nichts.

lsof listet keine /dev/ttyA* Datei als offen.
Gast #4331061
Lesenswert?

Poste mal die Ausgabe von:
1
dmesg | tail

Hast du den Controller schon ab- und wieder angesteckt?

Ist dein Controller im Programmier- oder Bootloadermodus?
Am besten dazu auch mal die Problemelösungen vom Arduino Leonardo 
durchlesen. Ist der Gleiche Controller und der macht beim Programmieren 
manchmal Probleme.
Moderator Persönliche Seite #4331272
Lesenswert?

rtzui schrieb:
> Port busy.

Wirf den Modemmanager aus dem System raus.  Der glaubt auch im Jahr
2015 noch, dass jedermann TCP/IP über Modems machen wöllte und stürzt
sich deshalb nach dem Anstöpseln eines /dev/ttyACM* erstmal für ein
paar Sekunden auf dieses, um dann irgendwann festzustellen, dass ihm
ja doch nur niemand was dafür vorgegeben hat, das er tun könnte.
Gast #4331417
Lesenswert?

Mit dem Rauswerfen des Modem-Managers klappt jetzt das Programmieren 
wieder \o/

Danke für den Tip. Und dem Rest auch Danke.


Jetzt so richtig funktionieren tut es aber immer noch nicht, uns so 
lagsamm passt der Threadtitel Endgültig nicht mehr.

Also der clue von einem Pro Mikro ist ja der dass dieses Gerät ein USB 
Gerät, z.B. eine Maus sein kann. Das Dingen Meldet sich als 3 USB-Geräte 
(Eine Tastertur, eine Maus und ein Com-Port der wohl das leidige 
Debuggen ohne JTAG erträglicher machen kann). Nur leider erkennt mein 
Linux keines dieser Geräte. Habe jetzt genau das selbe Problem wie 
Beitrag "Arduino Pro Micro zickt nach Umbau auf 3,3V/8MHz" Nur dass ich nichts 
umgebaut habe, sondern direkt als 3.3V Version gekauft habe. Tja... so 
ist das, nichts geht. Vielleicht baue ich dann auf 5V um, wenn das im 
Ruf steht besser zu klappen.
Gast #4331447
Lesenswert?

Ich bin Echt kein Hardware-Mensch Vermutlich weil mich eine Aura umgibt 
die Unglück bringt und Dinge kapput macht. Aber das versuche ich ja 
gerade zu ändern, und die Aura scheint langsamm kapput zu gehen.

Jetzt geht alles, auch die Serielle Konsole. Ohne dass ich was geändert 
habe.

Nochmal danke an alle.
#4332059
Lesenswert?

Du solltest ihn nicht umbauen, besorge dir einfach einen mit 5V.

http://www.ebay.de/itm/291548871778
Ein Board kostet 2 Euro und hat gleich einen USB-UART-Konverter.

rtzui schrieb:
> Also der clue von einem Pro Mikro ist ja der dass dieses Gerät ein USB
> Gerät, z.B. eine Maus sein kann.

Bist du dir da sicher?
Da braucht man doch einen ATmega32U4 um das bewerkstelligen zu können.

Ein normaler ATmega328P braucht für sowas den V-USB Stack.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren