enum-usb
Создание
списка устройств на шине USB
Синтаксис:
enum-usb
[опции]
enum-usb
[опции,]validate
Поддерживаемые платформы:
Neutrino
Целевые платформы:
ARM,
PowerPC,
SH, x86
Опции:
Опции
утилиты enum-usb
разделяются запятыми, без пробелов. Используются следующие
опции:
cfg_file_path=путевое_имя
путевое_имя является
путем к конфигурационному файлу утилиты enum-usb.
Значение по умолчанию – /etc/enum-usb.conf.
check_MS_desc
Обратиться
к устройствам с запросом данных дескриптора Microsoft. По
умолчанию выключено. См. раздел "Дескрипторы Microsoft" далее.
iface_tbl_size=размер
размер
определяет максимальное количество интерфейсов, одновременно
управляемых утилитой enum-usb. Эти интерфейсы
могут быть на любом количестве устройств. Значение по
умолчанию – 50 интерфейсов.
USB_mgr_pathname=путевое_имя
путевое_имя является
путем к менеджеру ресурсов USB. Значение по умолчанию – /dev/io-usb/io-usb.
validate
Проверить
конфигурационный файл. Если используется эта опция, то утилита
enum-usb
выполняет анализ конфигурационного файла, выдает отчет о любых
обнаруженных в файле ошибках, после чего завершает работу.
verbose=уровень
Вывести
расширенную информацию в поток stdout
с заданным уровнем подробности. Если утилита enum-usb
используется в сочетании с enum-devices, то
необходимо установить опции вывода расширенной информации
утилиты enum-devices
для доступности расширенной информации в консоли.
Описание:
Разделы
описания enum-usb:
-
Обзор
-
Информация
об устройстве USB
-
Поведение
при перечислении одного устройства USB
-
Конфигурационный
файл enum-usb
-
Использование
enum-devices вместе с enum-usb
Обзор
Утилита enum-usb представляет
собой программу-перечислитель шины, вызываемую утилитой enum-devices
для обработки специфических для USB аспектов распознавания
устройств.
Поскольку
утилита enum-usb
вызывается утилитой enum-devices, опции enum-usb
указаны в выражении перечислителя в конфигурационных файлах enum-devices.
Пример.
enumerator("usb
verbose=10,cfg_file_path=/etc/enum-usb.conf")
По
умолчанию конфигурационным файлом для выражений перечислителя
является /etc/system/enum/common.
Утилита enum-usb сканирует шину
USB и записывает в стандартный поток вывода (stdout)
строку с описанием всех найденных устройств.
Менеджер-перечислитель устройств enum-devices
считывает информацию из этого потока и запускает требующиеся
для управления устройствами драйверы с помощью
конфигурационных файлов enum-devices.
При
удалении устройства USB из системы утилита enum-usb
сообщает об этом утилите enum-devices для
удаления запущенных для этого устройства драйверов.
Информация об устройстве USB
Утилита enum-usb предоставляет
утилите enum-devices
следующую информацию об интерфейсах устройства USB:
-
busno – номер шины USB
-
cfg – используемая устройством конфигурация USB
-
class – класс устройства или интерфейса;
-
devno – номер устройства USB
-
did – идентификатор устройства
-
iface – номер интерфейса USB
-
num_iface – число интерфейсов, доступных для выбранной
конфигурации устройства USB
-
proto – протокол устройства или интерфейса
-
rev – версия устройства
-
subclass – подкласс устройства или интерфейса
-
vid – идентификатор вендора
Для
получения дополнительной информации о данных, предоставляемых
утилитой enum-usb
в утилиту enum-devices см.
описание Set
конфигурационного файла утилиты enum-usb.
Дескрипторы Microsoft
Если
устройство (например устройство PFS) поддерживает дескрипторы
Microsoft, утилита enum-usb предоставляет
следующую дополнительную информацию:
-
mscomp – согласованный идентификатор Microsoft
-
msven – Microsoft идентификатор вендора
-
mssubcomp – вторичный согласованный идентификатор
Microsoft
Примечание.
Для наличия дескриптора Microsoft необходимо активировать
опцию check_MS_desc;
однако активация опции check_MS_desc
может привести к тому, что некоторые устройства перестанут
реагировать. Эту опцию следует активировать, только если
используются устройства PFS и на целевой системе активированы
другие функции, зависящие от данных дескриптора Microsoft.
Поведение при
перечислении одного устройства USB
Если enum-usb распознает только
одно устройство USB, она может
сообщить утилите enum-devices о
нескольких устройствах. В этом случае поведение определяется
значением класс устройства
устройства USB следующим образом:
класс
отличен от нуля (!=0)
Значение
для enum-usb:
использование каких-либо существующих на устройстве
интерфейсов независимо от прочих интерфейсов на устройстве
невозможно.
Утилита
сообщает о наличии одного пригодного к использованию
интерфейса для этого устройства и ожидает от утилиты enum-devices
запуска одного драйвера для управления этим устройством и его
интерфейсами.
класс
зависит от вендора (0xFF)
Значение
для enum-usb:
устройство управляется одним драйвером, предназначенным для
управления устройством этого вендора. Утилита сообщает о
наличии для этого устройства одного пригодного к использованию
интерфейса.
класс
зависит от интерфейса (=0)
Утилита enum-usb
сообщает о событии для каждого интерфейса, присутствующего для
текущей конфигурации устройства.
Управление
каждым интерфейсом этого устройства USB может осуществляться
независимо от других интерфейсов на устройстве, соответственно
утилиту enum-devices
можно настроить для запуска уникального драйвера для каждого
интерфейса USB, присутствующего для устройства USB.
Конфигурационный файл enum-usb
Конфигурационный
файл enum-usb
позволяет идентифицировать устройства USB по идентификатору
вендора, идентификатору устройства и серийному номеру для
контроля перечисления устройств утилитой enum-usb.
По умолчанию конфигурационным файлом является /etc/enum-usb.conf.
Для выбора другого конфигурационного файла используется опция
-c.
В конфигурационном файле используются следующие
опции:
-
Device – начать определение конфигурации устройств; см.
далее Device.
-
Ignore – передать утилите enum-usb указание игнорировать устройства USB; см. далее
Ignore.
-
Config – указать конфигурацию устройства USB; см. далее
Config.
-
Set –
указать специальный тег, добавляемый в отчеты устройства
USB для утилиты enum-devices; см. далее Set.
Каждая
опция должна указываться в отдельной строке. Строки
комментария начинаются с символа решетки ("#") и игнорируются
утилитой enum-usb.
Пробелы игнорируются.
Пример
конфигурационного файла enum-usb.conf
#Определить
используемую
конфигурацию для устройств IPOD
Device
vid=05AC,did=12*
Config class=03
Set
usr_spec_id=AppleIpod
#Не
распознавать это устройство
Device
vid=13FE,did=1D00
Ignore
Device
Опция Device
конфигурационного файла утилиты enum-usb
определяет начало определения конфигурации устройства. Все
опции, которые следуют за опцией Device
в конфигурационном файле, применяются к этому устройству до
нового экземпляра опции Device.
Опция Device определяет
устройство USB по следующим его параметрам:
Для
оператора опции Device
используется следующий формат:
Device
[vid=v],[did=d],[ser=s]
Существуют
следующие правила создания оператора опции Device:
-
В модели
выше параметры vvvv, dddd и s представляют собой шестнадцатеричные значения
для соответствия, а параметр s – строку
серийного номера.
-
Оператор
опции должен содержать не менее одного параметра.
-
Параметры
могут следовать в любом порядке и разделяются запятыми.
-
Если
устройство будет игнорироваться, параметр серийного номера
(ser) указывать не следует; см. далее Ignore.
-
Поскольку
оператор опции поддерживает сопоставление групповых
символов (см. fnmatch()), существует возможность сопоставления диапазона
устройств. Например, оператор опции did=05ac,vid=12* сопоставит определенного вендора с диапазоном
устройств, где значение "12*" соответствует диапазону
1200–12FF.
-
Если в
совпадающих строках групповые символы не содержатся, то в
них должен быть указан идентификатор вендора (vid) и
идентификатор устройства (did) в виде четырех цифр, при необходимости с
начальными нулями. Серийный номер является строкой, формат
и длина которой зависят от устройства.
Ignore
Оция Ignore указывает
утилите enum-usb
игнорировать устройство.
Использование
этой опции целесообразно при наличии устройства USB, драйвер
которого регистрируется для события вставки самого устройства,
а не запускается перечислителем. Игнорирование этого типа
устройства утилитой enum-usb предотвращает
возможные конфликты между перечислителем и драйвером, оба из
которых могут предпринять попытку подключения устройства
одновременно.
Примечание. Если для
устройства в enum-usb установлена опция
Ignore,
то определяющая устройство опция Device
должна указывать только идентификаторы устройства и вендора.
Config
Опция Config позволяет
пользователю указывать конфигурацию устройства USB,
используемую в случае поддержки перечисляемым устройством
нескольких конфигураций.
Если
опция Config
не используется, утилита enum-usb использует первую
выбранную конфигурацию устройства. Если опция Config
используется, но указанная конфигурация устройства
отсутствует, утилита enum-usb регистрирует
ошибку и не распознает устройство.
При
обнаружении указанного устройства утилита enum-usb
устанавливает для конфигурации устройства USB указанный в
опции Config
номер (Config
num=x) или первую
конфигурацию с интерфейсом, который соответствует комбинации
класса и подкласса, указанной в опции Config.
Выбор нескольких конфигураций
Если
устройство поддерживает несколько конфигураций или интерфейсов
для различных поколений, в конфигурационном файле утилиты enum-usb
можно указать несколько строк опции Config
для каждого устройства, упорядоченных по приоритетам. Утилита
enum-usb
использует первый оператор опции Config,
соответствующий устройству, для которого он приведен.
Создание операторов опции Config
Для
операторов опции Config
используется следующий формат:
Config
[class=xx],[subclass=xx]
или
Config
num=x
Правила
создания операторов опции Config:
-
В модели
выше параметр xx представляет собой шестнадцатеричные значения
для соответствия параметров class и subclass, а
параметр x – конфигурационное десятичное значение для
соответствия.
-
Оператор
опции должен содержать не менее одного параметра.
-
Оператор
опции может указать любой из следующих параметров:
-
Совпадающие
строки для параметров class и subclass должны быть представлены двумя цифрами, с
начальным нулем при необходимости.
Примечание.
-
При
определении конфигурационного номера указывается номер
ссылки на значение конфигурации, а не ее индекс. Например,
при наличии для устройства двух конфигураций, их
обозначение может быть отличным от "конфигурация один" и
"конфигурация два". Для определения значения конфигурации
для устройства см. вывод утилиты USB (usb -vv).
-
В QNX
рекомендуется по возможности использовать параметры class и subclass вместо
конфигурационного номера (num). В отношении некоторых устройств, среда, в
которой они используются, может влиять на их сообщения о
конфигурациях. Этот признак устройства означает, что в
различных средах, один и тот же конфигурационный номер
может представлять различные конфигурации.
-
Параметр
конфигурационного номера для опции Config следует использовать только при
наличии уверенности в неизменности используемых
конфигурационных номеров, т.е. если номера при любых
обстоятельствах представляют одни и те же конфигурации.
Set
Опция Set позволяет
указать пользовательскую строку для передачи утилите enum-devices.
Способы применения этой строки:
-
Эту
строку можно использовать для оказания утилите enum-devices содействия в сопоставлении устройства и
определенной конфигурации утилиты enum-usb.
-
Строка
может применяться к конфигурации утилиты enum-devices; например, в качестве аргумента для запускаемого
драйвера.
В настоящее время существуют два
определенных пользовательских тега, которые утилита enum-usb
может передать утилите enum-devices:
Создание операторов
опции Set
Операторы
опции Set
в конфигурационном файле утилиты enum-usb
должны быть указаны следующим образом:
-
Если
раздел Device не содержит оператор Config, операторы Set можно
указать после оператора Device.
-
Если
конфигурационный файл содержит операторы Config, операторы Set должны
находиться непосредственно после операторов Config, к которым они применяются.
Пример.
Device
vid=05AC,did=12*
Config class=01
Set
usr_spec_id=AppleIPODwithDigitalAudio
Config class=08
Set
usr_spec_id=AppleIPODUMASSmode
user_spec_id
Применение
опции Set
user_spec_id
целесообразно для создания привязки нескольких устройств или
диапазона устройств к одной конфигурации утилиты enum-devices.
Варианты использования:
-
Для
подтверждения соответствия критериям, и, таким образом,
запуска одного драйвера для всех связанных устройств.
-
Для
передачи в качестве аргумента подходящей конфигурации, и,
таким образом, представления общего компонента системы,
состоящего из нескольких запущенных драйверов.
Для
оператора опции Set
user_spec_id
используется следующий формат:
Set
usr_spec_id=x
Правила
создания оператора опции Set
user_spec_id:
inc_user_spec_id
Применение
опции Set
inc_user_spec_id
целесообразно для создания привязки нескольких устройств или
диапазона устройств с одновременным предоставлением
уникального для устройства суффикса с автоматическим
приращением, который присоединяется к предоставленной
пользователем строке. Поскольку конфигурационные файлы утилиты
enum-devices
не поддерживают групповые символы, эта опция может
использоваться только как аргумент, переданный соответствующей
конфигурации.
Свойства
суффикса, присоединенного к предоставленной пользователем
строке с помощью этой опции:
-
извлекается
из разделяемого пула
-
зарезервирован
для указанного имени
-
деблокируется
при удалении устройства
-
может
быть повторного использован после деблокирования
-
запускает
автоматическое приращение от нуля
Пример.
Поведение при использовании примера конфигурации inc_usr_spec_id=/fs/ipod:
-
При
подключении первого iPod к главной системе все события
вставки, относящиеся к этому устройству, содержат тег inc_usr_spec_id=/fs/ipod0.
-
При
подключении второго iPod к главной системе все события
вставки, относящиеся к этому устройству, содержат тег inc_usr_spec_id=/fs/ipod1 и т.д. для всех дальнейших подключаемых к
системе устройств iPod.
-
При
удалении второго устройства iPod суффикс 1 освобождается и будет использован повторно для
следующего вставленного iPod.
Примечание.
-
Если для
записи устройства в конфигурационном файле (enum-usb.conf) утилиты enum-usb
требуется приращение суффикса устройства от нуля, а не от
значения из разделяемого пула, то для записи устройства в
конфигурационном файле используется уникальный
идентификатор inc_
usr_spec_id.
-
Если
значение inc_usr_spec_id является путевым именем, то для резервирования
суффикса используется базовое имя: например, inc_usr_spec_id=/fs/ipod будет разделять пул суффиксов с inc_usr_spec_id=ipod.
Для
оператора опции Set
inc_user_spec_id
используется следующий формат:
Set
inc_usr_spec_id=x
Правила
создания оператора опции Set
inc_user_spec_id:
-
В модели
выше x представляет собой строку без пробельных
символов.
-
Длина
строки ограничена 1024 символами, включая присоединенный
суффикс.
Использование
enum-devices
вместе с enum- usb
При
запуске утилита enum-devices запускает
утилиту enum-usb.
Для активации запуска утилиты enum-usb
утилитой enum-devices
необходимо добавить утилиту enum-usb в общий файл,
доступ к которому имеют утилиты enum-devices
и enum-usb.
Это выполняется следующим образом:
all
config(include)
config(overrides)
config(devices)
enumerator(usb)
Для
ознакомления с полным описанием формата конфигурационного
файла утилиты enum-devices и для
получения дополнительной информации об использовании утилиты enum-devices
см. enum-devices
в руководстве по утилитам.
Примеры:
Ниже
приведен пример запуска утилиты enum-usb,
в котором указан путь к конфигурационному файлу и установлено
максимальное число интерфейсов:
#
enum-usb
cfg_filepath=/etc/enum-usb-custom.conf,iface_tbl_size=32
enum-usb.conf
В этом примере утилите enum-devices
требуется запустить драйвер для устройства iPod с несколькими
различными идентификаторами устройства. Вместо использования
конфигурации enum-devices, которая
содержит запись для каждой комбинации vid
и did,
применяется указанный пользователем идентификатор, который
представляет набор устройств iPod.
#Определить
используемую
конфигурацию для устройств iPod
Device
vid=05AC,did=12*
Config class=03
Set
usr_spec_id=AppleIpod
Конфигурационный файл enum-devices
# Если
классом является "AUDIO", подклассом – "STREAMING"
# и
присутствует строка "AppleIpod",
# запустить
администратор io-audio.
device(usb,
class=01, subclass=01, usr_spec_id=AppleIpod)
driver(io-audio
"-dipod busno=$(busno),devno=$(devno),
cap_name=ipod-$(busno)-$(devno),
ipod_mount=/fs/ipod-$(busno)-$(devno)")
