串列 USB 未顯示(Udev 故障排除)
我正在嘗試為基於 USBtiny 的 AVR 程序員編寫 udev 規則。在其他非 Gentoo 系統上,USB 設備將顯示在
/dev/ttyUSB0
. 我希望它在我的系統上顯示為類似的東西,可能/dev/ttyACM0
或類似的東西。我相信我的核心配置正確,因為我可以插入 USB 轉串口轉換器,它顯示為
/dev/ttyUSB0
.這是一個安裝了 eudev 的非常最新的 Gentoo openrc 系統。
執行“udevadm monitor”時,我可以看到插入設備時發生以下情況:
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)
我抓住“/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1”並檢查了資訊:
% 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==""
看來,以下 udev 規則將起作用:
# /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"
這與我在網際網路上其他地方看到的其他人相同。一個區別是 idVendor 似乎是一個 ATTRS,但它不是來自“udevadm info”輸出的父節點屬性。
我重新載入規則的過程是執行“udevadm control -R”。我也嘗試重新啟動 udev “/etc/init.d/udev restart” 並重新啟動。該設備永遠不會在 /dev/ 下創建條目。在沒有 udev 規則的“SYMLINK”部分的情況下,我也嘗試了上述所有方法。
我可以看到帶有 lsusb 的設備:
% 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
我知道核心也可以通過 dmesg 的尾部看到它:
[ 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
有沒有人有任何其他故障排除提示?就像我說的,我將 USB 串列轉換器註冊為 /dev/ 下的設備,我可以在“udevadm 監視器”輸出中看到它。我覺得我錯過了一些小東西,幾天來我一直在努力解決這個問題。任何指針將不勝感激。
我的核心中還內置了所有串列 USB 驅動程序:
--- 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
我在這裡查看了其他一些問題,我真的很摸不著頭腦,因為我什至無法讓符號連結出現在
/dev/
.我為此經歷的主要資源是:
並非所有 USB 設備都顯示為類似串列埠的設備。特別是,USBtinyISP 根本不模擬串列埠,而是通過
libusb
使用本機 USB 通信進行訪問。我也有來自 Adafruit 的 USBtinyISP,其 USB 供應商和產品 ID 與您的完全相同,分別為 0x1781 和 0x0c9f。它既不會產生
/dev/ttyUSB*
也不產生/dev/ttyACM*
設備,但avrdude
會與它正常通信。Bus 001 Device 006: ID 1781:0c9f Multiple Vendors USBtiny
在您的情況下,已在匯流排 1、設備 6 上檢測到 USBtinyISP,因此用於
libusb
與設備通信的設備節點將是/dev/bus/usb/001/006
. 您的 udev 規則可能已經應用於該設備。此外,至少在 Debian 上,該
avrdude
軟體包已經包含一個 udev 規則文件。它將/lib/udev/rules.d/60-avrdude.rules
像任何系統預設的 udev 規則文件一樣安裝到,/etc/udev/rules.d
僅用於本地自定義/覆蓋。該文件已經涵蓋了 USBtinyISP。要告訴
avrdude
預設使用 USBtinyISP,您可能需要~/.avrduderc
為自己創建一個文件,其中包含以下行:default_programmer = "usbtiny";
這將消除在每個
avrdude
命令行指定程序員類型的要求。