USB 串行适配器未创建 /dev/ttyUSB 路径来寻址设备

USB 串行适配器未创建 /dev/ttyUSB 路径来寻址设备

我在我的笔记本电脑上使用 Ubuntu 18.10 x64,在另一台机器上使用 17.10 x64。以下信息来自 18.10 笔记本电脑,但两者都有同样的问题。

我已将一个 USB 转串行板(中国 TI SmartRF04EB 克隆版,使用与 Silicon Labs C8051F320 MCU 相当的器件来提供 USB 接口)连接到 Chipcon 8051 开发板,但并未创建 /dev/ttyUSB0 等,我需要通过 moserial 终端等向开发板发出调试命令。

您能否解释一下为什么 /dev/ttyUSB 条目没有自动创建,以及如何确保它能够自动创建?

提前致谢。

背景

我可以从 VirtualBox 中的 Windows VM 连接并读取开发板上的寄存器,但不能从主机连接。Chipcon 设备是 USB-Serial 适配器板,因为如果 8051 开发板断开连接,我会得到相同的结果。

MacBookPro:~$ lsusb
Bus 001 Device 012: ID 11a0:eb20 Chipcon AS

Dmesg 显示该设备已被识别:

MacBookPro:~$ dmesg | grep 1-1.1:
[ 1989.355072] usb 1-1.1: new full-speed USB device number 12 using xhci_hcd
[ 1989.468502] usb 1-1.1: New USB device found, idVendor=11a0, idProduct=eb20, bcdDevice= 0.50
[ 1989.468505] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1989.468506] usb 1-1.1: Product: SmartRF04EB
[ 1989.468508] usb 1-1.1: Manufacturer: Chipcon AS
[ 2006.115847] usb 1-1.1: reset full-speed USB device number 12 using xhci_hcd
[ 2036.516953] usb 1-1.1: reset full-speed USB device number 12 using xhci_hcd
[ 2058.765773] usb 1-1.1: reset full-speed USB device number 12 using xhci_hcd
[ 2105.307403] usb 1-1.1: reset full-speed USB device number 12 using xhci_hcd
[ 4370.664093] usb 1-1.1: reset full-speed USB device number 12 using xhci_hcd
[64333.681207] usb 1-1.1: reset full-speed USB device number 12 using xhci_hcd

但是没有 /dev/ttyUSB 条目,也没有 /dev/ 或 /dev/usb/ 下的任何其他条目:

MacBookPro:~$ ls /dev/ttyUSB*
ls: cannot access '/dev/ttyUSB*': No such file or directory

设备插入后,会在 /dev/vboxusb/001/012 处创建一个条目,允许 Windows VM 与该设备通信。重新连接时,编号会发生变化,但不会影响 VM。

usb-devices 列出的驱动程序为无:

MacBookPro:~$ usb-devices
...
T:  Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 12 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=11a0 ProdID=eb20 Rev=00.50
S:  Manufacturer=Chipcon AS
S:  Product=SmartRF04EB
C:  #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)

在其他地方建议的一个简单的 Udev 规则并没有什么区别:

MacBookPro:~$ cat /etc/udev/rules.d/99-usb-serial.rules
# SmartRF05 Evaluation Board
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a0", MODE="0666"

# SmartRF04 Evaluation Board
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="11a0", ATTRS{idProduct}=="db20", MODE="0666"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="11a0", ATTRS{idProduct}=="eb20", MODE="0666"

# CC Debugger
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="16a2", MODE="0666"

我将自己添加到了 tty 和 dialout 组,但没有效果。

运行 udevadm:

MacBookPro:~$ sudo udevadm test -a -p $(udevadm info -a udevadm info -q path -n /dev/bus/usb/001/012)
calling: test
version 239
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

Load module index
Parsed configuration file /lib/systemd/network/99-default.link
Created link configuration context.
Reading rules file: /lib/udev/rules.d/39-usbmuxd.rules
...
Reading rules file: /lib/udev/rules.d/99-systemd.rules
rules contain 393216 bytes tokens (32768 * 12 bytes), 40208 bytes strings
32422 strings (271011 bytes), 28868 de-duplicated (234358 bytes), 3555 trie nodes used
IMPORT builtin 'usb_id' /lib/udev/rules.d/50-udev-default.rules:13
IMPORT builtin 'hwdb' /lib/udev/rules.d/50-udev-default.rules:13
handling device node '/dev/bus/usb/001/012', devnum=c189:11, mode=0600, uid=0, gid=0
preserve already existing symlink '/dev/char/189:11' to '../bus/usb/001/012'
ACTION=-p
BUSNUM=001
DEVNAME=/dev/bus/usb/001/012
DEVNUM=012
DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.1
DEVTYPE=usb_device
DRIVER=usb
ID_BUS=usb
ID_MODEL=SmartRF04EB
ID_MODEL_ENC=SmartRF04EB
ID_MODEL_ID=eb20
ID_REVISION=0050
ID_SERIAL=Chipcon_AS_SmartRF04EB
ID_USB_INTERFACES=:ffffff:
ID_VENDOR=Chipcon_AS
ID_VENDOR_ENC=Chipcon\x20AS
ID_VENDOR_FROM_DATABASE=Chipcon AS
ID_VENDOR_ID=11a0
MAJOR=189
MINOR=11
PRODUCT=11a0/eb20/50
SUBSYSTEM=usb
TYPE=0/0/0
USEC_INITIALIZED=1989348663
Unload module index
Unloaded link configuration context.

/lib/udev/rules.d/50-udev-default.rules 第 13 行的 USB 条目:

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb"
ENV{MODALIAS}!="", IMPORT{builtin}="hwdb --subsystem=$env{SUBSYSTEM}"

ACTION!="add", GOTO="default_end"

答案1

三个改变解决了这个问题:

  1. 重新插上 JTAG 电缆。由于某种原因,连接似乎出现故障,因为 cc-tool 随后识别了开发板。

  2. 编辑 udev 规则中的第 6 行,添加指向 ttyUSB0 的符号链接,内容如下:

ACTION=="添加", SUBSYSTEM=="usb", ATTRS{idVendor}=="11a0", ATTRS{idProduct}=="eb20", MODE="0666", SYMLINK="ttyUSB0"

  1. 重新启动笔记本电脑以重新加载 udev 规则;尝试使用 udevadm 没有创建符号链接:

udevadm 触发器

udevadm 控制--重新加载规则

相关内容