Для OS X:
Ну, я думаю, первая часть похожа на Windows. Однако драйвер (или, вернее, стек драйверов) выбирается процессом, известным как соответствие драйвера . Каждый драйвер поставляется в комплекте со специальным XML-файлом словаря, который описывает устройства, для которых предназначен драйвер.
Одним из ключей в словаре является ключ IOProviderClass, который примерно сообщает операционной системе, для какого семейства устройств предназначен драйвер. Загруженные драйверы могут предоставлять «кусочки», которые представляют собой интерфейсы, к которым могут подключаться другие драйверы. Какие драйверы пытаются подключить к нубам, определяется ключом IOProviderClass.
Так, например, когда вы подключаете USB-накопитель к вашему Mac, уже загруженный драйвер контроллера USB обнаруживает это и предоставляет кусочек для устройства. Низкоуровневый драйвер USB выбирается путем сопоставления драйверов - проверка ключа / значений в словаре в сравнении со значениями, полученными с устройства, например, идентификатор поставщика, тип устройства и т. д., и оценка выводится для каждого драйвера соответствующего класса провайдера ввода-вывода. Тот, кто набрал наибольшее количество очков, прикреплен к нубу.
Этот новый драйвер может сам по себе предоставлять куски для подключения других драйверов. Например, подключение USB-накопителя приведет к тому, что в стеке USB будет создан кусочек для подключения драйвера блочного устройства SCSI. Как правило, это приводит к загрузке стандартного драйвера блочного устройства SCSI от Apple, который, в свою очередь, обеспечивает куски для драйверов BSD (по одному на раздел), которые, в свою очередь, создают узел устройства BSD в файловой системе dev.
Если вы хотите, чтобы ваш драйвер был выбран выше других, все, что вам нужно сделать, это добавить пары ключ-значение для устройства, для которого ваш драйвер, чтобы ваш драйвер получил действительно высокий балл. Обычно достаточно просто ввести ключи для идентификатора / модели вашего поставщика. Тем не менее, я думаю, что вы можете переопределить соответствующий метод (драйверы устройств написаны в ограниченном наборе C ++), чтобы дать вашему драйверу действительно высокий балл.
Это вид высокого уровня. Однако прошло уже несколько лет, , поэтому обязательно прочитайте текущие документы Apple .