Forum: Compiler & IDEs AVR Dude unter Linux: Permission denied


von rtzui (Gast)


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

von Mark S. (voltwide)


Lesenswert?

Auf meinem Linux läuft AVRDude auch nur mit Admin-Rechten, d.h. ich 
starte ihn mit "sudo" von der KommandoZeile aus - läuft also außerhalb 
der IDE (bei mir "Codeblocks")

von derElf (Gast)


Lesenswert?

funktioniert es wenn du mal testweise die Arduino-IDE als root startest?

von rtzui (Gast)


Lesenswert?

Ja, als Root funktioniert es. Aber das kann für mich keine Dauerhafte 
Lösung sein. Das soll von Leuten (Kindern) bedient werden die definitv 
kein Root sein dürfen.

von derElf (Gast)


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?

von Kaj (Gast)


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...

von Kaj (Gast)


Lesenswert?


von c.m. (Gast)


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.

von rtzui (Gast)


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

von Kaj (Gast)


Lesenswert?

rtzui schrieb:
> can't open device "/dev/ttyACM0": Permission denied

rtzui schrieb:
> glaube ich auch
> nicht dass des an den Berechtigungen liegt.

rtzui schrieb:
> Ja, als Root funktioniert es.

von Bernd K. (prof7bit)


Lesenswert?

rtzui schrieb:
> Ja, als Root funktioniert es. Aber das kann für mich keine
> Dauerhafte
> Lösung sein. Das soll von Leuten (Kindern) bedient werden die definitv
> kein Root sein dürfen.

Google doch einfach mal nach dem Problem. Das ist doch wohlbekannt.

Füge dich zur Gruppe "dialout" hinzu.

von Alexander S. (alesi)


Lesenswert?

Bernd K. schrieb:
> Füge dich zur Gruppe "dialout" hinzu.

rtzui schrieb:
> $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)

von Bernd K. (prof7bit)


Lesenswert?

Alexander S. schrieb:
> Bernd K. schrieb:
>> Füge dich zur Gruppe "dialout" hinzu.
>
> rtzui schrieb:
>> $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)

Dann wirds auch funktionieren. Problem gelöst.

von rtzui (Gast)


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

von TestX (Gast)


Lesenswert?

deaktiviere doch einfach mal apparmor zum testen...
1
sudo service apparmor teardown

mit dem AVRISP MKII klappt das nach dem hinzufügen der udev regeln bei 
mir zB ohne probleme..

von Konrad S. (maybee)


Lesenswert?

derElf schrieb:
> hast dich
> ab- und wieder angemeldet?

von Kaj (Gast)


Lesenswert?

rtzui schrieb:
> ID 2341
        ^
rtzui schrieb:
> ATTR{idVendor}=="2342"
                      ^
richtig muss es heißen:
1
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", GROUP="users", MODE="0666"
Group und Mode musst du halt an dich anpassen.

Zum neu laden:
1
udevadm control --reload

Funktioniert bei mir ohne Probleme...

von c.m. (Gast)


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.

von rtzui (Gast)


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.

von rtzui (Gast)


Lesenswert?

Und Danke für die Hinweise.

von rtzui (Gast)


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.

von derElf (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von rtzui (Gast)


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.

von rtzui (Gast)


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.

von Mike J. (linuxmint_user)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.