USB端口枚举为何更改?


10

我正在使用带有Gnokii和Gammu的Huawei GMS / UMTS USB调制解调器。调制解调器在Pi的下部端口中。随着dmesg | grep tty它会出现在/dev/ttyUSB0/dev/ttyUSB1。(在这种情况下,1根棍子上的2个USB设备是正常的)。

我相应地配置了Gnokii和Gammu,但是在ttyUSB0上我只能发送消息。发送和接收都只能在ttyUSB1上工作。

然后,我将存储棒移到了上方的USB插槽(因为否则,我的WiFi存储棒将无法放置在其旁边)。一切正常。同样在几次重启后,又冷又热。

然后,我需要扩展文件系统(是的,我知道我应该早做些)。之后,调制解调器位于ttyUSB0和ttyUSB * 2 *上。发送/接收工作在后者上。这花了我一些时间来找出答案。

更新:2天后,ttyUSB2消失了。现在,正在工作的调制解调器会在ttyUSB0(以前是ttyUSB1)上显示自己。

知道为什么会这样吗?可能有相关Debian或Linux文档的链接吗?我非常有义务..


尝试使用中的名称/sys/class/tty/作为指导。
Lekensteyn

/ sys / class / tty中唯一的ttyUSB是ttyUSB0和ttyUSB1。现在。谁知道明天会怎样。
RolfBly

USB枚举会根据设计更改,您插入新设备并获得新编号。或旧设备,而先前的端口号仍在忙于未完成的传输。请勿过早重新连接设备,并确保使用这些设备的所有软件都愉快地完成了业务。
lenik 2013年

Answers:


16

Gammu文档建议(但不做任何详细说明)一种解决方法,

编辑:Atmel有一个应用笔记,很好地描述了枚举过程。

枚举发生变化是因为它发生在主机,集线器和设备之间的对话中,并且即使从一次重新引导到下一次重新引导的设置相同,它们的响应时间也可能有所不同。

更新:解决方案不容易在线找到,并且分散在各处。因此,我将所有内容汇总到一个文档中。这就是归结为。
1.找出ttyUSB上的内容:

dmesg | grep ttyUSB  

2.列出设备的所有属性,并选择一个唯一的标识符集,例如idVendor + idProduct(如果有多个具有相同idVendor和idProduct的设备,则需要序列号)。

udevadm info --name=/dev/ttyUSB1 --attribute-walk

3.创建一个文件,/etc/udev/rules.d/99-usb-serial.rules像这样的东西线吧:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name" 

(假设您在那里不需要序列号,当然也不需要在步骤2中找到的idVendor和idProduct的序列号
。4.加载新规则:

sudo udevadm trigger

5.验证发生了什么:

ls -l /dev/your_device_name  

将显示符号链接转到的ttyUSB编号。如果是/dev/ttyUSB1,则验证谁拥有它以及它属于哪个组:

ls -l /dev/ttyUSB1   

然后只是为了好玩:

udevadm test -a -p  $(udevadm info -q path -n /dev/your_device_name)

8

您已经部分回答了自己的问题,但是还有另一种解决方法,尤其是对于串行设备:/dev/serial/*路径。我在Raspberry Pi上有一个Prolific USB→RS232接口,几乎总是显示为/dev/ttyUSB0。但它在系统上也显示为:

  • /dev/serial/by-path/platform-bcm2708_usb-usb-0:1.3:1.0-port0
  • /dev/serial/by-id/usb-067b_2303-if00-port0

by-id除非我添加另一个基于PL2303的转换器,否则使用链接应保持不变。


当有人真的添加了一个新的基于PL2303的转换器时。(其中2个)那么可以做什么呢?
Obmerk Kronen

你被困住了。我更喜欢混合搭配品牌来避免这种情况。
's scruss

这对于在Python中改变我的串行端口非常有帮助-谢谢!
GhostToast
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.