Serieller USB-Anschluss wird nicht angezeigt (Udev-Fehlerbehebung)

Serieller USB-Anschluss wird nicht angezeigt (Udev-Fehlerbehebung)

Ich versuche, eine Udev-Regel für meinen USBtiny-basierten AVR-Programmierer zu schreiben. Auf anderen Nicht-Gentoo-Systemen wird das USB-Gerät unter angezeigt /dev/ttyUSB0. Ich erwarte, dass es auf meinem System möglicherweise als etwas Ähnliches oder so angezeigt wird /dev/ttyACM0.

Ich gehe davon aus, dass mein Kernel richtig konfiguriert ist, da ich einen USB-zu-Seriell-Konverter anschließen kann und er als angezeigt wird /dev/ttyUSB0.

Dies ist ein ziemlich aktuelles Gentoo-OpenRC-System mit installiertem Eudev.

Wenn ich „udevadm monitor“ ausführe, kann ich sehen, dass Folgendes passiert, wenn ich das Gerät anschließe:

KERNEL[1859.422447] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1 (usb)
KERNEL[1859.422777] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0 (usb)
KERNEL[1859.423050] bind     /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1 (usb)
UDEV  [1859.990399] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1 (usb)
UDEV  [1859.991792] add      /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0 (usb)
UDEV  [1859.996016] bind     /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1 (usb)

Ich habe mir "/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1" geschnappt und die Informationen überprüft:

% udevadm info -a -p /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1                                   

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1':
    KERNEL=="1-1.1"
    SUBSYSTEM=="usb"
    DRIVER=="usb"
    ATTR{configuration}==""
    ATTR{bMaxPacketSize0}=="8"
    ATTR{bDeviceClass}=="ff"
    ATTR{bcdDevice}=="0105"
    ATTR{bNumInterfaces}==" 1"
    ATTR{bConfigurationValue}=="1"
    ATTR{manufacturer}=="Adafruit"
    ATTR{bNumConfigurations}=="1"
    ATTR{authorized}=="1"
    ATTR{speed}=="1.5"
    ATTR{idProduct}=="0c9f"
    ATTR{urbnum}=="9"
    ATTR{devnum}=="6"
    ATTR{product}=="USBtiny"
    ATTR{maxchild}=="0"
    ATTR{bmAttributes}=="80"
    ATTR{bDeviceSubClass}=="00"
    ATTR{bMaxPower}=="100mA"
    ATTR{rx_lanes}=="1"
    ATTR{removable}=="removable"
    ATTR{idVendor}=="1781"
    ATTR{version}==" 1.10"
    ATTR{avoid_reset_quirk}=="0"
    ATTR{bDeviceProtocol}=="00"
    ATTR{tx_lanes}=="1"
    ATTR{ltm_capable}=="no"
    ATTR{devpath}=="1.1"
    ATTR{busnum}=="1"
    ATTR{quirks}=="0x0"

  looking at parent device '/devices/pci0000:00/0000:00:1a.0/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bcdDevice}=="0000"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{authorized}=="1"
    ATTRS{speed}=="480"
    ATTRS{idProduct}=="0020"
    ATTRS{urbnum}=="193"
    ATTRS{devnum}=="2"
    ATTRS{maxchild}=="6"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{rx_lanes}=="1"
    ATTRS{removable}=="fixed"
    ATTRS{idVendor}=="8087"
    ATTRS{version}==" 2.00"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{tx_lanes}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{devpath}=="1"
    ATTRS{busnum}=="1"
    ATTRS{quirks}=="0x0"

  looking at parent device '/devices/pci0000:00/0000:00:1a.0/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bcdDevice}=="0505"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{manufacturer}=="Linux 5.5.1-gentoo ehci_hcd"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{authorized}=="1"
    ATTRS{speed}=="480"
    ATTRS{idProduct}=="0002"
    ATTRS{urbnum}=="134"
    ATTRS{devnum}=="1"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{maxchild}=="3"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{rx_lanes}=="1"
    ATTRS{removable}=="unknown"
    ATTRS{idVendor}=="1d6b"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{serial}=="0000:00:1a.0"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{tx_lanes}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{devpath}=="0"
    ATTRS{busnum}=="1"
    ATTRS{quirks}=="0x0"

  looking at parent device '/devices/pci0000:00/0000:00:1a.0':
    KERNELS=="0000:00:1a.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci-pci"
    ATTRS{broken_parity_status}=="0"
    ATTRS{subsystem_device}=="0x2163"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{vendor}=="0x8086"
    ATTRS{local_cpus}=="f"
    ATTRS{companion}==""
    ATTRS{class}=="0x0c0320"
    ATTRS{numa_node}=="-1"
    ATTRS{msi_bus}=="1"
    ATTRS{device}=="0x3b3c"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{driver_override}=="(null)"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{irq}=="23"
    ATTRS{revision}=="0x06"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{ari_enabled}=="0"
    ATTRS{uframe_periodic_max}=="100"
    ATTRS{enable}=="1"
    ATTRS{subsystem_vendor}=="0x17aa"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

Es scheint, dass die folgende Udev-Regel funktionieren würde:

# /etc/udev/rules.d/99-usbtiny.rules
SUBSYSTEM=="usb", ATTR{manufacturer}=="Adafruit", ATTR{product}=="USBtiny", ATTR{idProduct}=="0c9f", ATTR{idVendor}=="1781", MODE="0660", GROUP="plugdev", SYMLINK+="usbtiny%n"

Es ist dasselbe wie andere, die ich anderswo im Internet gesehen habe. Ein Unterschied besteht darin, dass der idVendor ein ATTRS zu sein scheint, aber kein übergeordnetes Knotenattribut aus der Ausgabe „udevadm info“ ist.

Mein Verfahren zum Neuladen der Regeln bestand darin, „udevadm control -R“ auszuführen. Ich habe auch versucht, udev „/etc/init.d/udev restart“ neu zu starten und einfach neu zu starten. Das Gerät erstellt nie einen Eintrag unter /dev/. Ich habe all das oben Genannte auch ohne den „SYMLINK“-Teil der udev-Regel versucht.

Ich kann das Gerät mit lsusb sehen:

 % lsusb                                                                                                             
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 006: ID 1781:0c9f Multiple Vendors USBtiny

Ich weiß, dass der Kernel es mit dem Ende von dmesg auch sieht:

[ 1859.351137] usb 1-1.1: new low-speed USB device number 6 using ehci-pci
[ 1859.440168] usb 1-1.1: New USB device found, idVendor=1781, idProduct=0c9f, bcdDevice= 1.05
[ 1859.440172] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1859.440175] usb 1-1.1: Product: USBtiny
[ 1859.440177] usb 1-1.1: Manufacturer: Adafruit

Hat jemand noch andere Tipps zur Fehlerbehebung? Wie gesagt, mein USB-Seriell-Konverter ist als Gerät unter /dev/ registriert und ich kann ihn in der Ausgabe von „udevadm monitor“ problemlos sehen. Ich habe das Gefühl, dass ich etwas Kleines übersehe und zerbreche mir schon seit ein paar Tagen den Kopf darüber. Ich bin für jeden Hinweis dankbar.

Ich habe auch alle seriellen USB-Treiber in meinen Kernel integriert:

  --- USB Serial Converter support
[*]   USB Serial Console device support
[*]   USB Generic Serial Driver
<*>   USB Serial Simple Driver
<*>   USB AIRcable Bluetooth Dongle Driver
<*>   USB ARK Micro 3116 USB Serial Driver
<*>   USB Belkin and Peracom Single Port Serial Driver
<*>   USB Winchiphead CH341 Single Port Serial Driver
<*>   USB ConnectTech WhiteHEAT Serial Driver
<*>   USB Digi International AccelePort USB Serial Driver
<*>   USB CP210x family of UART Bridge Controllers
<*>   USB Cypress M8 USB Serial Driver
<*>   USB Empeg empeg-car Mark I/II Driver
<*>   USB FTDI Single Port Serial Driver
<*>   USB Handspring Visor / Palm m50x / Sony Clie Driver
<*>   USB PocketPC PDA Driver
<*>   USB IR Dongle Serial Driver
<*>   USB Inside Out Edgeport Serial Driver
<*>   USB Inside Out Edgeport Serial Driver (TI device
<*>   USB Fintek F81232 Single Port Serial Driver
<*>   USB Fintek F81532/534 Multi-Ports Serial Driver
<*>   USB Garmin GPS driver
<*>   USB IPWireless (3G UMTS TDD) Driver
<*>   USB Infinity USB Unlimited Phoenix Driver
<*>   USB Keyspan PDA Single Port Serial Driver
<*>   USB Keyspan USA-xxx Serial Driver
<*>   USB KL5KUSB105 (Palmconnect) Driver
<*>   USB KOBIL chipcard reader
<*>   USB MCT Single Port Serial Driver
<*>   USB Metrologic Instruments USB-POS Barcode Scanner Driver
<*>   USB Moschip 7720 Serial Driver
<*>   USB Moschip 7840/7820 USB Serial Driver
<*>   USB Moxa UPORT Serial Driver
<*>   USB Navman GPS device
<*>   USB Prolific 2303 Single Port Serial Driver
<*>   USB Ours Technology Inc. OTi-6858 USB To RS232 Bridge Controller
<*>   USB Qualcomm Auxiliary Serial Port Driver
<*>   USB Qualcomm Serial modem
<*>   USB SPCP8x5 USB To Serial Driver
<*>   USB Safe Serial (Encapsulated) Driver
  [ ]     USB Secure Encapsulated Driver - Padded
<*>   USB Sierra Wireless Driver
<*>   USB Symbol Barcode driver (serial mode
<*>   USB TI 3410/5052 Serial Driver
<*>   USB REINER SCT cyberJack pinpad/e-com chipcard reader
<*>   USB Xircom / Entrega Single Port Serial Driver
<*>   USB driver for GSM and CDMA modems
<*>   USB ZyXEL omni.net LCD Plus Driver
<*>   USB Opticon Barcode driver (serial mode)
<*>   Xsens motion tracker serial interface driver
<*>   USB-Wishbone adapter interface driver
<*>   USB Quatech SSU-100 Single Port Serial Driver
<*>   USB Quatech Serial Driver for USB 2 devices
<*>   USB Renesas uPD78F0730 Single Port Serial Driver
<*>   USB Debugging Device

Ich habe mir hier noch ein paar andere Fragen angesehen und bin wirklich ratlos, weil ich es nicht einmal schaffe, den symbolischen Link in anzuzeigen /dev/.

Die wichtigsten Ressourcen, die ich hierfür durchgesehen habe, sind:

Antwort1

Nicht alle USB-Geräte werden als serielle Port-ähnliche Geräte dargestellt. Insbesondere emuliert USBtinyISP überhaupt keinen seriellen Port, sondern der Zugriff erfolgt über libusbnative USB-Kommunikation.

Ich habe auch USBtinyISP von Adafruit, mit genau denselben USB-Hersteller- und Produkt-IDs wie Ihres, 0x1781 bzw. 0x0c9f. Es erzeugt weder /dev/ttyUSB*noch /dev/ttyACM*ein Gerät, avrdudekommuniziert aber trotzdem problemlos damit.

Bus 001 Device 006: ID 1781:0c9f Multiple Vendors USBtiny

In Ihrem Fall wurde der USBtinyISP an Bus 1, Gerät 6 erkannt, daher wird der Geräteknoten, der libusbzur Kommunikation mit dem Gerät verwendet wird, sein /dev/bus/usb/001/006. Ihre Udev-Regeln werden möglicherweise bereits auf dieses Gerät angewendet.

Außerdem enthält das Paket zumindest unter Debian bereits eine Udev-Regeldatei. Sie wird wie alle systemeigenen Udev-Regeldateien avrdudeinstalliert und ermöglicht nur lokale Anpassungen/Überschreibungen. Diese Datei deckt bereits USBtinyISP ab./lib/udev/rules.d/60-avrdude.rules/etc/udev/rules.d

Um avrdudeUSBtinyISP standardmäßig zu verwenden, können Sie eine ~/.avrduderceigene Datei erstellen, die folgende Zeile enthält:

default_programmer = "usbtiny";

Dadurch entfällt die Anforderung, den Programmierertyp in jeder einzelnen avrdudeBefehlszeile anzugeben.

Antwort2

Sie erwähnen ATTR{idVendor}und ähnliches. Sollte das heißen ATTRS{...}? Ich habe auch festgestellt, dass minimale Regeln besser sind.

Beispielsweise habe ich Folgendes auf meinem Debian-System:

% cat /etc/udev/rules.d/ols.rules               
#Rules for Openbench Logix Snifferslogic. Creates a nice link to the ols
ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="fc92", MODE="0666", SYMLINK+="OpenLogicSniffer"

Also würde ich versuchen:

ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c9f", MODE="0660", GROUP="plugdev", SYMLINK+="usbtiny%n"

Antwort3

Ich denke, Sie sollten MODE="0666" statt MODE="0660" verwenden.

verwandte Informationen