что происходит при подключении нового USB-устройства? - PullRequest
3 голосов
/ 10 июня 2010

У меня есть встроенное устройство с подключением USB. Когда пользователь подключает устройство к ПК (Windows, OSX), как операционная система обнаруживает, какие драйверы устанавливать? Как мне выбрать драйверы мои ? Могут ли они находиться на каком-то центральном сервере (запущенном поставщиком ОС)?

Ответы [ 2 ]

7 голосов
/ 10 июня 2010

Для OS X:

Ну, я думаю, первая часть похожа на Windows. Однако драйвер (или, вернее, стек драйверов) выбирается процессом, известным как соответствие драйвера . Каждый драйвер поставляется в комплекте со специальным XML-файлом словаря, который описывает устройства, для которых предназначен драйвер.

Одним из ключей в словаре является ключ IOProviderClass, который примерно сообщает операционной системе, для какого семейства устройств предназначен драйвер. Загруженные драйверы могут предоставлять «кусочки», которые представляют собой интерфейсы, к которым могут подключаться другие драйверы. Какие драйверы пытаются подключить к нубам, определяется ключом IOProviderClass.

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

Этот новый драйвер может сам по себе предоставлять куски для подключения других драйверов. Например, подключение USB-накопителя приведет к тому, что в стеке USB будет создан кусочек для подключения драйвера блочного устройства SCSI. Как правило, это приводит к загрузке стандартного драйвера блочного устройства SCSI от Apple, который, в свою очередь, обеспечивает куски для драйверов BSD (по одному на раздел), которые, в свою очередь, создают узел устройства BSD в файловой системе dev.

Если вы хотите, чтобы ваш драйвер был выбран выше других, все, что вам нужно сделать, это добавить пары ключ-значение для устройства, для которого ваш драйвер, чтобы ваш драйвер получил действительно высокий балл. Обычно достаточно просто ввести ключи для идентификатора / модели вашего поставщика. Тем не менее, я думаю, что вы можете переопределить соответствующий метод (драйверы устройств написаны в ограниченном наборе C ++), чтобы дать вашему драйверу действительно высокий балл.

Это вид высокого уровня. Однако прошло уже несколько лет, , поэтому обязательно прочитайте текущие документы Apple .

6 голосов
/ 10 июня 2010

Это для Windows:

Когда устройство USB подключено к системе, драйвер шины USB получает уведомление.Драйвер шины отправляет на устройство стандартный USB-запрос (USB_DEVICE_DESCRIPTOR).При этом устройство сообщает свое имя и тип.(bDeviceClass / bDeviceSubClass / bDeviceProtocol).

С этой информацией Windows создает запись устройства в системе.Это Hardware-ID.Теперь система пытается найти универсальный драйвер, который может обрабатывать устройство (HID / UVC), или драйвер, который специально зарегистрировался для поддержки этого Hardware-ID.

Чтобы зарегистрировать драйвер в качестве обработчика для определенногоустройство, вы должны установить драйвер в систему, или вы должны предоставить Microsoft один, который они могут предоставить на своих серверах.

...