Не может открыть USB-порт

У меня есть одноплатный компьютер с портом JTAG, обслуживаемым аппаратными средствами FTDI, но они не соединяются с системой разработки (Xilinx Vivado), и я пытаюсь диагностировать проблему. Команда sudo lsusb -v -D /dev/ttyUSB0 отчеты Cannot open /dev/ttyUSB0, даже при том, что я установил полномочия на 777 в настоящий момент. Я работал sudo usb-devices с и без кабеля, соединенного, чтобы быть уверенным, я смотрел на правильное устройство и здесь - то, что я получил (порядковый номер, запутываемый мной):

T:  Bus=01 Lev=03 Prnt=04 Port=01 Cnt=01 Dev#=  9 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0403 ProdID=6014 Rev=09.00
S:  Manufacturer=Digilent
S:  Product=Digilent USB Device
S:  SerialNumber=000000000000
C:  #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio

Я выполняю новую установку 18.04.2 только вчера обновленный к 18.04.4; переустанавливание было запрошено требованием решить эту проблему, и я хотел удостовериться, что устаревшее программное обеспечение не было причиной.

Я думаю неспособность Vivado видеть, что устройство может быть связано с неспособностью инструмента общей системы, такого как lsusb для открытия устройства. Любая справка ценилась бы.

2
задан 26 March 2020 в 19:17

1 ответ

Хорошо, это не имеет никакого отношения к главным числам, как я думал. Cannot open /dev/ttyUSB0 сообщение печатается в dump_one_device() если указатель, возвращенный get_usb_device() является ПУСТЫМ. Эта функция в свою очередь звонит libusb_get_device_list() это возвращает список USB-устройств вместе с их номерами шины и номерами устройств, которые извлечены с помощью libusb_get_bus_number() и libusb_get_device_address() и связанный с "/dev/bus/usb". Можно проверить его с gdb (Я использовал сегодняшнюю основную фиксацию c92f1962892d709cb9bad3aac2440932dd9684f6 от https://github.com/gregkh/usbutils):

$ gdb --args ./lsusb -vD /dev/ttyUSB0
Reading symbols from ./lsusb...done.
(gdb) break usbutils/usbmisc.c:134
Breakpoint 1 at 0x40b827: file usbmisc.c, line 134.
(gdb) run
Starting program: /media/data/usbutils/lsusb -vD /dev/ttyUSB0
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
[New Thread 0x7ffff6d44700 (LWP 4621)]

Thread 1 "lsusb" hit Breakpoint 1, get_usb_device (ctx=<optimized out>, path=path@entry=0x7fffffffddab "/dev/ttyUSB0") at usbmisc.c:134
134                     if (!strcmp(device_path, absolute_path)) {
(gdb) print device_path
$1 = "/dev/bus/usb/002/002", '\000' <repeats 4076 times>
(gdb) continue
Continuing.

Thread 1 "lsusb" hit Breakpoint 1, get_usb_device (ctx=<optimized out>, path=path@entry=0x7fffffffddab "/dev/ttyUSB0") at usbmisc.c:134
134                     if (!strcmp(device_path, absolute_path)) {
(gdb) print device_path
$2 = "/dev/bus/usb/002/001", '\000' <repeats 4076 times>
(gdb) continue
Continuing.

Thread 1 "lsusb" hit Breakpoint 1, get_usb_device (ctx=<optimized out>, path=path@entry=0x7fffffffddab "/dev/ttyUSB0") at usbmisc.c:134
134                     if (!strcmp(device_path, absolute_path)) {
(gdb) print device_path
$3 = "/dev/bus/usb/001/002", '\000' <repeats 4076 times>
(gdb) continue
Continuing.

Thread 1 "lsusb" hit Breakpoint 1, get_usb_device (ctx=<optimized out>, path=path@entry=0x7fffffffddab "/dev/ttyUSB0") at usbmisc.c:134
134                     if (!strcmp(device_path, absolute_path)) {
(gdb) print device_path
$4 = "/dev/bus/usb/001/001", '\000' <repeats 4076 times>
(...)

и так далее до device_path равно входному параметру. Конечно, /dev/ttyUSB0 никогда не будет соответствовать.

Хорошо, что можно также измениться на/dev/bus/usb и передать относительный адрес устройства:

$ cd /dev/bus/usb/
$ lsusb -D 001/001
Device: ID 1d6b:0002 Linux Foundation 2.0 root hub
(...)
0
ответ дан 7 April 2020 в 23:27

Другие вопросы по тегам:

Похожие вопросы: