Raspian:静态映射 /dev/ttyUSB*

Raspian:静态映射 /dev/ttyUSB*

我正在使用运行 Raspian 的 Raspberry Pi 来控制一些家庭自动化硬件。一个硬件通过 RS232 进行通信,因此它使用 USB 转 RS232 适配器连接到我的 RPi。另一个通过 USB 连接,但模拟串行端口。

当我只使用一件硬件时,一切都很好:我只需告诉我的软件使用/dev/ttyUSB0,一切都很好。

问题是当我同时连接两者时。一台设备显示为ttyUSB0,另一台设备显示为ttyUSB1,这很好,但每次重新启动时,哪个硬件设备将分配给哪个设备文件基本上是随机的,尽管甚至没有将它们从 RPi 上拔下。

重新启动后,我经常发现控制软件很混乱,因为它与错误的设备通信。有没有办法可以将设备“硬编码”到设备文件?

答案1

对于串行设备,您应该在 下找到它们按拓扑命名/dev/serial/by-path/,因此,如果您使用相同的 USB 集线器和端口,它应该保持不变。例如:

ls -l /dev/serial/by-path/pci-0000:04:00.0-usb-0:2.1.1:1.0-port0
... /dev/serial/by-path/pci-0000:04:00.0-usb-0:2.1.1:1.0-port0 -> ../../ttyUSB0

同样,您应该按名称(有时包括序列号)在 下查找设备,/dev/serial/by-id/例如:

 ls -l /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5771WOA-if00-port0
 ... /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A5771WOA-if00-port0 -> ../../ttyUSB0

答案2

您可以为此使用 udev 规则。 udev 规则可以通过序列号匹配 USB 设备,并允许您在/dev.

像这样的 udev 规则应该足以创建/dev指向真实设备节点的符号链接:

SUBSYSTEM=="usb", ATTRS{serial}=="<serial number>", SYMLINK+="USBserial1"

编写 udev 规则丹尼尔·德雷克(Daniel Drake)的详细信息。

相关内容