Extra erstelltes / dev / ttyUSB blockiert die Verwendung der benutzerdefinierten udev-konfigurierten dev-Datei

378
Pjotr133

Ich bin Taucher und stolzer Besitzer von 2 Tauchcomputern. Diese beiden können an einen USB-Anschluss angeschlossen werden. Mit dem SubSurface-Tauchprotokoll von Linus kann ich Tauchprotokolle importieren. Eines ist ein Atomic Aquatics Cobalt und das andere ist ein Suunto D4i. Jetzt möchte ich für jeden von ihnen dev-Dateien mit udev erstellen, damit ich sie an jeden USB-Port anschließen kann und trotzdem dieselbe dev-Datei in der Protokollierungssoftware verwenden kann. (ZB / dev / my_cobalt und / dev / my_d4i)

Die gleiche (Art) Konfiguration wird für beide verwendet.
Für das D4i wird die Verwendung der dev-Datei durch ein automatisch erstelltes / dev / ttyUSB0 blockiert.
Für beide Tauchcomputer wird die dev-Datei erstellt und für Cobalt alles wie gewünscht, nicht aber für D4i.
Ich kann / dev / ttyUSB0 verwenden, aber nicht / dev / my_d4i.

Irgendwie scheint es (ich bin mir nicht sicher) auf einen Unterschied in der Art und Weise zurückzuführen, wie sie sich auf dem USB-Bus präsentieren. Siehe die Ausgabe von lsusb unten.

Wenn mir jemand sagen kann, was diesen Unterschied verursacht und / oder wie ich das lösen kann, würde ich das wirklich schätzen. (Warum wird beim Anschluss des d4i auch eine ttyUSB dev-Datei erstellt?)

Nachfolgend finden Sie einige Informationen zu Befunden / Einstellungen.

/etc/udev/rules.d/dive-computers.rules

# My Cobalt2 DiveComputer SUBSYSTEM=="usb", ATTR=="0471", ATTR=="0888", SYMLINK+="my_cobalt", GROUP="dialout", MODE="0660" # My Suunto D4i DiveComputer SUBSYSTEM=="usb", ATTR=="0403", ATTR=="6001", SYMLINK+="my_d4i", GROUP="dialout", MODE="0660" 

dev-Dateien nach dem Anschluss von Cobalt

lrwxrwxrwx 1 root root 15 mei 16 23:13 my_cobalt -> bus/usb/003/007 # no ttyUSB0 created 

dev-files nach dem Anschluss von d4i

lrwxrwxrwx 1 root root 15 mei 16 23:15 my_d4i -> bus/usb/003/009 crw-rw---- 1 root dialout 188, 0 mei 16 23:15 ttyUSB0 

lsusb -v -D / dev / bus / usb / 003/007 (Kobalt)

Gerät: ID 0471: 0888 Philips (oder NXP) Hantek DDS-3005 Arbitrary Waveform Generator Gerätebeschreibung: bLänge 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 220 Diagnose bDeviceSubClass 1 Umprogrammierbare Diagnose bDeviceProtocol 1 USB2-Konformität bMaxPacketSize0 16 idVendor 0x0471 Philips (oder NXP) idProduct 0x0888 Hantek DDS-3005 Generator für willkürliche Signale bcdDevice 0,02 iManufacturer 1 ATOMIC AQUATICS iProdukt 2 KOBALT iSerial 3 123456789ABCDEF bNumKonfigurationen 1 Konfigurationsbeschreibung: bLänge 9 bDescriptorType 2 wTotalLength 39 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 4 Konsole bmAttributes 0xe0 Selbstversorgt Remote Wakeup MaxPower 500mA Schnittstellendeskriptor: bLänge 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 3 bInterfaceClass 220 Diagnose bInterfaceSubClass 160  bInterfaceProtocol 176  iInterface 0  Endpunktbeschreibung: bLänge 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Übertragungsart Bulk Synchronisationstyp Keine Verwendungsart-Daten wMaxPacketSize 0x0040 1x 64 Byte bInterval 0 Endpunktbeschreibung: bLänge 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Übertragungsart Bulk Synchronisationstyp Keine Verwendungsart-Daten wMaxPacketSize 0x0040 1x 64 Byte bInterval 0 Endpunktbeschreibung: bLänge 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 2 Übertragungsart Bulk Synchronisationstyp Keine Verwendungsart-Daten wMaxPacketSize 0x0040 1x 64 Byte bInterval 0 Gerätestatus: 0x0101 Selbstversorgt 

lsusb -v -D / dev / bus / usb / 003/009 (D4i)

Gerät: ID 0403: 6001 USB-serielles (UART) IC der Future Technology Devices International, Ltd Gerätebeschreibung: bLänge 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (auf Schnittstellenebene definiert) bDeviceSubClass 0  bDeviceProtocol 0  bMaxPacketSize0 8 idVendor 0x0403 Future Technology Devices International, Ltd idProduct 0x6001 FT232 USB-Seriell (UART) IC bcdDevice 6.00 iManufacturer 1 Smartinterface iProduct 2 USB Serielles Kabel iSerial 3 DiYISDGK bNumKonfigurationen 1 Konfigurationsbeschreibung: bLänge 9 bDescriptorType 2 wTotalLength 32 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0  bmAttributes 0xa0 (Busbetrieben) Remote Wakeup MaxPower 500mA Schnittstellendeskriptor: bLänge 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 255 Herstellerspezifische Klasse bInterfaceSubClass 255 Herstellerspezifische Unterklasse bInterfaceProtocol 255 Herstellerspezifisches Protokoll iInterface 2 serielles USB-Kabel Endpunktbeschreibung: bLänge 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Übertragungsart Bulk Synchronisationstyp Keine Verwendungsart-Daten wMaxPacketSize 0x0040 1x 64 Byte bInterval 0 Endpunktbeschreibung: bLänge 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Übertragungsart Bulk Synchronisationstyp Keine Verwendungsart-Daten wMaxPacketSize 0x0040 1x 64 Byte bInterval 0 Gerätestatus: 0x0000 (Busbetrieben) 

Protokollierung der Software (für was es wert ist)

Der Download wird von / dev / my_d4i gestartet Den Thread starten 0 [0.000126] FEHLER: Unangemessener Ioctl für Gerät (25) [in ../../src/serial_posix.c:308 (dc_serial_open)] [0.000156] FEHLER: Fehler beim Öffnen der seriellen Schnittstelle. [in ../../src/suunto_d9.c:155 (suunto_d9_device_open)] INFO: dc_deveice_open Fehlerwert von -6 Fertigstellen des Threads% s% s (% s) -Divesage konnte nicht geöffnet werden 0 Starten des Downloads von / dev / ttyUSB0 Den Thread starten 0 INFO: dc_deveice_open Fehlerwert von 0 Beenden der Thread-Tauchgänge 0  
0
Sie verknüpfen das rohe USB-Gerät anstelle des tty-Geräts. Ich habe auf eine praktisch ähnliche Frage bereits hier oder auf unix.stackexchange geantwortet, kann sie aber jetzt nicht finden. Grundsätzlich müssen Sie die udev-Regel für das richtige Subsystem ändern und ATTRS anstelle von ATTR verwenden, um den gesamten Gerätepfad abzugleichen. Details in der Antwort, wenn ich es finden kann. dirkt vor 5 Jahren 0

1 Antwort auf die Frage

0
Pjotr133

Dirkt gab also einen Kommentar, der mich zum Nachdenken anregte, und ich überprüfte noch einmal einige Fakten. Mit udevadm monitor und anschließender Verbindung der Geräte erhielt ich Folgendes:

Kobalt :

KERNEL[25393.161856] add /devices/pci0000:00/0000:00:14.0/usb3/3-8 (usb) KERNEL[25393.165873] add /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0 (usb) KERNEL[25393.165941] bind /devices/pci0000:00/0000:00:14.0/usb3/3-8 (usb) UDEV [25393.183044] add /devices/pci0000:00/0000:00:14.0/usb3/3-8 (usb) UDEV [25393.185175] add /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0 (usb) UDEV [25393.186958] bind /devices/pci0000:00/0000:00:14.0/usb3/3-8 (usb) 

D4i

KERNEL[24333.615580] add /devices/pci0000:00/0000:00:14.0/usb3/3-8 (usb) KERNEL[24333.618406] add /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0 (usb) KERNEL[24333.618444] add /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0/ttyUSB0 (usb-serial) KERNEL[24333.618615] add /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0/ttyUSB0/tty/ttyUSB0 (tty) KERNEL[24333.618644] bind /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0/ttyUSB0 (usb-serial) KERNEL[24333.618685] bind /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0 (usb) KERNEL[24333.618729] bind /devices/pci0000:00/0000:00:14.0/usb3/3-8 (usb) UDEV [24333.637591] add /devices/pci0000:00/0000:00:14.0/usb3/3-8 (usb) UDEV [24333.639773] add /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0 (usb) UDEV [24333.641366] add /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0/ttyUSB0 (usb-serial) UDEV [24333.648159] add /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0/ttyUSB0/tty/ttyUSB0 (tty) UDEV [24333.648969] bind /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0/ttyUSB0 (usb-serial) UDEV [24333.649799] bind /devices/pci0000:00/0000:00:14.0/usb3/3-8/3-8:1.0 (usb) UDEV [24333.650906] bind /devices/pci0000:00/0000:00:14.0/usb3/3-8 (usb) 

Ich vermutete, dass die richtigen udev-Subsysteme sein sollten:

  • d4i -> tty
  • Kobalt -> usb

Und wie bereits erwähnt, verwenden Sie ATTRS anstelle von ATTR, um den gesamten Gerätepfad abzugleichen. Also änderte ich die udev-Regeln in:

# My Cobalt2 DiveComputer SUBSYSTEM=="usb", ATTR=="0471", ATTR=="0888", SYMLINK+="my_cobalt", GROUP="dialout", MODE="0660" # My Suunto D4i DiveComputer SUBSYSTEM=="tty", ATTRS=="0403", ATTRS=="6001", ATTRS=="DiYISDGK", SYMLINK+="my_d4i", GROUP="dialout", MODE="0660" 

Nach dem Neustart von udev und dem erneuten Verbinden des Geräts erhielt ich:

ls -l / dev / tty_d4i

lrwxrwxrwx 1 root root 7 mei 22 00:43 tty_d4i -> ttyUSB0 

Und das machte es so, wie ich wollte. Ich bin immer noch nicht zu 100% sicher warum, aber ich denke, das ist mein begrenztes Wissen über udev. Ich werde weiter nach udev recherchieren, aber vorerst scheint das gelöst zu sein. Also danke dirkt für den Hinweis.

Zur Referenz die Ausgabe von:

Sudo Udevadm Info -a -n / dev / ttyUSB0

Udevadm-Info beginnt mit dem vom devpath angegebenen Gerät und dann geht die Kette der übergeordneten Geräte hinauf. Es wird für jedes Gerät gedruckt gefunden, alle möglichen Attribute im Schlüsselformat der udev-Regeln. Eine übereinstimmende Regel kann aus den Attributen des Geräts bestehen und die Attribute von einem einzigen übergeordneten Gerät.  Blick auf Gerät '/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/ttyUSB0/tty/ttyUSB0': KERNEL == "ttyUSB0" SUBSYSTEM == "tty" FAHRER == ""  Blick auf das übergeordnete Gerät '/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/ttyUSB0': KERNELS == "ttyUSB0" SUBSYSTEMS == "usb-serial" FAHRER == "ftdi_sio" ATTRS == "16" ATTRS == "0"  Blick auf das übergeordnete Gerät '/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0': KERNELS == 3-7: 1,0 SUBSYSTEMS == "usb" FAHRER == "ftdi_sio" ATTRS == "1" ATTRS == "0" ATTRS == "ff" ATTRS == "00" ATTRS == "ff" ATTRS == "ff" ATTRS == "02" ATTRS == "Serielles USB-Kabel" ATTRS == "1"  beim übergeordneten Gerät '/devices/pci0000:00/0000:00:14.0/usb3/3-7' suchen: KERNELS == "3-7" SUBSYSTEMS == "usb" FAHRER == "usb" ATTRS == "1" ATTRS == "0" ATTRS == "1" ATTRS == "00" ATTRS == "00" ATTRS == "00" ATTRS == "8" ATTRS == "500mA" ATTRS == "1" ATTRS == "1" ATTRS == "0600" ATTRS == "a0" ATTRS == "3" ATTRS == "" ATTRS == "14" ATTRS == "7" ATTRS == "6001" ATTRS == "0403" ATTRS == "nein" ATTRS == "Smartinterface" ATTRS == "0" ATTRS == "Serielles USB-Kabel" ATTRS == "0x0" ATTRS == "entfernbar" ATTRS == "DiYISDGK" ATTRS == "12" ATTRS == "15" ATTRS == "2.00"  Blick auf das übergeordnete Gerät '/devices/pci0000:00/0000:00:14.0/usb3': KERNELS == "usb3" SUBSYSTEMS == "usb" FAHRER == "usb" ATTRS == "1" ATTRS == "1" ATTRS == "0" ATTRS == "1" ATTRS == "09" ATTRS == "01" ATTRS == "00" ATTRS == "64" ATTRS == "0mA" ATTRS == "1" ATTRS == "1" ATTRS == "0415" ATTRS == "e0" ATTRS == "3" ATTRS == "" ATTRS == "1" ATTRS == "0" ATTRS == "0002" ATTRS == "1d6b" ATTRS == "1" ATTRS == "nein" ATTRS == "Linux 4.15.0-20-generic xhci-hcd" ATTRS == "15" ATTRS == "xHCI Host Controller" ATTRS == "0x0" ATTRS == "unbekannt" ATTRS == "0000: 00: 14.0" ATTRS == "480" ATTRS == "264" ATTRS == "2.00"  Beim übergeordneten Gerät '/devices/pci0000:00/0000:00:14.0' suchen: KERNELS == "0000: 00: 14.0" SUBSYSTEMS == "pci" FAHRER == "xhci_hcd" ATTRS == "0" ATTRS == "0x0c0330" ATTRS == "64" ATTRS == "1" ATTRS == "deaktiviert" ATTRS == "0x8d31" ATTRS == "64" ATTRS == "(null)" ATTRS == "1" ATTRS == "19" ATTRS == "0-11" ATTRS == "fff" ATTRS == "1" ATTRS == "0" ATTRS == "0x05" ATTRS == "0x7a54" ATTRS == "0x1462" ATTRS == "0x8086"  Blick auf das übergeordnete Gerät '/ devices / pci0000: 00': KERNELS == "pci0000: 00" SUBSYSTEMS == "" FAHRER == ""