Могу ли я связать USB-устройство из /sys с определенным USB-разъемом из Dmidecode?

Из документов zsh5.5.1 дляCONDITIONAL EXPRESSIONS

For compatibility, if there is a single argument that is not syntactically significant, typically a variable, the condition is treated as a test for whether the expression expands as a string of non-zero length. In other words, [[ $var ]] is the same as [[ -n $var ]]. It is recommended that the second, explicit, form be used where possible.

С исходным деревом вокруг,

% grep -rl 'if there is a single argument'.
./Doc/Zsh/cond.yo
% git blame./Doc/Zsh/cond.yo | grep 'if there is a single argument'
d082827c83 (Jun T             2014-05-18 22:03:35 +0900 198) For compat...

Проверка git logпоказывает, что изменение кода произошло немного раньше, чем документация:

commit 9d47e8398d299e53ffe4e7ddf3731d2fedae9948
...
Date:   Tue May 13 08:16:50 2014 -0700

    32609: [[ $var ]] behaves as [[ -n $var ]] for bash/ksh compatibility

Отображение файла ChangeLogв git tagмне непонятно, но кажется zsh5.0.6 (Чт 28 авг 19 :07 :04 2014 +0100 )— первая версия с этим изменением.

3
05.06.2021, 19:47
1 ответ

Вывод dmidecodeоснован на данных SMBIOS.

По-видимому, это -последняя версия спецификации SMBIOS на момент написания этой статьи.

Нижняя половина страницы 70 описывает структуру данных для информации о разъеме порта. Единственными значимыми значениями являются дескриптор структуры DMI (, простое 16-битное -число ), значения типа внутреннего и внешнего разъема и две строки, описывающие идентификатор разъема на системной плате и на внешней стороне корпуса., соответственно.

Только номер дескриптора будет уникальным для конкретного разъема, поэтому только он может использоваться в качестве идентификатора, который может связать конкретное USB-устройство с информацией о разъеме SMBIOS/DMI. Но не похоже, что на аппаратной стороне USB есть что-то, что могло бы ссылаться на эти номера, чтобы указать, какой разъем принадлежит какому устройству.

Кроме того, usb1и usb2в списке /sys/bus/usb/devicesотносятся не к отдельным разъемам, а к разным шинам USB . Система USB 3.x всегда будет иметь как минимум две шины :: одну шину для работы со скоростями USB 2 и более ранних версий, а другую шину для скоростей USB 3+. Это отражает тот факт, что более старые скорости используют один набор проводов данных, а более новые сверхбыстрые режимы -передачи данных USB3.x будут использовать другой набор проводов данных. Каждая шина обычно имеет собственный корневой концентратор, который может иметь различное количество разъемов USB.

Таким образом, чтобы связать конкретную информационную структуру соединителя DMI с конкретным устройством порта USB, дескриптор концентратора USB должен иметь поле данных, которое задает соответствующий дескриптор структуры DMI.

В качестве альтернативы, информация об устройстве PCI контроллера USB должна включать список дескрипторов DMI, принадлежащих этому контроллеру, но это позволит только идентифицировать, какой набор портов USB принадлежит какому контроллеру, а не уникальную идентификацию конкретный порт.

К сожалению,Я не могу найти какое-либо поле данных в информации о шине USB или PCI, которое содержало бы такие дескрипторы DMI или эквивалентные описания портов. Поэтому я боюсь, что ответ будет таким: «Нет, в настоящее время, как правило, невозможно связать идентификаторы физических портов с отдельными объектами USB-шины/порта Linux».

Некоторые системы с названиями -торговых марок могут иметь некоторые расширения данных шины, специфичные для производителя -, которые фактически включают эту информацию, но до тех пор, пока не существует широко -принятой стандартной практики, согласно которой можно было бы положиться, общий ответ останется «нет, эта информация недоступна».

2
28.07.2021, 11:26

Теги

Похожие вопросы