Драйвер устройства

редактировать
Компьютерная программа

В вычислениях используется драйвер устройства . компьютерная программа , которая управляет или управляет конкретным типом устройства, подключенного к компьютеру. Драйвер обеспечивает программный интерфейс с аппаратными устройствами, позволяя операционным системам и другим компьютерным программам получать доступ к аппаратным функциям без необходимости знать точные сведения об используемом оборудовании..

Драйвер связывается с устройством через компьютерную шину или подсистему связи, к которой подключается оборудование. Когда вызывающая программа вызывает подпрограмму в драйвере, драйвер выдает команды устройству. Как только устройство отправляет данные обратно драйверу, драйвер может вызывать подпрограммы в исходной вызывающей программе.

Драйверы зависят от оборудования и операционной системы. Обычно они обеспечивают обработку прерываний , необходимую для любого необходимого асинхронного зависящего от времени аппаратного интерфейса.

Содержание

  • 1 Цель
  • 2 Разработка
  • 3 Режим ядра vs.пользовательский режим
  • 4 Приложения
  • 5 Драйверы виртуальных устройств
  • 6 Драйверы с открытым исходным кодом
  • 7 API
  • 8 Идентификаторы
  • 9 См. также
  • 10 Ссылки
  • 11 Внешние ссылки

Назначение

Основная цель драйверов устройств - обеспечить абстракцию, действуя как транслятор между аппаратным устройством и приложениями или операционными системами, которые его используют. Программисты могут писать код приложения более высокого уровня независимо от того, какое конкретное оборудование использует конечный пользователь. Например, приложение высокого уровня для взаимодействия с последовательным портом может просто иметь две функции для «отправки данных» и «приема данных». На более низком уровне драйвер устройства, реализующий эти функции, будет взаимодействовать с конкретным контроллером последовательного порта, установленным на компьютере пользователя. Команды, необходимые для управления 16550 UART, сильно отличаются от команд, необходимых для управления преобразователем последовательного порта FTDI, но каждый аппаратно-зависимый драйвер устройства абстрагирует эти детали в тот же (или аналогичный) программный интерфейс.

Разработка

Написание драйвера устройства требует глубокого понимания того, как аппаратное и программное обеспечение работает для данной функции платформы. Поскольку для работы драйверам требуется низкоуровневый доступ к аппаратным функциям, драйверы обычно работают в среде с высокими привилегиями и могут вызвать проблемы в работе системы, если что-то пойдет не так. В отличие от этого, большинство программного обеспечения пользовательского уровня в современных операционных системах может быть остановлено без значительного воздействия на остальную систему. Даже драйверы, выполняющиеся в пользовательском режиме, могут вызвать сбой системы, если устройство запрограммировано ошибочно. Эти факторы делают диагностику проблем более сложной и опасной.

Таким образом, задача написания драйверов обычно ложится на инженеров-программистов или компьютерных инженеров, которые работают над разработкой оборудования. компании. Это потому, что они лучше, чем большинство посторонних, осведомлены о конструкции своего оборудования. Более того, в интересах производителей оборудования производителя традиционно считалось, что гарантировать, что их клиенты могут использовать их оборудование оптимальным образом. Обычно (LDD) пишется поставщиком операционной системы, а (PDD) реализуется производителем устройства. Однако в последние годы сторонние производители написали множество драйверов для проприетарных устройств, в основном для использования с бесплатными операционными системами с открытым исходным кодом . В таких случаях важно, чтобы производитель оборудования предоставил информацию о том, как устройство взаимодействует. Хотя эту информацию вместо этого можно получить с помощью обратного проектирования, это намного сложнее с оборудованием, чем с программным обеспечением.

Microsoft попыталась снизить нестабильность системы из-за плохо написанных драйверов устройств, создав новую структуру для разработки драйверов, которая называется Windows Driver Foundation (WDF). Сюда входит платформа драйверов пользовательского режима (UMDF), которая поощряет разработку определенных типов драйверов, в первую очередь тех, которые реализуют протокол на основе сообщений для связи со своими устройствами, в качестве пользовательского режима. драйверы. Если такие драйверы не работают, они не вызывают нестабильности системы. Модель Kernel-Mode Driver Framework (KMDF) по-прежнему позволяет разрабатывать драйверы устройств режима ядра, но пытается предоставить стандартные реализации функций, которые, как известно, вызывают проблемы, включая отмену операций ввода-вывода, управление питанием и поддержка устройств Plug and Play.

Apple имеет платформу с открытым исходным кодом для разработки драйверов на macOS, которая называется I / O Kit.

В средах Linux программисты могут создавать драйверы устройств как части ядра, отдельно как загружаемые модули или как драйверы пользовательского режима. (для определенных типов устройств, где существуют интерфейсы ядра, например, для устройств USB). Makedev включает список устройств в Linux, включая ttyS (терминал), lp (параллельный порт ), hd (диск), цикл и звук (в том числе микшер, секвенсор, dsp и аудио).

файлы Microsoft Windows .sys и Linux. ko файлы могут содержать загружаемые драйверы устройств. Преимущество загружаемых драйверов устройств заключается в том, что их можно загружать только при необходимости, а затем выгружать, тем самым экономя память ядра.

Режим ядра и режим пользователя

Драйверы устройств, особенно на современных платформах Microsoft Windows, могут работать в режиме ядра (Звоните 0 на CPU x86 ) или в пользовательском режиме (Ring 3 на CPU x86). Основным преимуществом запуска драйвера в пользовательском режиме является повышенная стабильность, поскольку плохо написанный драйвер устройства пользовательского режима не может вызвать сбой системы из-за перезаписи памяти ядра. С другой стороны, переходы между пользовательским режимом и режимом ядра обычно приводят к значительным накладным расходам производительности, что делает драйверы режима ядра предпочтительными для работы в сети с малой задержкой.

Пользовательский модуль может получить доступ к пространству ядра только с помощью системных вызовов. Программы конечного пользователя, такие как оболочка UNIX или другие приложения на основе графического интерфейса пользователя, являются частью пользовательского пространства. Эти приложения взаимодействуют с оборудованием через функции, поддерживаемые ядром.

Приложения

Из-за разнообразия современного оборудования и операционных систем драйверы работают в самых разных средах. Драйверы могут взаимодействовать с :

Общие уровни абстракции для драйверов устройств включают:

  • Для оборудования:
    • Непосредственное взаимодействие
    • Запись или чтение из регистр управления устройством
    • Использование интерфейса более высокого уровня (например, Video BIOS )
    • Использование другого драйвера устройства более низкого уровня (например, драйверы файловой системы, использующие драйверы диска)
    • Моделирование работы с оборудованием, делая что-то совершенно ди fferent
  • Для программного обеспечения:
    • Разрешение операционной системе прямого доступа к аппаратным ресурсам
    • Реализация только примитивов
    • Реализация интерфейса для программного обеспечения, не являющегося драйвером (например, TWAIN )
    • Реализация языка, иногда довольно высокого уровня (например, PostScript )

Таким образом, выбор и установка правильных драйверов устройств для данного оборудования часто является ключевым компонентом конфигурации компьютерной системы.

Драйверы виртуальных устройств

Драйверы виртуальных устройств представляют собой конкретный вариант драйверов устройств. Они используются для эмуляции аппаратного устройства, особенно в средах виртуализации, например, когда DOS Программа запускается на компьютере Microsoft Windows или когда гостевая операционная система запущена, например, на хосте Xen. Вместо включения гостевая операционная система для диалога с оборудованием, драйверы виртуальных устройств играют противоположную роль и эмулируют часть оборудования, так что гостевая операционная система и ее драйверы, работающие внутри виртуальной машины, могут иметь иллюзию доступа к реальному оборудованию. Попытки гостевой операционной системы получить доступ к оборудованию направляются на виртуальное устройство d river в операционной системе хоста, например, вызывает функцию. Драйвер виртуального устройства также может отправлять моделируемые события уровня процессора, такие как прерывания, в виртуальную машину.

Виртуальные устройства также могут работать в невиртуализированной среде. Например, виртуальный сетевой адаптер используется с виртуальной частной сетью, а виртуальное дисковое устройство используется с iSCSI. Хорошим примером драйверов виртуальных устройств может быть Daemon Tools.

. Существует несколько вариантов драйверов виртуальных устройств, таких как VxDs, VLM и VDD.

Драйверы с открытым исходным кодом

Solaris описания часто используемых драйверов устройств:

  • fas: быстрый / широкий контроллер SCSI
  • hme: Fast (10/100 Мбит / с) Ethernet
  • isp: Дифференциальные контроллеры SCSI и карта SunSwift
  • glm: (Gigabaud Link Module) Контроллеры UltraSCSI
  • scsi : Устройства с последовательным интерфейсом малых компьютеров (SCSI)
  • sf: soc + или Social Fibre Channel Arbitrated Loop (FCAL)
  • soc: контроллеры массива хранения SPARC (SSA) и устройство управления
  • social: последовательные оптические контроллеры для FCAL (soc +)

API

Идентификаторы

Устройство на шине PCI или USB идентифицируется двумя идентификаторами, которые состоят из 4 шестнадцатеричных Цифры каждый. Идентификатор поставщика идентифицирует поставщика устройства. Идентификатор устройства идентифицирует конкретное устройство от этого производителя / поставщика.

Устройство PCI часто имеет пару идентификаторов для основного чипа устройства, а также пару идентификаторов подсистем, которые идентифицируют поставщика, который может отличаться от производителя чипа.

См. Также

Ссылки

Внешние ссылки

Последняя правка сделана 2021-05-17 03:38:59
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте