wie im Thema schon zu sehen: Ich verwende Ubuntu und stecke dort verschiedene Geräte per USB an, z.B. seriell zu USB-Wandler (FTDI). Jetzt wäre es schön, wenn ein bestimmtes Gerät beim Anstecken immer ttyUSB5 heissen könnte, damit ich das in den Anwendungsprogrammen fest so einstellen kann. Momentan heißt es mal ttyUSB0, mal ttyUSB1 und mal ttyACM0,1,2,3.. ich bin vom vielen Testen schon ganz durcheinander. Nun habe ich gegoogelt, und etwas von udev-Regeln gelesen, was mit etwas kompliziert vorkam. Ist das die richtige, und auch die einfachste Lösung, oder gibt es einfachere Alternativen, die ich übersehen habe? Wie macht Ihr das?
bastler schrieb: > Nun habe ich gegoogelt, und etwas von udev-Regeln gelesen, was mit etwas > kompliziert vorkam. Ist das die richtige, und auch die einfachste > Lösung ja, aber sinnvollerweise vergibt man dann nicht ttyUSB5 sondern einen sinnvollen Namen ( /dev/ttyMeinTollesGerät )
Peter II schrieb: > ja, aber sinnvollerweise vergibt man dann nicht ttyUSB5 sondern einen > sinnvollen Namen ( /dev/ttyMeinTollesGerät ) Da hätte ich Skrupel wegen des Umlauts.. :-) aber ok dann muss ich da wohl durch.
bastler schrieb: > Nun habe ich gegoogelt, und etwas von udev-Regeln gelesen, was mit etwas > kompliziert vorkam. Das ist eigentlich ganz simpel. Man sieht einmal mit lsusb -v nach mit welchen Informationen sich das Gerät am USB-Bus identifiziert. Man entscheidet sich für eine möglichst eindeutige Kombination dieser Daten. Gut ist z.B. eine Kombination aus idVendor, idProduct und serial. Allerdings haben Billig-Geräte häufig keine eindeutige Seriennummer, so dass man manchmal nur mit idVendor und idProduct auskommen muss. Damit ist die Regel schon fertig:
1 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="<VVVV>", ATTRS{idProduct}=="<PPPP>", ATTRS{serial}=="<SSSSSSSSSSSSS>", SYMLINK+="ttyMeinTollesGeraet" |
Den ATTRS{serial}== Teil weglassen wenn man keine eindeutige Seriennummer hat. <...> durch die mit lsusb -v gefundenen Werte ersetzen. > Ist das die richtige, und auch die einfachste > Lösung, Es ist die gängigste. Leider hat, soweit ich weiß, noch niemand eine einfache GUI zur Auswahl und Automatisierung des Vorgangs geschrieben. > oder gibt es einfachere Alternativen, die ich übersehen habe? Na ja, ich gehe meistens hin und schreibe meine Software so, dass ich in der Software die idVendor (die VID), idProduct (die PID) und ev. die Seriennummer eingeben kann. Bei spezieller Software für ein bestimmtes Gerät codiert ich die VID/PID sogar fest in der Software. Dann suche ich mit der libusb nach dem entsprechenden Gerät ohne das der User sich drum kümmern muss wie es unter /dev heißt. Früher habe ich auch schon mal sysfs nach der VID/PID durchsucht.
Hannes J. schrieb: > Dann suche ich > mit der libusb nach dem entsprechenden Gerät ohne das der User sich drum > kümmern muss wie es unter /dev heißt. Früher habe ich auch schon mal > sysfs nach der VID/PID durchsucht. dafür kann man auch libudev verwenden, da kann man sich alle geräte auflisten lassen oder bekommt sogar Events wenn welche erkannt werden. Bei meine Anwendung kann ich im Betrieb die Geräte anstecken.
jetzt bin ich etwas weiter: Ich habe diese Datei /etc/udev/rules.d/11-usb2serial.rules erstellt: #Serial to USB Adapter SUBSYSTEMS=="usb", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", NAME="ttyUsb2Serial", SYMLINK+="ttyUsb2Serial" Beim Einstecken sehe ich das im syslog: Jun 4 18:11:35 THINKPAD kernel: [769113.461725] usb 1-1.2: new full-speed USB device number 20 using ehci-pci Jun 4 18:11:35 THINKPAD kernel: [769113.555394] usb 1-1.2: New USB device found, idVendor=067b, idProduct=2303 Jun 4 18:11:35 THINKPAD kernel: [769113.555403] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 Jun 4 18:11:35 THINKPAD kernel: [769113.555409] usb 1-1.2: Product: USB-Serial Controller Jun 4 18:11:35 THINKPAD kernel: [769113.555413] usb 1-1.2: Manufacturer: Prolific Technology Inc. Jun 4 18:11:35 THINKPAD kernel: [769113.556405] pl2303 1-1.2:1.0: pl2303 converter detected Jun 4 18:11:35 THINKPAD systemd-udevd[15954]: NAME="ttyUsb2Serial" ignored, kernel device nodes can not be renamed; please fix it in /etc/udev/rules.d/11-usb2serial.rules:2 Jun 4 18:11:35 THINKPAD kernel: [769113.558804] usb 1-1.2: pl2303 converter now attached to ttyUSB0 Jun 4 18:11:35 THINKPAD mtp-probe: checking bus 1, device 20: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2" Jun 4 18:11:35 THINKPAD mtp-probe: bus: 1, device: 20 was not an MTP device Jun 4 18:11:36 THINKPAD systemd-udevd[15954]: NAME="ttyUsb2Serial" ignored, kernel device nodes can not be renamed; please fix it in /etc/udev/rules.d/11-usb2serial.rules:2 Es gibt nach dem Anstecken unter /dev einen Symlink mit dem richtigen Namen. Das "NAME=" habe ich eingefügt in der Hoffnung, dass ich dann z.B. in Arduino / serieller Port diesen Namen sehen kann (ttyUsb2Serial) - das ist aber nicht der Fall. Kann ich das erreichen / wie? Den Parameter "Kernel" hab ich nicht verstanden, evtl. brauche ich den nicht?
bastler schrieb: > Beim Einstecken sehe ich das im syslog: > > Jun 4 18:11:35 THINKPAD kernel: [769113.556405] pl2303 1-1.2:1.0: > pl2303 converter detected > > Das "NAME=" habe ich eingefügt in der Hoffnung, dass ich dann > z.B. in Arduino / serieller Port diesen Namen sehen kann (ttyUsb2Serial) > - das ist aber nicht der Fall. Kann ich das erreichen / wie? Der Kernel antwortet auf die Escape-Sequenz DA (Device Attributes) mit '\e[?64;1;2;6;9;15;18;21;22c' oder '\e[?6c'. Der Arduino müsste also '\e[c' senden und auf '\e'-irgendwas warten. Auf der Kommandozeile kann man das testen:
1 | echo -e -n '\e[c' |
Keine Ahnung, ob das auch über ein ttyUSB funktioniert.
eagle user schrieb: > Der Arduino müsste also > '\e[c' senden und auf '\e'-irgendwas warten. Ich meinte nicht ein angeschlossenes Gerät, sondern in der Arduino IDE kann man unter Tools / serieller Port den Port auswählen, den man benutzen will - in dieser Auflistung tauchen nur die Geräte ttyUSB.. auf, aber nicht mein ttyUsb2serial..
bastler schrieb: > NAME="ttyUsb2Serial" > ignored, kernel device nodes can not be renamed; please fix it in > /etc/udev/rules.d/11-usb2serial.rules:2 Kernel ist kein Parameter, sondern das Betriebssystem Die Meldung bedeutet du sollst den Parameter NAME="" weg lassen (woher hast du den überhaupt?), da du vom Kernel vergebene Namen nicht ändern kannst. Dafür gibt es ja SYMLINK.
T.roll schrieb: > woher > hast du den überhaupt? von hier: https://ubuntuforums.org/showthread.php?t=168221 T.roll schrieb: > Kernel ist kein Parameter, sondern das Betriebssystem glaub ich nicht, wenn man den Link oben liest T.roll schrieb: > da du vom Kernel vergebene Namen nicht ändern > kannst. Dafür gibt es ja SYMLINK. das heißt mit udev kann ich überhaupt NUR symlinks erstellen? Ich möchte halt gerne erreichen, dass der Kernel nicht "ttyUSB0" draus macht, sondern "ttyUsb2Serial"
bastler schrieb: > Es gibt nach dem Anstecken unter /dev einen Symlink mit dem > richtigen Namen. Nur erscheint der nicht automatisch im IDE-Fenster. Vielleicht muss man die Liste manuell aktualisieren, zur Not mit IDE-Neustart. Aber: > Jetzt wäre es schön, wenn ein bestimmtes Gerät beim Anstecken immer > ttyUSB5 heissen könnte, damit ich das in den Anwendungsprogrammen > fest so einstellen kann. Vielleicht kannst du "/dev/ttyUsb2Serial" irgendwo eintragen, auch wenn es nicht angezeigt wird. Nachdem der Name jetzt fest ist, sollte das doch ausreichen. > das heißt mit udev kann ich überhaupt NUR symlinks erstellen? Sieht so aus; die udev-Warnung wurde 2012 eingebaut, ungefähr seitdem dürfte NAME= nicht mehr funktionieren -- der Beitrag im ubuntuforum ist von 2006. > Ich möchte halt gerne erreichen, dass der Kernel nicht "ttyUSB0" > draus macht, sondern "ttyUsb2Serial" Das dürfte sehr schwierig sein, es ist einfach nicht vorgesehen. Die offizielle Lösung ist der Symlink. Und normalerweise kann ein Programm den Symlink genauso wie das "echte" /dev/ttyUSB benutzen. Es merkt dabei keinen Unterschied wenn es nicht gezielt nachforscht. Die automatische Anzeige beim Einstecken ist allerdings nicht so einfach.
eagle user schrieb: > Die > offizielle Lösung ist der Symlink. ich habe ein wenig getestet - der VMWare-Player z.B. kommt mit den Symlinks wunderbar zurecht (also die funktionieren auch). Meine Arduino IDE ist ja schon aus dem letzten Jahr und damit evtl. etwas alt. Ich komme damit zurecht - danke an alle.
ich habe übrigens (noch nicht getestet) auch eine Lösung für Arduino gefunden - da muss man erst mal drauf kommen: https://forum.arduino.cc/index.php?topic=387200.0
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.