确定哪个 USB 设备是 /dev/ttyUSB0

Dan*_*roS 5 linux serial-port usbserial raspberry-pi

我正在使用 Linux 发行版(Raspbian),并且我有两个 USB 串行适配器连接到微控制器。每当我连接两个适配器时,都会出现串行端口“/dev/ttyUSB0”和“/dev/ttyUSB1”;这里“/dev/ttyUSB0”是首先物理连接的适配器(首先由系统识别)。

现在,我正在寻找一种方法来确定在微控制器重启时哪个适配器是哪个。即,两个适配器都保持插入它们的 USB 端口,我无法物理拔出/重新插入以强制哪个适配器是“USB0”。

基础研究使我找到了这些命令(图片供参考):

ls /dev/ttyUSB* 列出活动的 USB 串行端口。

在此处输入图片说明

lsusb 获取有关 USB 总线和连接设备的更多信息。

在此处输入图片说明

有没有办法将这两个结果(或替代方法)联系起来,以确定我需要什么?例如,在上面的图片中,“/dev/ttyUSB0”是“Bus 001 Device 008: ID 1a86:...”,但是我如何通过软件找到它(最好使用 Python,但 shell 脚本也可以) ?

Ben*_*igt 5

既然您提到您想从 Python 中执行此操作,pyudev则可以使用以下示例代码来访问udev有关设备文件标识的设备的所有信息:

from pyudev import Context, Device
context = Context()
device = Devices.from_device_file(context, '/dev/sda')
Run Code Online (Sandbox Code Playgroud)

我相信这也应该能很好地配合/dev/ttyUSB0

请参阅https://pyudev.readthedocs.io/en/latest/api/pyudev.html#pyudev.Devices.from_device_file

一旦您在 Python 中拥有了设备 udev 实例,您就可以访问device.attributesdevice.properties获取大量信息,包括 VID、PID、字符串描述符等。文档说

所有众所周知的字典方法和运算符(例如.keys().items()in)都可用于访问设备属性。