如何在Linux中唯一标识两个相同的USB串行适配器

时间:2011-03-24 14:49:52

标签: linux usb usbserial

我有一个运行Linux的嵌入式主板,它有两个相同的4端口FTDI USB串行芯片。 USB串行芯片硬连线到主板上的各个USB端口。这些设备无法被“移除”,“断开连接”或移动到不同的物理USB位置。

我很担心每次启动都会出现udev填充/ dev / ttyUSBs的竞争条件。无法保证一个芯片总是在另一个芯片之前被枚举,导致芯片#1有时会得到/ dev / ttyUSB0-3,有时会得到/ dev / ttyUSB4-7。

由于该电路板将在自动化环境中使用,因此用户无法在每次启动时连接到电路板,以手动确定将哪个芯片分配给/dev/ttyUSB的哪一组。

我需要一些方法来确保每次设备启动时我的主板上运行的进程都使用正确的串行通道。我猜这可以通过告诉udev将/ dev / ttyUSB分配给每个芯片,或者在udev填充/ dev之后启动时运行脚本来确定哪个芯片得到哪个/ dev / ttyUSB#。 / p>

问题是两个芯片完全相同,但它们将始终连接到相同的物理USB位置。

如何在Linux中区分这些芯片?而且,我怎样才能设置或确定哪个芯片具有哪个/ dev / ttyUSB#启动?

2 个答案:

答案 0 :(得分:2)

您可以通过创建与特定udevd匹配的规则,告诉DEVPATH根据物理连接为端口分配特定名称。

DEVPATH是sysfs下设备的路径,从/devices/开始。它看起来像/devices/pci0000:00/0000:00:1d.3/usb5/5-2

答案 1 :(得分:1)

我相信FTDI芯片有唯一的序列号 lsusb -v会告诉你序列号。

连接了两个ftdi设备的示例输出片段

总线001设备004:ID 0403:6010 Future Technology Devices International,Ltd FT2232C双USB-UART / FIFO IC
设备描述符:
  bLength 18
  bDescriptorType 1
  bcdUSB 2.00
  bDeviceClass 0(在接口级别定义)
  bDeviceSubClass 0
  bDeviceProtocol 0
  bMaxPacketSize0 64
  idVendor 0x0403 Future Technology Devices International,Ltd
  idProduct 0x6010 FT2232C双USB-UART / FIFO IC
  bcdDevice 7.00
  iManufacturer 1 FTDI
  iProduct 2 Morph-IC-II
  iSerial 3 FTUAABWR
  bNumConfigurations 1

总线001设备005:ID 0403:6010 Future Technology Devices International,Ltd FT2232C双USB-UART / FIFO IC
设备描述符:
  bLength 18
  bDescriptorType 1
  bcdUSB 2.00
  bDeviceClass 0(在接口级别定义)
  bDeviceSubClass 0
  bDeviceProtocol 0
  bMaxPacketSize0 64
  idVendor 0x0403 Future Technology Devices International,Ltd
  idProduct 0x6010 FT2232C双USB-UART / FIFO IC
  bcdDevice 7.00
  iManufacturer 1 FTDI
  iProduct 2 Morph-IC-II
  iSerial 3 FTTPM0L1
  bNumConfigurations 1