Setting USB probe priority...

Hans Petter Selasky hps at selasky.org
Wed Aug 6 06:37:55 UTC 2014


On 08/06/14 08:34, Dan Mahoney wrote:
>
>
> On Wed, 6 Aug 2014, Hans Petter Selasky wrote:
>
>> On 08/06/14 01:50, Peter Losher wrote:
>>> (please include my and Dan's email in any responses as we normally don't
>>> lurk on the USB mailing list)
>>>
>>> So @work we use serial->USB TTY MUX's to handle our serial console needs,
>>> and at some sites we have a need that is greater than a single 16 port
>>> device (the max you can get).  The problem is that with two of these 16 port
>>> USB devices is that sometimes during a reboot that the "second" device gets
>>> probed first and so the first 16 and second 16 /dev/ttyU* blocks swap
>>> around... which of course plays havoc with any symlinks we have to the
>>> devices in rtty or conserver. :(
>>>
>>> Is there any way to tell the USB code to always select a certain device
>>> first?  I assume this has been a issue with USB storage devices so this
>>> shouldn't be a new issue.  And I tried searching for a answer on the web to
>>> no avail.
>>>
>>> Ideas?
>>
>> Hi,
>>
>> USB enumerates in sequential order, but sometimes devices might not be ready
>> to enumerate, and then a port is skipped.
>>
>> Does the device have a serial number?
>>
>> usbconfig -d X.Y dump_device_desc |grep iSerial
>>
>> If yes, this can be filtered by a devd rule, when the device attaches, and
>> then you can switch the serial number to create any symbolic links.
>
> Curiously, it looks like one of our two usb-to-serial devices (both are
> 16-port devices), presents as 16 separate USB devices, and the other
> presents as clusters of four:
>
> iSerialNumber = 0x0003  <FTWVV6Z7>
>    iSerialNumber = 0x0003  <FTWVV70Y>
>    iSerialNumber = 0x0003  <FTWVV72I>
>    iSerialNumber = 0x0003  <FTWVV74C>
>    iSerialNumber = 0x0000  <no string>
>    iSerialNumber = 0x0003  <ST160898>
>    iSerialNumber = 0x0003  <ST160897>
>    iSerialNumber = 0x0000  <no string>
>    iSerialNumber = 0x0003  <ST160900>
>    iSerialNumber = 0x0003  <ST160899>
>    iSerialNumber = 0x0003  <ST160902>
>    iSerialNumber = 0x0003  <ST160901>
>    iSerialNumber = 0x0003  <ST160904>
>    iSerialNumber = 0x0003  <ST160903>
>    iSerialNumber = 0x0003  <ST160906>
>    iSerialNumber = 0x0000  <no string>
>    iSerialNumber = 0x0003  <ST160905>
>    iSerialNumber = 0x0003  <ST160908>
>    iSerialNumber = 0x0003  <ST160907>
>    iSerialNumber = 0x0003  <ST160910>
>    iSerialNumber = 0x0003  <ST160909>
>    iSerialNumber = 0x0003  <ST160912>
>    iSerialNumber = 0x0003  <ST160911>
>
> However, if I understand you correctly, not-ready issues aside, what we
> really need to do is to ensure that our devices are simply plugged into
> USB ports that are probed in the correct order, and assuming they're all
> ready to probe, this shouldn't be a problem.
>
> What I think happened here was that one of these devices was added to
> an earlier-sequenced port after bootup.
>
> Of course, from the back of a server, it's totally non-obvious what the
> sequence is.  Is there an easy way to tell where in the probe sequence a
> given port will be?
>
> -Dan
>

Hi,

Ports are probed 1,2,3,4, if they are labeled as such.

When adding new equipment, you can force a re-enumeration of the root 
HUB, where the devices are attached, and then the order shall be the 
same as at reboot:

usbconfig -d X.1 set_config 255
usbconfig -d X.1 set_config 0

If the devices are attached to different USB controllers there is no 
guarantee about the probe order.

--HPS


More information about the freebsd-usb mailing list