3

Путаясь в файловой системе Linux /sys, можно найти все USB-устройства в каталогах, имена которых соответствуют физическим адресам USB-устройств.

ls /sys/bus/usb/devices
1-0:1.0  1-1  1-1:1.0  1-2  1-2:1.0  2-0:1.0 usb1  usb2

Теперь с этого сайта я узнал, что числа представляют физический путь к устройству, включая любой концентратор на пути:

По мере продвижения устройств в дереве USB и использования все большего количества концентраторов USB номер порта концентратора добавляется к строке, следующей за предыдущим номером порта концентратора в цепочке. Для дерева с двумя глубинами имя устройства выглядит так:

root_hub-hub_port-hub_port:config.interface

Таким образом, вопрос в том, почему USB-устройства проходят перечисление (и ОС присваивают им изменчивые номера), если они уже имеют уникальный способ идентификации, то есть номера шин, концентраторов и портов?

1 ответ1

3

Я думаю, что есть некоторая путаница. Забавные числа в Linux, похоже, являются ЛОГИЧЕСКИМИ РУЧКАМИ для USB-устройств, и они формируются после завершения процесса физического перечисления. Физические USB-адреса не похожи на имена дескрипторов, которые вы перечислили, это числа от 1 до 127, которые встроены в каждый USB-пакет, что угодно в этом диапазоне.

Оригинальный USB (1.1 и 2.0) разработан как "топология звезды", где все пакеты передаются на все устройства USB в дереве. Поэтому устройства должны иметь уникальные адреса, которые присваиваются им в процессе перечисления, чтобы иметь возможность декодировать надлежащие потоки. Хотя система знает все концентраторы и порты, к которым подключены устройства, она не определяет маршрут пакета, в пакетах USB нет информации о номерах концентраторов / портов, только адреса устройств. Однако это может отличаться для архитектуры USB 3.0, где пакеты могут быть явно маршрутизированы по номеру концентратора / порта, но процесс перечисления по-прежнему требуется по причинам обратной совместимости.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .