#linux-kernel #embedded #embedded-linux #ftdi #zynq
#linux-ядро #встроенный #встроенный-linux #ftdi #zynq
Вопрос:
У меня есть плата PYNQ-Z2, и она содержит микросхему FT2232HQ, которая преобразует данные с USB в JTAG и UART
Проблема в том, что плата работает и обнаруживается Vivado (я могу ее запрограммировать), но устройство не отображается как /dev/ttyUSB*
устройство, оно отображается как /dev/ftdi-x
(где x — случайное число), и я не могу открыть последовательный порт с помощью этого файла устройства.
Я использовал lsusb
command и обнаружил, что чип обнаружен правильно:
Bus 003 Device 017: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC
После этого я попытался проверить файл системного журнала и заметил два странных поведения, первое — при подключении платы распознаются два устройства ttyUSB, а не одно! /dev/ttyUSB0
amp; /dev/ttyUSB1
.
второе поведение заключается в том, что эти два устройства немедленно отключаются после их подключения.
Вот полный системный журнал:
Oct 27 11:45:20 ao20xa kernel: [73109.798748] usb 3-4: new high-speed USB device number 17 using xhci_hcd
Oct 27 11:45:21 ao20xa kernel: [73109.949757] usb 3-4: New USB device found, idVendor=0403, idProduct=6010
Oct 27 11:45:21 ao20xa kernel: [73109.949761] usb 3-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Oct 27 11:45:21 ao20xa kernel: [73109.949763] usb 3-4: Product: TUL
Oct 27 11:45:21 ao20xa kernel: [73109.949765] usb 3-4: Manufacturer: Xilinx
Oct 27 11:45:21 ao20xa kernel: [73109.949767] usb 3-4: SerialNumber: 1234-tul
Oct 27 11:45:21 ao20xa kernel: [73109.950844] ftdi_sio 3-4:1.0: FTDI USB Serial Device converter detected
Oct 27 11:45:21 ao20xa kernel: [73109.950899] usb 3-4: Detected FT2232H
Oct 27 11:45:21 ao20xa kernel: [73109.951100] usb 3-4: FTDI USB Serial Device converter now attached to ttyUSB0
Oct 27 11:45:21 ao20xa kernel: [73109.951815] ftdi_sio 3-4:1.1: FTDI USB Serial Device converter detected
Oct 27 11:45:21 ao20xa kernel: [73109.951861] usb 3-4: Detected FT2232H
Oct 27 11:45:21 ao20xa kernel: [73109.952058] usb 3-4: FTDI USB Serial Device converter now attached to ttyUSB1
Oct 27 11:45:21 ao20xa mtp-probe: checking bus 3, device 17: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-4"
Oct 27 11:45:21 ao20xa mtp-probe: bus: 3, device: 17 was not an MTP device
Oct 27 11:45:21 ao20xa systemd-udevd[18701]: Process '/bin/sh -c 'basename $(dirname $(realpath /sys/devices/pci0000:00/0000:00:14.0/usb3/3-4/device)) > /sys/bus/usb/drivers/ftdi_sio/unbind'' failed with exit code 1.
Oct 27 11:45:21 ao20xa kernel: [73110.089464] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
Oct 27 11:45:21 ao20xa kernel: [73110.089536] ftdi_sio 3-4:1.1: device disconnected
Oct 27 11:45:21 ao20xa kernel: [73110.089818] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
Oct 27 11:45:21 ao20xa kernel: [73110.089865] ftdi_sio 3-4:1.0: device disconnected
Oct 27 11:45:21 ao20xa snapd[16139]: hotplug.go:199: hotplug device add event ignored, enable experimental.hotplug
Oct 27 11:45:21 ao20xa upowerd[1835]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb3/3-4/3-4:1.0
Oct 27 11:45:21 ao20xa snapd[16139]: hotplug.go:199: hotplug device add event ignored, enable experimental.hotplug
Oct 27 11:45:21 ao20xa upowerd[1835]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb3/3-4/3-4:1.1
Oct 27 11:45:21 ao20xa systemd-udevd[18701]: Process '/bin/sh -c 'basename $(dirname $(realpath /sys/devices/pci0000:00/0000:00:14.0/usb3/3-4/device)) > /sys/bus/usb/drivers/ftdi_sio/unbind'' failed with exit code 1.
Oct 27 11:45:21 ao20xa upowerd[1835]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb3/3-4
Oct 27 11:45:21 ao20xa ModemManager[1044]: <info> (tty/ttyUSB0): released by device '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-4'
Oct 27 11:45:21 ao20xa ModemManager[1044]: <info> (tty/ttyUSB1): released by device '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-4'
Oct 27 11:45:21 ao20xa ModemManager[1044]: <info> Couldn't check support for device '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-4': Operation was cancelled
Oct 27 11:45:21 ao20xa upowerd[1835]: unhandled action 'unbind' on /sys/devices/pci0000:00/0000:00:14.0/usb3/3-4/3-4:1.0
Oct 27 11:45:21 ao20xa upowerd[1835]: unhandled action 'unbind' on /sys/devices/pci0000:00/0000:00:14.0/usb3/3-4/3-4:1.1
Итак, мне интересно, может ли кто-нибудь помочь решить эту проблему.
Комментарии:
1. Два устройства ttyUSB будут вызваны тем, что FT2232HQ имеет два дескриптора интерфейса USB (проверьте
bNumInterfaces
значение вlsusb -v
выходных данных), каждый из которых реализует последовательный порт. Остальная часть странного поведения с исчезновением устройств ttyUSB, по-видимому, связана с некоторыми пользовательскими правилами UDEV, запускающими какой-то пользовательский скрипт в вашей системе.2. Итак, для начала попробуйте
grep -l ftdi_sio /etc/udev/rules.d/*.rules
, а затем перечислите содержимое соответствующих файлов * .rules . Если в списке ничего нет, попробуйте вместо этого использовать /lib/udev/rules.d/*.rules .3. Я нашел один файл в первом каталоге, второй был пуст, первый файл был:
/etc/udev/rules.d/10-lattice.rules
и вот его содержимое:ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="0666", SYMLINK ="ftdi-%n", RUN ="/bin/sh -c 'basename $(dirname $(realpath /sys%p/device)) > /sys/bus/usb/drivers/ftdi_sio/unbind'",RUN ="/root/ftdi_fixer.py"
4. Большое вам спасибо, лан Эбботт , я прокомментировал эту единственную строку в файле, и теперь все работает, я попробовал UART, и он работает нормально. Похоже, что в этой строке запускается скрипт для отвязки устройства после его подключения.
5. Но мне интересно, не должен ли этот скрипт останавливать как UART, так и JTAG, почему JTAG работал?
Ответ №1:
В моем случае мой пользователь не был в группе dialout
. Когда я добавил:
sudo adduser <my_user> dialout
И вышел из системы и, наконец, после нескольких часов поиска ответа мне удалось подключиться к последовательному.
Ответ №2:
Как упоминалось в комментариях Яна Эббота и Абади, запуск:
grep -l ftdi_sio /etc/udev/rules.d/*.rules
и комментирование строк там помогло. Для меня они были:
#lattice
#BUS=="usb", ACTION=="add", ATTRS{idVendor}=="1134", ATTRS{idProduct}=="8001", MODE=="0666", GROUP=="plugdev", SYMLINK ="lattice-%n"
#FTDI
#SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE=="0666", GROUP=="plugdev", SYMLINK ="ftdi-%n"
#SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", RUN ="/bin/sh -c 'basename %p >/sys/bus/usb/drivers/ftdi_sio/unbind'"
Похоже, существовало правило, которое вызывало отключение (переименование ttyUSB * в ftdi- *)