Мне пришло в голову, что я на самом деле не понимаю разницы между родными драйверами портов (то есть родными драйверами последовательных / параллельных / USB / и т.д. В каждой ОС) и драйверами внешних аппаратных устройств.

Например, если в моей ОС уже есть драйвер USB (для связи с USB-устройствами через интерфейс / порт USB), то почему моя новая блестящая веб-камера (или принтер) поставляется с собственным драйвером устройства?

Это то, что «драйверы портов / интерфейсов» имеют дело с настройкой электрических соединений с внешними / периферийными устройствами, и что драйверы устройств используют эти драйверы для подачи определенных команд ввода-вывода устройствам? Так что может быть что-то вроде:

Я прав здесь или далеко от базы? Другими словами, в приведенном выше сценарии используются ли два драйвера (один для устройства и один для порта USB)?

  • Если так, то каково разделение труда между двумя водителями?
  • Кроме того, почему большинство ОС имеют собственные драйверы портов (последовательный порт, USB и т.д.), И почему такие вещи, как клавиатура, мышь, веб-камеры, принтеры и т.д., Имеют свои собственные драйверы устройств?

1 ответ1

1

Вы не слишком далеки от базы, но и не совсем правы. Каждое USB-устройство объявляет себя членом определенного предопределенного класса устройств - HID, COM, Mass Storage, веб-камеры и т.д. Таким образом, эти устройства указывают ОС на то, что они соответствуют определенным четко определенным функциям. Операционная система загрузит универсальный драйвер для этого класса, и вы должны ожидать базовые функциональные возможности от этого устройства.

Однако многие производители устройств хотят отличаться от других и включают в себя некоторые расширенные функции, такие как автофокус, или специальные кнопки, или дополнительные форматы и т.д. В этом случае производитель предоставит свой собственный драйвер, который зависит от VID/PID. Если этот драйвер установлен, ОС будет загружать его каждый раз, так что у вас будет новая блестящая функциональность с вашего нового устройства. Способ реализации пользовательского драйвера может отличаться. Это может быть полностью настраиваемый драйвер, или это может быть какая-то модификация драйвера по умолчанию, использующая метод, известный как "драйвер фильтра" в мире Microsoft, что-то похожее на вашу картинку. Как драйверы для конкретного продукта реализованы в Android/Linux, лучше спросить у людей на соответствующих форумах.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .