识别哪个 USB 设备是 /dev/ttyUSB0

Identify which USB device is /dev/ttyUSB0

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

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

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

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

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

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

既然你提到你想从 Python 开始,pyudev 有以下示例代码来访问 udev 所知道的关于设备文件标识的设备的所有信息:

from pyudev import Context, Device
context = Context()
device = Devices.from_device_file(context, '/dev/sda')

我相信 /dev/ttyUSB0 也能很好地工作。

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

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

all well-known dictionary methods and operators (e.g. .keys(), .items(), in) are available to access device properties.