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

0

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

Für beide wird dieselbe (Art von) Konfiguration verwendet.
Für den 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 den Cobalt funktioniert alles wie gewünscht, aber nicht für den D4i.
Ich kann / dev / ttyUSB0 verwenden, aber nicht / dev / my_d4i.

Irgendwie scheint es (da bin ich mir nicht sicher), dass sie sich anders auf dem USB-Bus präsentieren. Siehe die Ausgabe von lsusb weiter unten.

Wenn mir jemand sagen kann, was diesen Unterschied verursacht und / oder wie ich ihn lösen kann, wäre ich sehr dankbar. (Warum wird beim Anschließen des d4i auch eine ttyUSB-dev-Datei erstellt?)

Nachfolgend finden Sie einige Informationen zu den Ergebnissen / Einstellungen.

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

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

dev-files nach dem verbinden von Cobalt

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

dev-files nach dem verbinden 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 Diagnostic
  bDeviceSubClass 1 Reprogrammierbare Diagnose
  bDeviceProtocol 1 USB2-Konformität
  bMaxPacketSize0 16
  idVendor 0x0471 Philips (oder NXP)
  idProduct 0x0888 Hantek DDS-3005 Arbitrary Waveform Generator
  bcdDevice 0.02
  iManufacturer 1 ATOMIC AQUATICS
  iProduct 2 COBALT
  iSerial 3 123456789ABCDEF
  bAnzahlKonfigurationen 1
  Konfigurationsdeskriptor:
    bLänge 9
    bDescriptorType 2
    Gesamtlänge 39
    bNumInterfaces 1
    bKonfigurationswert 1
    iConfiguration 4-Konsole
    bmAttributes 0xe0
      Selbstversorgt
      Remote Wakeup
    MaxPower 500mA
    Schnittstellendeskriptor:
      bLänge 9
      bDescriptorType 4
      bInterfaceNumber 0
      bAlternateSetting 0
      bAnzahlEndpunkte 3
      bInterfaceClass 220-Diagnose
      bInterfaceSubClass 160 
      bInterfaceProtocol 176 
      iInterface 0 
      Endpunkt-Deskriptor:
        bLänge 7
        bDescriptorType 5
        bEndpointAddress 0x81 EP 1 IN
        bmAttributes 2
          Übertragungsart Bulk
          Synchronisationstyp Keine
          Verwendungsart Daten
        wMaxPacketSize 0x0040 1x 64 Bytes
        bIntervall 0
      Endpunkt-Deskriptor:
        bLänge 7
        bDescriptorType 5
        bEndpointAddress 0x02 EP 2 OUT
        bmAttributes 2
          Übertragungsart Bulk
          Synchronisationstyp Keine
          Verwendungsart Daten
        wMaxPacketSize 0x0040 1x 64 Bytes
        bIntervall 0
      Endpunkt-Deskriptor:
        bLänge 7
        bDescriptorType 5
        bEndpointAddress 0x82 EP 2 IN
        bmAttributes 2
          Übertragungsart Bulk
          Synchronisationstyp Keine
          Verwendungsart Daten
        wMaxPacketSize 0x0040 1x 64 Bytes
        bIntervall 0
Gerätestatus: 0x0101
  Selbstversorgt

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

Gerät: ID 0403: 6001 FT232 USB-Serial (UART) IC von 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-Serial (UART) IC
  bcdDevice 6.00
  iManufacturer 1 Smartinterface
  iProduct 2 USB-serielles Kabel
  iSerial 3 DiYISDGK
  bAnzahlKonfigurationen 1
  Konfigurationsdeskriptor:
    bLänge 9
    bDescriptorType 2
    wTotalLength 32
    bNumInterfaces 1
    bKonfigurationswert 1
    iConfiguration 0 
    bmAttributes 0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower 500mA
    Schnittstellendeskriptor:
      bLänge 9
      bDescriptorType 4
      bInterfaceNumber 0
      bAlternateSetting 0
      bAnzahlEndpunkte 2
      bInterfaceClass 255 Herstellerspezifische Klasse
      bInterfaceSubClass 255 Herstellerspezifische Unterklasse
      bInterfaceProtocol 255 Herstellerspezifisches Protokoll
      iInterface 2 USB Serial Cable
      Endpunkt-Deskriptor:
        bLänge 7
        bDescriptorType 5
        bEndpointAddress 0x81 EP 1 IN
        bmAttributes 2
          Übertragungsart Bulk
          Synchronisationstyp Keine
          Verwendungsart Daten
        wMaxPacketSize 0x0040 1x 64 Bytes
        bIntervall 0
      Endpunkt-Deskriptor:
        bLänge 7
        bDescriptorType 5
        bEndpointAddress 0x02 EP 2 OUT
        bmAttributes 2
          Übertragungsart Bulk
          Synchronisationstyp Keine
          Verwendungsart Daten
        wMaxPacketSize 0x0040 1x 64 Bytes
        bIntervall 0
Gerätestatus: 0x0000
  (Bus Powered)

Protokollierung der Software (für was es sich lohnt)

Download von / dev / my_d4i starten
Starten des Threads 0
[0.000126] FEHLER: Ungeeignete Ioctl für Gerät (25) [in ../../src/serial_posix.c:308 (dc_serial_open)]
[0.000156] FEHLER: Der serielle Anschluss konnte nicht geöffnet werden. [in ../../src/suunto_d9.c:155 (suunto_d9_device_open)]
INFO: dc_deveice_open Fehlerwert von -6
Beenden des Threads% s% s (% s) heruntergeladene Tauchgänge können nicht geöffnet werden 0
Download von / dev / ttyUSB0 starten
Starten des Threads 0
INFO: dc_deveice_open Fehlerwert von 0
Beenden der heruntergeladenen Thread-Tauchgänge 0

Pjotr133
quelle
Sie verknüpfen das Raw-USB-Gerät anstelle des Tty-Geräts. Ich habe zuvor eine praktisch ähnliche Frage hier oder auf unix.stackexchange beantwortet, kann sie aber derzeit 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

Antworten:

0

Also gab dirkt einen Kommentar, der mich zum Nachdenken brachte, und ich überprüfte noch einmal einige Fakten. Mit udevadm monitor und anschließender Verbindung der Geräte habe ich folgendes bekommen:

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)

Damit habe ich erraten, dass die richtigen udev-Subsysteme sein sollten:

  • d4i -> tty
  • kobalt -> usb

Und wie dirkt schon sagte, benutze ATTRS anstelle von ATTR, um im gesamten Gerätepfad zu passen. Also habe ich die udev-Regeln geändert zu:

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

Nach dem Neustart von udev und dem erneuten Anschließen des Geräts habe ich:

ls -l / dev / tty_d4i

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

Und das hat funktioniert, wie ich wollte. Ich bin mir immer noch nicht hundertprozentig sicher, warum, aber das ist wohl mein begrenztes Wissen über Udev. Ich werde udev weiter untersuchen, aber im Moment scheint dies gelöst zu sein. Also danke dirkt für den Hinweis.

Als 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 entlang. Es wird für jedes Gerät gedruckt
gefunden, alle möglichen Attribute im Schlüsselformat udev rules.
Eine übereinstimmende Regel kann aus den Attributen des Geräts zusammengesetzt werden
und die Attribute von einem einzigen übergeordneten Gerät.

  Gerät '/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/ttyUSB0/tty/ttyUSB0' betrachten:
    KERNEL == "ttyUSB0"
    SUBSYSTEM == "tty"
    DRIVER == ""

  Übergeordnetes Gerät "/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/ttyUSB0" anzeigen:
    KERNELS == "ttyUSB0"
    SUBSYSTEMS == "usb-serial"
    DRIVERS == "ftdi_sio"
    ATTRS {latency_timer} == "16"
    ATTRS {port_number} == "0"

  Übergeordnetes Gerät "/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0" anzeigen:
    KERNELS == "3-7: 1.0"
    SUBSYSTEMS == "usb"
    DRIVERS == "ftdi_sio"
    ATTRS {authorized} == "1"
    ATTRS {bAlternateSetting} == "0"
    ATTRS {bInterfaceClass} == "ff"
    ATTRS {bInterfaceNumber} == "00"
    ATTRS {bInterfaceProtocol} == "ff"
    ATTRS {bInterfaceSubClass} == "ff"
    ATTRS {bNumEndpoints} == "02"
    ATTRS {interface} == "USB Serial Cable"
    ATTRS {supported_autosuspend} == "1"

  Übergeordnetes Gerät "/devices/pci0000:00/0000:00:14.0/usb3/3-7" anzeigen:
    KERNELS == "3-7"
    SUBSYSTEMS == "usb"
    Treiber == "usb"
    ATTRS {authorized} == "1"
    ATTRS {avoid_reset_quirk} == "0"
    ATTRS {bConfigurationValue} == "1"
    ATTRS {bDeviceClass} == "00"
    ATTRS {bDeviceProtocol} == "00"
    ATTRS {bDeviceSubClass} == "00"
    ATTRS {bMaxPacketSize0} == "8"
    ATTRS {bMaxPower} == "500mA"
    ATTRS {bNumConfigurations} == "1"
    ATTRS {bNumInterfaces} == "1"
    ATTRS {bcdDevice} == "0600"
    ATTRS {bmAttributes} == "a0"
    ATTRS {busnum} == "3"
    ATTRS {configuration} == ""
    ATTRS {devnum} == "14"
    ATTRS {devpath} == "7"
    ATTRS {idProduct} == "6001"
    ATTRS {idVendor} == "0403"
    ATTRS {ltm_capable} == "no"
    ATTRS {Hersteller} == "Smartinterface"
    ATTRS {maxchild} == "0"
    ATTRS {product} == "USB Serial Cable"
    ATTRS {quirks} == "0x0"
    ATTRS {removable} == "entfernbar"
    ATTRS {serial} == "DiYISDGK"
    ATTRS {speed} == "12"
    ATTRS {urbnum} == "15"
    ATTRS {version} == "2.00"

  Übergeordnetes Gerät '/devices/pci0000:00/0000:00:14.0/usb3' anzeigen:
    KERNELS == "usb3"
    SUBSYSTEMS == "usb"
    Treiber == "usb"
    ATTRS {authorized} == "1"
    ATTRS {authorized_default} == "1"
    ATTRS {avoid_reset_quirk} == "0"
    ATTRS {bConfigurationValue} == "1"
    ATTRS {bDeviceClass} == "09"
    ATTRS {bDeviceProtocol} == "01"
    ATTRS {bDeviceSubClass} == "00"
    ATTRS {bMaxPacketSize0} == "64"
    ATTRS {bMaxPower} == "0mA"
    ATTRS {bNumConfigurations} == "1"
    ATTRS {bNumInterfaces} == "1"
    ATTRS {bcdDevice} == "0415"
    ATTRS {bmAttributes} == "e0"
    ATTRS {busnum} == "3"
    ATTRS {configuration} == ""
    ATTRS {devnum} == "1"
    ATTRS {devpath} == "0"
    ATTRS {idProduct} == "0002"
    ATTRS {idVendor} == "1d6b"
    ATTRS {interface_authorized_default} == "1"
    ATTRS {ltm_capable} == "no"
    ATTRS {manufacturer} == "Linux 4.15.0-20-generic xhci-hcd"
    ATTRS {maxchild} == "15"
    ATTRS {product} == "xHCI Host Controller"
    ATTRS {quirks} == "0x0"
    ATTRS {removable} == "unbekannt"
    ATTRS {serial} == "0000: 00: 14.0"
    ATTRS {speed} == "480"
    ATTRS {urbnum} == "264"
    ATTRS {version} == "2.00"

  Übergeordnetes Gerät "/devices/pci0000:00/0000:00:14.0" anzeigen:
    KERNELS == "0000: 00: 14.0"
    SUBSYSTEMS == "pci"
    DRIVERS == "xhci_hcd"
    ATTRS {broken_parity_status} == "0"
    ATTRS {class} == "0x0c0330"
    ATTRS {consistent_dma_mask_bits} == "64"
    ATTRS {d3cold_allowed} == "1"
    ATTRS {dbc} == "deaktiviert"
    ATTRS {device} == "0x8d31"
    ATTRS {dma_mask_bits} == "64"
    ATTRS {driver_override} == "(null)"
    ATTRS {enable} == "1"
    ATTRS {irq} == "19"
    ATTRS {local_cpulist} == "0-11"
    ATTRS {local_cpus} == "fff"
    ATTRS {msi_bus} == "1"
    ATTRS {numa_node} == "0"
    ATTRS {Revision} == "0x05"
    ATTRS {subsystem_device} == "0x7a54"
    ATTRS {subsystem_vendor} == "0x1462"
    ATTRS {Vendor} == "0x8086"

  Betrachtet man das übergeordnete Gerät '/ devices / pci0000: 00':
    KERNELS == "pci0000: 00"
    SUBSYSTEMS == ""
    DRIVERS == ""
Pjotr133
quelle