Подсказки относительно драйвера USB, соответствующего для Mac OS X
Q: Я не могу заставить свой драйвер ядра соответствовать против моего USB-устройства. Что случилось?
A: Я не могу заставить свой драйвер ядра соответствовать против моего USB-устройства. Что случилось?
Могло быть много вещей, заставляющих Ваш драйвер не соответствовать, но наиболее распространенная ошибка является неправильной комбинацией свойства, вводит Ваше водительское Info.plist список свойств.
Драйвер USB, соответствующий, основывается на USB Общая Спецификация Класса. IOUSBFamily в сочетании с I/O Кит будет использовать тестовый счет для определения лучшего кандидата драйвера на определенное устройство.
Следующие таблицы показывают тестовые очки, полученные путем указания соответствующих ключей водительском Info.plist.
Обратите внимание на то, что Вы никогда не должны добавлять свое собственное IOProbeScore свойство к USB водительский список свойств. Кроме того, не добавляйте дополнительные ключи; только используйте сочетания клавиш, показанные в следующих таблицах.
Ключи | Комментарии | Тестовый счет |
|---|---|---|
idVendor + idProduct + bcdDevice |
| 100000 |
idVendor + idProduct |
| 90000 |
idVendor + bDeviceSubClass + bDeviceProtocol | Только если bDeviceClass является 0xFF (определенный поставщик). | 80000 |
idVendor + bDeviceSubClass | Только если bDeviceClass является 0xFF (определенный поставщик). | 70000 |
bDeviceClass + bDeviceSubClass + bDeviceProtocol | Только если bDeviceClass не является 0xFF. | 60000 |
bDeviceClass + bDeviceSubClass | Только если bDeviceClass не является 0xFF. | 50000 |
Ключи | Комментарии | Тестовый счет |
|---|---|---|
idVendor + idProduct + bInterfaceNumber + bConfigurationValue + bcdDevice |
| 100000 |
idVendor + idProduct + bInterfaceNumber + bConfigurationValue |
| 90000 |
idVendor + bInterfaceSubClass + bInterfaceProtocol | Только если bInterfaceClass является 0xFF (определенный поставщик). | 80000 |
idVendor + bInterfaceSubClass | Только если bInterfaceClass является 0xFF (определенный поставщик). | 70000 |
bInterfaceClass + bInterfaceSubClass + bInterfaceProtocol | Только если bInterfaceClass не является 0xFF. | 60000 |
bInterfaceClass + bInterfaceSubClass | Только если bInterfaceClass не является 0xFF. | 50000 |
Если Вашему драйверу все еще не удается загрузиться, удостоверьтесь что значение для CFBundleIdentifier свойство в IOKitPersonalities словарь является тем же значением как CFBundleIdentifier свойство для драйвера как показано в Перечислении 1.
Свойство Listing 1 CFBundleIdentifier в словаре индивидуальности.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
...
<key>CFBundleIdentifier</key>
<string>com.apple.dts.driver.HelloIOKit</string>
...
<key>IOKitPersonalities</key>
<dict>
<key>HelloIOKit</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.dts.driver.HelloIOKit</string>
<key>IOClass</key>
<string>com_apple_dts_driver_HelloIOKit</string>
...
</dict>
</dict>
...
</dict>
</plist> |
Если Ваш драйвер соответствует, когда Вы заменяете свое устройство в горячем режиме, но не, когда Ваше устройство присоединяется во время начальной загрузки, драйвер времени начальной загрузки мог бы соответствовать к Вашему устройству. Даже при том, что Ваш драйвер является лучшим соответствием, Набор I/O не завершит драйвер, который уже был данным контролем над устройством.
В этом случае необходимо будет добавить a OSBundleRequired свойство к Вашему водительскому списку свойств так Ваш драйвер также рассматривают для соответствия во время начальной загрузки.
Для получения дополнительной информации о загрузке KEXTs во время начальной загрузки посмотрите Загружающиеся Расширения ядра во Время начальной загрузки в Темах Программирования Расширения ядра документа.
Другие проблемы загрузки драйвера могут быть диагностированы с помощью общих методов поиска и устранения неисправностей Набора I/O. Одна полезная подсказка должна использовать режим диагностики kextload команды, чтобы попытаться загрузить Ваш драйвер вручную как показано в Перечислении 2
Опции Listing 2 Diagnostic для kextload команды.
$ kextload -nt HelloIOKit.kext |
Подстановочное соответствие
Как показано в предыдущем разделе, Общая Спецификация Класса детализирует точный характер того, как поля USB-устройства и интерфейсного дескриптора используются для соответствия драйверов. В некоторых случаях, однако, было бы удобно не должным быть создать многократные лица Набора I/O для указания различных устройств, поддерживающихся определенным драйвером. Например, если необходимо было поддерживать целый набор устройств от единственного поставщика, Вы могли просто указать индивидуальность, соответствовавшую ко всем идентификаторам продукта для того поставщика. Если тогда необходимо было обрезать поддерживаемый продукт IDs, Вы могли бы использовать probe метод драйвера, чтобы отрицать соответствовать к идентификаторам продукта вне диапазона, который может поддерживать драйвер. Это - идея позади понятия подстановочного соответствия.
В таблицах выше, можно заменить звездочкой * подстановочный символ для любого из полей от устройства или интерфейсного дескриптора. Тип значения свойства должен быть изменен от <integer> к <string> когда подстановочный символ используется как показано в Перечислении 3. Тестовый счет будет тогда сокращен на 1 000 для каждого указанного подстановочного знака. Например, драйвер устройства, соответствующий на idProduct и idVendor будет иметь тестовый счет 90 000. Если подстановочный знак указан для idProduct, тестовый счет будет сокращен на 1 000 - 89 000. Это означает, что драйвер для того же устройства, не имеющего подстановочного знака, превзойдет поддерживающее подстановочный знак.
Подстановочная индивидуальность соответствия перечисления 3 В качестве примера.
<key>IOKitPersonalities</key>
<dict>
<key>WildCardMatching</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.dts.driver.HelloIOKit</string>
<key>IOClass</key>
<string>com_apple_dts_driver_HelloIOKit</string>
<key>IOProviderClass</key>
<string>IOUSBDevice</string>
<key>idProduct</key>
<string>*</string>
<key>idVendor</key>
<integer>1452</integer>
</dict>
</dict> |
idProduct свойство может также соответствовать против указанного диапазона идентификаторов продукта, не имея необходимость реализовывать a probe метод для избавлений от нежелательных идентификаторов продукта. Это частичное соответствие сделано путем указания числового idProductMask свойство в водительской индивидуальности соответствия в дополнение к idProduct свойство. Эта маска будет поразрядным ANDed с каждым идентификатором продукта устройства кандидата прежде, чем сравнить его с idProduct свойство.
Перечисление 4 показывает, как указать соответствие на идентификаторах продукта между 4 752 (0x1290) и 4755 (0x1293). Значение idProductMask свойство 65532 (0xfffc). Таким образом любой идентификатор продукта будут считать соответствием, будучи ANDed с 0xfffc, равняющимся idProduct значение свойства 4 752.
Пример перечисления 4 использования idProductMask для соответствия диапазона идентификаторов продукта.
<key>IOKitPersonalities</key>
<dict>
<key>WildCardMatching</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.apple.dts.driver.HelloIOKit</string>
<key>IOClass</key>
<string>com_apple_dts_driver_HelloIOKit</string>
<key>IOProviderClass</key>
<string>IOUSBDevice</string>
<key>idProduct</key>
<integer>4752</integer>
<key>idProductMask</key>
<integer>65532</integer>
<key>idVendor</key>
<integer>1452</integer>
</dict>
</dict> |
История версии документа
| Дата | Примечания |
|---|---|
| 14.08.2008 | Добавленная документация о подстановочной функции соответствия Тайгера. Внесенные другие редакционные изменения. |
| 13.08.2008 | Добавленная документация о подстановочной функции соответствия Тайгера. Внесенные другие редакционные изменения. |
Добавленная документация о подстановочной функции соответствия Тайгера. Внесенные другие редакционные изменения. | |
| 08.08.2008 | Добавленная документация о подстановочной функции соответствия Тайгера. Внесенные другие редакционные изменения. |
Добавленная документация о подстановочной функции соответствия Тайгера. Внесенные другие редакционные изменения. | |
| 02.10.2001 | Новый документ, дающий некоторые подсказки относительно получения драйвера USB, соответствующего для работы. |