Ubuntu 10.1下如何识别多个USB串口适配器
我正在 Ubuntu 10.1 下从多个相同的 USB 串行适配器读取数据。
有时,它们的 /dev/tty 路径会发生变化(例如,如果在启动时连接了其他 USB 设备)。
我需要一种通过任何此类更改重复引用同一适配器的方法。
据 udevadm 称,这些设备都具有相同的序列号。
我认为最有可能的选择是识别适配器所连接的端口(它们不会移动)。
我可以找到各种可能有效的有趣 /dev 路径,但是尽管网上有很多关于 udev 的讨论,但我无法找到关于如果设备插入静态端口时这些路径中的某些路径是否是静态的明确声明。
I am reading data from multiple identical USB-serial adapters under Ubuntu 10.1.
On occasion, their /dev/tty path changes (eg if other USB devices are connected on startup).
I need a way of repeatedly referring to the same adapter through any such changes.
The devices all have the same serial numbers, according to udevadm.
I think the most likely option is to identify an adapter by which port it is connected to (they don't get moved around).
I can find all sorts of interesting /dev paths that might work, but despite all the discussion about udev online, I can't locate a definitive statement about whether some of these paths are static if the device is plugged into a static port.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
有一个解决方案。晚做总比不做好 ;)
使用以下
udev
规则将/dev/ttyUSB{?}
设备映射到/dev/usb-ports/%bus_id -%port_id
链接。这是我的
/etc/udev/rules.d/usb-parse-devpath.rules:
和
usb-parse-devpath.pm
脚本:如您所见帮助我们创建到
/dev/ttyUSB{?}
设备的命名链接,并将它们放置在/dev/usb-ports
中,格式如下:bus_id-port_id
。例如,下一个命令给出以下内容:
因此,
bus_id
是3
,port_id
是1
并且现在我的/dev/usb-ports
中有以下内容:问候。
There is a solution. It's better late then never ;)
Use the following
udev
rule to map/dev/ttyUSB{?}
devices into the/dev/usb-ports/%bus_id-%port_id
link.Here is my
/etc/udev/rules.d/usb-parse-devpath.rules:
And the
usb-parse-devpath.pm
script:As you can see this helps us to create named links to
/dev/ttyUSB{?}
devices and place them at/dev/usb-ports
in the following format:bus_id-port_id
.For example, the next command gives me the following:
So, the
bus_id
is3
andport_id
is1
and now I have following in my/dev/usb-ports
:Regards.
就像 Ilya Matvejchikov 的答案一样,一个好的解决方案是添加 udev 规则来对设备执行您想要的操作。和你一样,我也遇到了类似的问题。我在 USB 转多串行适配器上安装了 UPS,有时系统会切换 /dev/tty 编号。
我的解决方案是创建一个规则,通过驱动程序和端口来匹配设备类型,然后创建一个指向我的 UPS 所连接端口的符号链接。我使用 NUT 来监控 UPS,它始终插入同一个物理端口。
现在,我将 NUT 配置为始终使用常量 /dev/nut-ups0,因为当识别 USB 串行设备时,串行端口和规则会正确处理映射。
您可以使用 lsusb 命令查找插入时要在规则中使用的实际设备名称。
Much like Ilya Matvejchikov's answer, a good solution is to add udev rules to do what you want with the device. Like you, I was having a similar problem. I had a UPS on a USB-to-multi-serial adapter and occasionally the system would switch around the /dev/tty numbers.
My solution was to create a rule to match the type of device by driver and port, then create a symbolic link to the port to which my UPS was attached. I used NUT to monitor the UPS, which was always plugged into the same physical port.
Now I configure NUT to always use a constant /dev/nut-ups0, as the serial port and the rule takes care of mapping properly when the usb-serial device is recognized.
You can use the lsusb command to find out the actual device name to use in the rule when it's plugged in.
使用
$ udevadm info -n /dev/ttyUSB0 -a
查看您的 USB 设备插入了哪个端口。其中一个父设备的变量 KERNELS 应该类似于 KERNELS=="1-1.2: 1.0”。创建udev规则:
并触发udev
Look with
$ udevadm info -n /dev/ttyUSB0 -a
which port your USB device is plugged in. The variable KERNELS of one of the parent devices should be something like KERNELS=="1-1.2:1.0".Create a udev rule:
and trigger udev
我有许多 USB 转串行设备,每个设备都有多个端口和解决方案
上面提到的并没有完全适合我。
USB“KERNEL”对我来说还不够,但我找到了端口号。
我知道我现在提出的建议可能会被认为是疯狂的黑客行为,
但这对我有用..
现在..
我实际上很高兴看到一个更优雅的建议
完成类似的事情..
所以...基于之前的答案 Ilya Matveychikov
文件:/etc/udev/rules.d/usb-parse-devpath.sh
和文件:/etc/udev/rules.d/99- usb-serial.rules
结果如下所示:
I have many USB to Serial devices with each many ports and the solutions
mentioned above did not quite did it for me.
The USB "KERNEL" was not enough in my case, but I found the port number.
I am aware that what I'm proposing now might be considered an insane hack,
but it works for me..
for now..
I would actually be pleased to see a more elegant suggestion
that accomplish something similar..
So... Based on the previous answer form Ilya Matveychikov
File: /etc/udev/rules.d/usb-parse-devpath.sh
And File: /etc/udev/rules.d/99-usb-serial.rules
The result look something like this:
usb-devices 可以获取端口号和总线/开发枚举。
usb-devices can get you the port number and the bus/dev enumeration.
我也在这个主题中搜索一种方法来查找哪个物理 USB 设备被分配/连接到逻辑 /dev 设备名称。因此,经过一番尝试和错误后,这对我来说最有效:
查看存在哪些逻辑 ttyUSBx 设备(其中 x 是 0、1、2...):
显示所有 USB 串行适配器的总线和设备编号:
最后,使用:
现在检查 udevadm 输出以将逻辑设备名称与实际物理设备相匹配。这是我执行此操作时的列表:
因此,在我的例子中,ttyUSB0 与总线 2 上的设备 device5 关联,该设备是未来技术设备国际 USB 转串行适配器;同样,ttyUSB1 与总线 2 上的设备 device4 关联,该设备是 Prolific Technology, Inc. USB 转串行适配器。
正如已经指出的那样,该命令:
将以一行方式为您提供相同的信息。我想我应该发布一些细节来帮助我了解这些东西在幕后是如何工作的......
希望这有帮助:)
I too was searching this topic for a way to find which physical USB device was assigned/connected to a logical /dev device name. So, after some trial and error, this is what worked best for me:
See what logical ttyUSBx devices exist (where x is 0, 1, 2...):
Show bus and device numbers for all usb-serial adapters:
Finally, use:
Now inspect the udevadm output to match the logical device name to the actual physical device. Here my listing when I did it:
So, in my case, ttyUSB0 is associated with the device on bus2, device5, which is the Future Technology Devices International USB to Serial Adapter; and likewise, ttyUSB1 is associated with the device on bus2, device4, which is the Prolific Technology, Inc. USB to Serial adapter.
And as has been pointed out, the command:
Will get you the same info in a one-line manner. I thought I'd post the details that helped me learn how the stuff worked behind the scenes...
Hope that was helpful :)
usb-parse-devpath.pm 通过使用适配器的总线和端口 ID 解决了这个问题。
The usb-parse-devpath.pm addresses this by using the bus and port id of the adapter.