2011-03-24 19 views
2

我有一個運行Linux的嵌入式主板,它有兩個相同的4端口FTDI USB串行芯片。 USB串行芯片硬連線到主板上的各個USB端口。這些設備無法被「移除」,「斷開連接」或移動到不同的物理USB位置。如何在Linux中唯一標識兩個相同的USB串行適配器

我很擔心每次啓動時都會出現udev填充/ dev/ttyUSBs的競態條件。不能保證一個芯片將總是在另一個之前得到枚舉,導致芯片#1有時會得到/ dev/ttyUSB0-3,有時會得到/ dev/ttyUSB4-7。

由於該電路板將用於自動化環境,因此用戶無法在每次啓動時連接到電路板,以手動決定將哪個芯片分配給哪個/ dev/ttyUSB庫。

我需要一些方法來確保每次啓動設備時,我的主板上運行的進程都使用正確的串行通道。我猜這可以通過告訴udev哪個/ dev/ttyUSBs分配給每個芯片,或者在udev填充/ dev之後啓動腳本來確定哪個芯片得到哪個/ dev/ttyUSB#來完成。

問題是芯片是完全相同的,但它們將始終連接到相同的物理USB位置。

如何在Linux中將這些芯片分開?而且,我該如何設置或確定啓動時哪個/ dev/ttyUSB#的芯片有哪些?

回答

2

通過創建與特定DEVPATH相匹配的規則,您可以指示udevd根據物理連接爲端口分配特定名稱。

DEVPATH是sysfs下設備的路徑,從/devices/開始。它看起來像/devices/pci0000:00/0000:00:1d.3/usb5/5-2

+0

SUBSYSTEM == 「TTY」,ATTRS {idVen }}「0403」,ATTRS {idProduct} ==「6001」, DEVPATH ==「/ devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2- 1.4:1.0/ttyUSB0/tty/ttyUSB0「,SYMLINK + =」mydevice「 – Kurt 2016-11-07 19:54:45

1

我相信FTDI芯片有唯一的序列號。
lsusb -v會告訴你序列號。

兩個FTDI設備樣本輸出片段連接

總線001設備004:ID 0403:6010未來技術設備國際有限公司FT2232C雙USB-UART/FIFO IC
設備描述符:
bLength 18
bDescriptorType 1
bcdUSB 2.00
形式bDeviceClass 0(定義在接口級)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor英語 - 澳大利亞未來技術設備國際有限公司
idProduct 0x6010 FT2232C雙USB-UART/FIFO IC
bcdDevice 7。00
iManufacturer 1 FTDI
iProduct 2變身-IC-II
iSerial 3 FTUAABWR
bNumConfigurations指定1

總線001設備005:ID 0403:6010未來技術設備國際有限公司FT2232C雙USB-UART/FIFO IC
設備描述符:
bLength 18
bDescriptorType 1
bcdUSB 2.00
形式bDeviceClass 0(在接口級別定義。)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor英語 - 澳大利亞未來技術設備國際有限公司
idProduct 0x6010 FT2232C雙USB-UART/FIFO IC
bcdDevice 7.00
iManufacturer 1 FTDI
iProduct 2變身-IC -II
iSerial 3 FTTPM0L1
bNumConfigurations指定1

相關問題