Forum: Mikrocontroller und Digitale Elektronik Linux Mint 17.3 || Arduino IDE 1.6.5 || avrdude: ser_open(): can't open device


von Jan M. (pietus3)


Lesenswert?

Hallo Leute

Ich hoffe ihr könnt mir helfen.

Ich versuche momentan die Arduino IDE auf Linux Mint zum laufen zu 
bringen.
Wenn ich versuche mein Sketch zu übertragen mit meinem normalen Nutzer 
bekomm ich diesen Fehler:
1
avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied

Diesen Fehler bekomm iuch wenn ich root rechte nutze:
1
avrdude: ser_open(): can't set attributes for device "/dev/ttyACM0": Inappropriate ioctl for device
2
ioctl("TIOCMGET"): Bad file descriptor
Ich habe meinen nutzer der Gruppe dialout hinzugefügt, dies hat aber 
nicht den erwünscht Effekt gehabt. Zudem scheint mir Folgene Zeile etwas 
merkwürdig
1
lrwxrwxrwx 1 root root 5 Aug 12 13:43 /dev/ttyACM0 -> loop0

Während ich nach Lösungen gesucht habe sieht man eben diesen Zeile 
ziemlich häufig nur dass bei mir zweimal root steht und nicht root 
dialout, wie bei all denen ich das zuvor gesehen habe.

Hoffe ihr könnt mir helfen.

Vielen Dank für eure Bemühungen

Pietus3

von Harry L. (mysth)


Lesenswert?

Die Serielle dürfte eher auf /dev/ttyUSB0 liegen.

von noreply@noreply.com (Gast)


Lesenswert?

Was ist loop0?

von Jan M. (pietus3)


Lesenswert?

Ich denke dass ist egal.

von Jan M. (pietus3)


Lesenswert?

Was loop0 ist weiß ich auch nicht.

von noreply@noreply.com (Gast)


Lesenswert?

Jan M. schrieb:
> Was loop0 ist weiß ich auch nicht.

https://de.wikipedia.org/wiki/Loop_device

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


Lesenswert?

Jan M. schrieb:

> Ich habe meinen nutzer der Gruppe dialout hinzugefügt, dies hat aber
> nicht den erwünscht Effekt gehabt.

Für ein normales serielles Gerät sollte es den gewünschten Effekt
haben.

> Zudem scheint mir Folgene Zeile etwas
> merkwürdig

Ist sie in der Tat.

> Während ich nach Lösungen gesucht habe sieht man eben diesen Zeile
> ziemlich häufig nur dass bei mir zweimal root steht und nicht root
> dialout, wie bei all denen ich das zuvor gesehen habe.

Das liegt daran, dass die Permissions eines Symlinks Schall und
Rauch sind: nur die Permissions des Link-Ziels sind für die
Beurteilung der Zugriffsrechte relevant.

Aber dennoch ist es natürlich Unfug, dass das jemand auf loop0
verlinkt hat, und der ioctl-Fehler ist dann folgerichtig.

noreply@noreply.com schrieb:
> Was ist loop0?

Irgendein Block-Gerätetreiber.  Hat zwar eine wunderhübsche
Kurzgeschichte über die Versionen und ihre Editierungen im Kopf
der Implementierungsdatei stehen, aber kein Sterbenswörtchen, wofür
er denn eigentlich gut wäre – und eine man page gibt's natürlich
auch nicht.

Harry L. schrieb:
> Die Serielle dürfte eher auf /dev/ttyUSB0 liegen.

It depends.  Treiber wie FTDI legen ttyUSB* an, während der USB
CDC-Treiber ttyACM* anlegt (automatic calling machine).

von Jan M. (pietus3)


Lesenswert?

Hab ich die ausversehen die ganzen ACMs gebindet ? oder etwas in der 
Art?

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


Lesenswert?

Jan M. schrieb:
> Hab ich die ausversehen die ganzen ACMs gebindet ?

Ge-was-t?

Was hast du denn überhaupt als Hardware da dran?  Insbesondere, was
ist auf dieser Hardware genau als Kommunikationsschnittstelle verbaut?

von Oppa (Gast)


Lesenswert?

Jörg W. schrieb:
> und eine man page gibt's natürlich
> auch nicht.

Bei mir schon, man loop.

Um dem System eine Datei als Blockdevice vorzugaukeln, z.B. um Image 
Dateien zu mounten.

Aber warum zeigt ACM0 darauf ?

von Jan M. (pietus3)


Lesenswert?

Einen Arduino Uno.

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


Lesenswert?

Oppa schrieb:
> Jörg W. schrieb:
>> und eine man page gibt's natürlich
>> auch nicht.
>
> Bei mir schon, man loop.

Dann hat offenbar mittlerweile jemand eine geschrieben, das ist ja
schon mal positiv.

(Der Wikipedia-Artikel gaukelt vor, dass die Bezeichnung „loop“
dafür universelle Übereinkunft wäre … Unter FreeBSD ist dafür der
memory-disk-Treiber zuständig, und diese Funktionalität ist nur
eine seiner möglichen Varianten.)

> Aber warum zeigt ACM0 darauf ?

Ja, das ist wohl das, was hier die große Verwunderung produziert.

Das kann der TE aber nur selbst rausfinden.

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


Lesenswert?

Jan M. schrieb:
> Einen Arduino Uno.

Bitte Teil zwei der Frage auch beantworten.  Ich mag jetzt ungern
für dich raussuchen, ob da nun ein FTDI drauf ist oder ein
USB-AVR oder was auch immer.

von noreply@noreply.com (Gast)


Lesenswert?

Jörg W. schrieb:

> noreply@noreply.com schrieb:
>> Was ist loop0?
>
> Irgendein Block-Gerätetreiber.  Hat zwar eine wunderhübsche
> Kurzgeschichte über die Versionen und ihre Editierungen im Kopf
> der Implementierungsdatei stehen, aber kein Sterbenswörtchen, wofür
> er denn eigentlich gut wäre – und eine man page gibt's natürlich
> auch nicht.
>

Das ist die optimistische Version. In der pessimistischen Version wurde 
ein Kommando irgendwo gekupfert, um ein /dev/ttyACM0 als Device zu 
haben, an das avrdude senden kann.

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


Lesenswert?

noreply@noreply.com schrieb:
> Das ist die optimistische Version.

Nö, /dev/loop0 gibt's auch sonst auf Linuxen, das ist schon ganz
real.

von Oppa (Gast)


Lesenswert?

Lösche mal spaßeshalber den ACM0, ist eh nicht richtig so. Dann nochmal 
neu starten - den Arduino einstöpseln und dann die Arduino IDE.

Was sagt denn lsusb wenn der Arduino verbunden ist ?

von Oppa (Gast)


Lesenswert?

Ich meine der UNO war noch FTDI, ich gucke mal ob ich meinen schnell 
finde.

von Jan M. (pietus3)


Lesenswert?

Es ist FTDI bei mir.

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


Lesenswert?

Oppa schrieb:
> Ich meine der UNO war noch FTDI, ich gucke mal ob ich meinen schnell
> finde.

Hast schon recht: ein lsusb würde auch genügen, und der Tipp, den
Symlink mal zu löschen und das Gerät neu zu stöpseln, ist auch nicht
so verkehrt.  Ich hätte ja gedacht, dass das udev-Framework das selbst
tut, scheint aber nicht der Fall zu sein.

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


Lesenswert?

Jan M. schrieb:
> Es ist FTDI bei mir.

Dann muss es aber /dev/ttyUSB<n> heißen, mit <n> als bei 0 beginnender
Zählung für die Anzahl der entsprechenden Geräte im System.

ttyACM<n> wird nur für CDC (Communication Device Class) benutzt.

von Oppa (Gast)


Lesenswert?

Falsch gemeint: ATMEGA 16U2-MU(R)

von noreply@noreply.com (Gast)


Lesenswert?

Jörg W. schrieb:
> noreply@noreply.com schrieb:
>> Das ist die optimistische Version.
>
> Nö, /dev/loop0 gibt's auch sonst auf Linuxen, das ist schon ganz
> real.

Ich habe nur /dev/loop-control. ;-)

Für /dev/loop0 muß der root schon gearbeitet haben.

von Jan M. (pietus3)


Lesenswert?

Gibt es einen Befehl mit dem man solche Verknüpfungen löschen kann?

Also sämtliche ttyACM* sind bei mir zu etwas verknüpft.

von Oppa (Gast)


Lesenswert?

Jörg W. schrieb:
> dass das udev-Framework das selbst
> tut, scheint aber nicht der Fall zu sein.

Aha, meiner ist Rev3.

Tja, tut udev überhaupt noch. Hat das nicht inzwischen auch Systemd in 
den Händen ?

von Einer K. (Gast)


Lesenswert?

Oppa schrieb:
> Ich meine der UNO war noch FTDI,

Uno R1 hat einen 8U2
R3 einen 16U2
China UNOs öfter mal einen CH340

Andere, z.B. mit FTDI sind mir noch nicht unter gekommen.
Mag es aber geben....

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


Lesenswert?

Jan M. schrieb:
> Gibt es einen Befehl mit dem man solche Verknüpfungen löschen kann?

rm

von Oppa (Gast)


Lesenswert?

Linux is eint Unix - alles ist eine Datei.

sudo rm /dev/ttyACM0

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


Lesenswert?

Arduino F. schrieb:
> Oppa schrieb:
>> Ich meine der UNO war noch FTDI,
>
> Uno R1 hat einen 8U2
> R3 einen 16U2

Dann dürfte es wohl in der Tat ein /dev/ttyACM0 sein.

Wie schon gesagt, lsusb könnte da etwas Klarheit bringen, und auch
der Blick nach /var/log/syslog (direkt nach dem Anstöpseln), denn
dort sollte sowas stehen wie:
1
Aug 12 17:13:08 mani kernel: [3640226.651862] cdc_acm 2-1.6.1.3:1.1: ttyACM0: USB ACM device

oder halt beim FTDI:
1
Aug 12 17:21:26 mani kernel: [3640725.021049] usb 2-1.6.7.3: FTDI USB Serial Device converter now attached to ttyUSB0

von noreply@noreply.com (Gast)


Lesenswert?

Teil abstecken.



tail -f /var/log/messages

3x Return eingeben

Teil anstecken.

Ergebnisse posten.

von Jan M. (pietus3)


Lesenswert?

Also erstmal vielen Dank an alle. Nun funktioniert es.

Sollte ich sämtliche ttyACM* löschen? Um die Verknüpfungen zu löschen ?


Und kann mir jmd Tipps geben, wo ich über solche Themen mehr nachlesen 
kann um zu lernen.

Pietus3

von Jan M. (pietus3)


Lesenswert?

noreply@noreply.com schrieb:
> tail -f /var/log/messages

Dieses Verzeichnis wird nicht gefunden

von Oppa (Gast)


Lesenswert?

Jan M. schrieb:
> Dieses Verzeichnis wird nicht gefunden
Yep, schöne Grüße von Systemd. plain text logfiles sind soo 90er :)

>Und kann mir jmd Tipps geben, wo ich über solche Themen mehr nachlesen
>kann um zu lernen.
http://openbook.rheinwerk-verlag.de/linux/

Wird Dich aber ein paar Jahre beschäftigen :) Zu udev bin auch über den 
Arduino gekommen.

von Oppa (Gast)


Lesenswert?

Hmm, so langsam vermisse ich das edit.

Es wird dann an dem falschen Link gelegen haben. udevd wollte das device 
anlegen aber da war ja schon eines.

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


Lesenswert?

Jan M. schrieb:
> Also erstmal vielen Dank an alle. Nun funktioniert es.

Schön.

> Sollte ich sämtliche ttyACM* löschen? Um die Verknüpfungen zu löschen ?

Wenn es ähnlich sinnloser Kram ist, ja.

Ein korrektes /dev/ttyACM* sieht irgendwie so aus:
1
crw-rw---- 1 root dialout 166, 0 Aug 12 17:13 /dev/ttyACM0

Die major number (166) könnte sich ggf. unterscheiden, sollte aber
für alle /dev/ttyACM* die gleiche sein.  Die minor number (direkt
dahinter) sollte mit der Ziffer nach /dev/ttyACM übereinstimmen.

> Und kann mir jmd Tipps geben, wo ich über solche Themen mehr nachlesen
> kann um zu lernen.

In Internetforen. :-)

Im Ernst: es gibt Dinge, die lernt man beim Betrieb eines Systems
nebenbei (so wie du gerade), danach merkt man sie sich einfach.

Jan M. schrieb:
>> tail -f /var/log/messages
>
> Dieses Verzeichnis wird nicht gefunden

Weil es, wie ich oben schon schrieb, bei vielen Linux-Distributionen
heute lieber als /var/log/syslog angelegt wird.  Ist halt eine Frage
der Konvention, dieser Name ist nicht in Stein gemeißelt, sondern
wird in der Konfiguration des syslog-Dämons festgelegt.

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


Lesenswert?

Oppa schrieb:
> Hmm, so langsam vermisse ich das edit.

Musst du dich halt anmelden und angemeldet posten.  Dann kannst du,
solange es noch keine Folgebeiträge gibt, deine eigenen Beiträge
editieren.

von noreply@noreply.com (Gast)


Lesenswert?

Jan M. schrieb:
> noreply@noreply.com schrieb:
>> tail -f /var/log/messages
>
> Dieses Verzeichnis wird nicht gefunden

Debian kennt /var/log/messages. Könnte eine Eigenheit von Linux Mint 
17.3 sein oder ich werde zu alt.

Loggings stehen in /var/log. /var/log/syslog habe ich auch. Stehen 
ähnliche Dinge drin. Im Prinzip plaudert der Kernel munter über Geräte, 
die an USB angeschlossen werden. Das nimmt man zum Fehlersuchen.

Aber jetzt geht es ja.

von Jan M. (pietus3)


Lesenswert?

Ja. Nur nachdem ich den Arduino einmal entferne und wieder anschließe 
ist wieder /dev/ttyACM0 wird mit loop verknüpft und muss dies erst 
wieder löschen. Das ist doch so nicht richtig oder?

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


Lesenswert?

Jan M. schrieb:
> Das ist doch so nicht richtig oder?

Ist es in der Tat nicht.

Dann wirst du dir wohl oder übel mal ansehen müssen, wer da den
udev-Dämon so verhunzt konfiguriert hat, dass er so einen Müll macht.

Die Konfigurationsdaten dafür liegen normalerweise in /etc/udev/rules.d/

von Jan M. (pietus3)


Lesenswert?

So danke. Dass ist auch jz gelöst. Vielen Dank noch einmal.

von Oppa (Gast)


Lesenswert?

noreply@noreply.com schrieb:
> Debian kennt /var/log/messages. Könnte eine Eigenheit von Linux Mint
> 17.3 sein oder ich werde zu alt.

Nee, nur Dein Debian. Gibt es hier auch nicht. siduction = Debian sid

von Oppa (Gast)


Lesenswert?

Jan M. schrieb:
> So danke. Dass ist auch jz gelöst. Vielen Dank noch einmal.

Und wer war nun der Übeltäter ? Wo kam der eigenartige link auf 
/dev/loop her ?

von noreply@noreply.com (Gast)


Lesenswert?

Oppa schrieb:
> noreply@noreply.com schrieb:
>> Debian kennt /var/log/messages. Könnte eine Eigenheit von Linux Mint
>> 17.3 sein oder ich werde zu alt.
>
> Nee, nur Dein Debian. Gibt es hier auch nicht. siduction = Debian sid

Danke. Ich bin bei stretch (testing). Vielleicht hat sich die Testcrew 
ja was gegönnt. ;-) Hatte vorher aber auch squeeze, wheezy und jessie 
und mir ist nie etwas aufgefallen.

von Kaj (Gast)


Lesenswert?

Seit es systemd gibt ist journalctl dein freund.

/var/log/messages gibt es nicht mehr.

Bei aktuellen Systemen (hier Arch Linux, Kernel 4.7) steht das alles 
unter
/var/log/journal/<kryptischer random name>/<genauso kryptischer 
dateiname>, anzusehen mit journalctl.

Als Beispiel:
1
journalctl | tail -n 20
Ihr solltet einen Filter mittels grep, tail oder was auch immer 
anwenden, denn journalctl gibt ohne weiteres erstmal alles aus, was seit 
dem allerersten starten des systems so gelogt wurde. Das fängt bei 
diesem PC hier beim 24.4.2016 um 18:34:24 Uhr an.
1
-- Logs begin at So 2016-04-24 18:34:24 CEST, end at Fr 2016-08-12 21:34:55 CEST. --

Und das ist schon ungefähr solange so, solange es systemd gibt ;)
Also ja, der ein oder andere hier wird einfach alt :P

(Ob systemd toll ist oder nicht, ist eine andere frage!)

von Norbert (Gast)


Lesenswert?

1
journalctl -n30 -f
 macht das Leben einfach.

von Norbert (Gast)


Lesenswert?

Kaj schrieb:
>... denn journalctl gibt ohne weiteres erstmal alles aus, was seit
> dem allerersten starten des systems so gelogt wurde.
1
journalctl -b
seit dem letzten Bootvorgang.

von noreply@noreply.com (Gast)


Lesenswert?

Kaj schrieb:
> Und das ist schon ungefähr solange so, solange es systemd gibt ;)
> Also ja, der ein oder andere hier wird einfach alt :P
>
> (Ob systemd toll ist oder nicht, ist eine andere frage!)

Yeah. Wird Zeit, das ihr meine Pension verdient. ;-)

Durch den Thread bin ich darauf aufmerksam geworden. Ein Haufen ewig 
Gestriger. :-)

https://devuan.org/

von Jan M. (pietus3)


Lesenswert?

Oppa schrieb:
> Und wer war nun der Übeltäter ? Wo kam der eigenartige link auf
> /dev/loop her ?

Ich bin mir nicht sicher. Ich hatte eine Rule selbst erstellt, wie sie 
auf der offiziellen Arduino Seite steht. Aber da Bestand schon die 
Verknüpfung. Habe diese unnötige Rule trotzdem gelöscht. Zudem habe ich 
sämtliche /ttyACM* gelöscht und gerebootet seit dem läuft es :)

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.