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

Программный интерфейс для подключенных устройств

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

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

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

Цель

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

Разработка

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

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

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

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

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

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

Уровни привилегий

В зависимости от операционной системы драйверам устройств может быть разрешено работать на различных уровнях привилегий . Выбор уровня привилегий драйверов во многом определяется типом ядра , используемого операционной системой. Операционная система, использующая монолитное ядро , например, ядро ​​Linux , обычно запускает драйверы устройств с теми же привилегиями, что и все другие объекты ядра. Напротив, система, разработанная вокруг микроядра , например, Minix , размещает драйверы как процессы, независимые от ядра, но использующие его для основных функций ввода-вывода и для передачи сообщений между пользовательскими программами и друг другом. [5] В Windows NT , системе с гибридным ядром , драйверы устройств обычно работают либо в режиме ядра , либо в режиме пользователя . [6]

Наиболее распространенным механизмом разделения памяти на различные уровни привилегий является использование защитных колец . Во многих системах, например, с процессорами x86 и ARM , переключение между кольцами приводит к снижению производительности, фактор, который разработчики операционных систем и инженеры встроенного программного обеспечения учитывают при создании драйверов для устройств, которые предпочтительно запускать с низкой задержкой, например, сетевых карт . Основным преимуществом запуска драйвера в пользовательском режиме является повышение стабильности, поскольку плохо написанный драйвер устройства пользовательского режима не может вызвать сбой системы путем перезаписи памяти ядра. [7]

Приложения

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

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

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

Поэтому выбор и установка правильных драйверов устройств для данного оборудования часто является ключевым компонентом конфигурации компьютерной системы. [10]

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

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

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

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

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

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

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

API-интерфейсы

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

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

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

Безопасность

На компьютерах часто работает множество разнообразных и настраиваемых драйверов устройств, работающих в ядре операционной системы (ОС), которые часто содержат различные ошибки и уязвимости , что делает их мишенью для эксплойтов . [17] Злоумышленник , использующий метод Bring Your Own Vulnerable Driver (BYOVD), устанавливает любой подписанный старый сторонний драйвер с известными уязвимостями, которые позволяют внедрить вредоносный код в ядро. [18] Драйверы, которые могут быть уязвимы, включают драйверы для WiFi и Bluetooth, [19] [20] игровые/графические драйверы, [21] и драйверы для принтеров. [22]

Отсутствуют эффективные инструменты обнаружения уязвимостей ядра, особенно для ОС с закрытым исходным кодом, таких как Microsoft Windows [23] , где исходный код драйверов устройств в основном является закрытым и недоступен для изучения, [24] а драйверы часто имеют много привилегий. [25] [26] [27] [28]

Группа исследователей безопасности считает отсутствие изоляции одним из основных факторов, подрывающих безопасность ядра , [29] и опубликовала структуру изоляции для защиты ядер операционных систем, в первую очередь монолитного ядра Linux , драйверы которого, по их словам, получают около 80 000 коммитов в год. [30] [31]

Важным соображением при проектировании ядра является поддержка, которую оно обеспечивает для защиты от сбоев ( отказоустойчивость ) и от вредоносного поведения ( безопасность ). Эти два аспекта обычно не различаются четко, и принятие этого различия в проектировании ядра приводит к отказу от иерархической структуры для защиты . [32]

Механизмы или политики, предоставляемые ядром, можно классифицировать по нескольким критериям, включая: статические (применяемые во время компиляции ) или динамические (применяемые во время выполнения ); упреждающие или пост-обнаруживающие; в соответствии с принципами защиты, которым они удовлетворяют (например, Деннинг [33] [34] ); поддерживаются ли они оборудованием или основаны на языке; являются ли они в большей степени открытым механизмом или политикой привязки; и многое другое.

Смотрите также

Ссылки

  1. ^ ab "Что такое драйвер всех устройств?". WhatIs.com . TechTarget. Архивировано из оригинала 13 февраля 2021 г. Получено 19 марта 2018 г.
  2. ^ EMC Education Services (2010). Хранение и управление информацией: хранение, управление и защита цифровой информации. John Wiley & Sons. ISBN 9780470618332. Архивировано из оригинала 2021-02-13 . Получено 2020-11-10 .
  3. ^ Берк, Тимоти (1995). Написание драйверов устройств: учебник и справочник. Digital Press. ISBN 9781555581411. Архивировано из оригинала 2021-01-26 . Получено 2016-08-05 .
  4. ^ "MAKEDEV — Linux Command — Unix Command". Linux.about.com. 2009-09-11. Архивировано из оригинала 2009-04-30 . Получено 2009-09-17 .
  5. ^ Таненбаум, Эндрю; Вудхалл, Альберт (2006). Операционные системы, проектирование и реализация (3-е изд.). Аппер Сэдл Ривер, Нью-Джерси: Pearson Pretence Hall. стр. 256. ISBN 0-13-142938-8.
  6. ^ Йосифович, Павел; Ионеску, Алекс; Руссинович, Марк; Соломон, Дэвид (2017). Внутреннее устройство Windows, часть 1 (седьмое изд.). Редмонд, Вашингтон: Microsoft Press. ISBN 978-0-7356-8418-8.
  7. ^ "Введение в инфраструктуру драйверов пользовательского режима (UMDF)". Microsoft . 2006-10-10. Архивировано из оригинала 2010-01-07 . Получено 2008-03-04 .
  8. ^ Дебора Морли (2009). Understanding Computers 2009: Today and Tomorrow. Cengage Learning. ISBN 9780324830132. Архивировано из оригинала 2021-06-09 . Получено 2020-11-10 .
  9. ^ Компьютерная периферия и интерфейсы. Технические публикации Пуна. Январь 2008. С.  5–8 . ISBN 978-8184314748. Получено 2016-05-03 .[ постоянная мертвая ссылка ‍ ]
  10. ^ «Что такое драйверы устройств и зачем они нам нужны?». drivers.com . 17 апреля 2015 г. Архивировано из оригинала 20 ноября 2016 г. Получено 19 марта 2018 г.
  11. ^ "CCISS". SourceForge . 2010. Архивировано из оригинала 2010-08-21 . Получено 2010-08-11 . Драйверы для контроллеров HP (ранее Compaq) Smart Array, которые обеспечивают аппаратные возможности RAID.
  12. ^ Рассел, Стив и др. (2003-10-21). Сокращения и акронимы. IBM International Technical Support Organization. стр. 207. ISBN 0-7384-2684-9. Получено 14 августа 2011 г. {{cite book}}: |work=проигнорировано ( помощь ) [ постоянная мертвая ссылка ‍ ]
  13. ^ "Патент США 5969841 - Модуль связи Gigabaud с сигналом обнаружения принимаемой мощности". PatentStorm LLC. Архивировано из оригинала 2011-06-12 . Получено 2009-09-08 . Улучшенный модуль связи Gigabaud (GLM) предназначен для выполнения двунаправленной передачи данных между хост-устройством и последовательной средой передачи.
  14. ^ "Unified Audio Model (Windows CE 5.0)". Microsoft Developer Network . 14 сентября 2012 г. Архивировано из оригинала 2017-06-22 . Получено 2016-09-19 .
  15. ^ Dell US. «Что такое драйверы DCH и почему вам нужно о них знать? | Dell US». www.dell.com . Получено 29.10.2020 .
  16. ^ "dxd - dynax driver framework: Главная страница". dxd.dynax.at . Архивировано из оригинала 2016-05-29 . Получено 2016-09-19 .
  17. ^ Талеби, Сейед Мохаммадджавад Сейед; Таваколи, Хамид; Чжан, Ханг; Чжан, Чжэн; Сани, Ардалан Амири; Цянь, Чжиюнь (2018). Charm: Содействие динамическому анализу драйверов устройств мобильных систем. стр.  291–307 . ISBN 9781939133045. Архивировано из оригинала 5 ноября 2022 г. . Получено 5 ноября 2022 г. .
  18. ^ Гудин, Дэн (14 октября 2022 г.). «Как ошибка Microsoft открыла миллионы ПК для мощных атак вредоносного ПО». Ars Technica . Архивировано из оригинала 8 ноября 2022 г. Получено 8 ноября 2022 г.
  19. ^ Ридли, Джейкоб (9 февраля 2022 г.). «Вы захотите обновить драйверы Wi-Fi и Bluetooth сегодня». PC Gamer . Архивировано из оригинала 5 ноября 2022 г. Получено 5 ноября 2022 г.
  20. ^ «Беспроводные атаки „BlueBorne“ нацелены на миллиарды устройств Bluetooth». threatpost.com . Архивировано из оригинала 5 ноября 2022 г. . Получено 5 ноября 2022 г. .
  21. ^ Спадафора, Энтони (12 января 2022 г.). «Установка игровых драйверов может сделать ваш ПК уязвимым для кибератак». TechRadar . Архивировано из оригинала 5 ноября 2022 г. . Получено 5 ноября 2022 г. .
  22. ^ "HP исправляет уязвимый драйвер, скрывавшийся в принтерах в течение 16 лет". ZDNET . Архивировано из оригинала 5 ноября 2022 г. . Получено 5 ноября 2022 г. .
  23. ^ Пан, Цзяньфэн; Ян, Гуанлу; Фань, Сяокао (2017). Digtool: {основанная на виртуализации} платформа для обнаружения уязвимостей ядра. стр.  149–165 . ISBN. 9781931971409. Получено 5 ноября 2022 г. .
  24. ^ Кинг, Бертель (18 июня 2022 г.). «Закрытый исходный код против открытого исходного кода драйверов оборудования: почему это важно». MUO . Архивировано из оригинала 5 ноября 2022 г. . Получено 5 ноября 2022 г. .
  25. ^ Бранскомб, Мэри (7 апреля 2022 г.). «Как Microsoft блокирует уязвимые и вредоносные драйверы в Defender, сторонних инструментах безопасности и в Windows 11». TechRepublic . Архивировано из оригинала 5 ноября 2022 г. . Получено 5 ноября 2022 г. .
  26. ^ Гудин, Дэн (5 октября 2022 г.). «Не видно исправления для лазейки шириной в милю, которая годами терзала ключевую защиту Windows». Ars Technica . Архивировано из оригинала 5 ноября 2022 г. Получено 5 ноября 2022 г.
  27. ^ Дэвенпорт, Корбин. «Атаки «Bring Your Own Vulnerable Driver» ломают Windows». How-To Geek . Архивировано из оригинала 5 ноября 2022 г. Получено 5 ноября 2022 г.
  28. ^ «Оповещение системы безопасности Windows 10: уязвимости обнаружены в более чем 40 драйверах». BleepingComputer . Архивировано из оригинала 5 ноября 2022 г. . Получено 5 ноября 2022 г. .
  29. ^ "Fine-grained kernel isolation". mars-research.github.io . Архивировано из оригинала 15 сентября 2022 г. . Получено 15 сентября 2022 г. .
  30. ^ Фетцер, Мэри. «Автоматическая изоляция драйверов устройств защищает от ошибок в операционных системах». Университет штата Пенсильвания через techxplore.com . Архивировано из оригинала 15 сентября 2022 г. Получено 15 сентября 2022 г.
  31. ^ Хуан, Юнчжэ; Нараянан, Викрам; Детвейлер, Дэвид; Хуан, Кайминг; Тан, Ганг; Йегер, Трент; Бурцев, Антон (2022). "KSplit: Автоматизация изоляции драйверов устройств" (PDF) . Архивировано (PDF) из оригинала 15 сентября 2022 г. . Получено 15 сентября 2022 г. .
  32. ^ Вульф 1974 стр.337–345
  33. ^ Деннинг 1976
  34. ^ Swift 2005, стр. 29 цитата: «изоляция, контроль ресурсов, проверка решений (проверка) и устранение ошибок».
  • Центр разработки оборудования для Windows
  • Списки совместимого оборудования Linux и драйверы Linux
  • Понимание современных драйверов устройств (Linux)
  • BinaryDriverHowto, Ubuntu.
  • Источник драйверов Linux
Получено с "https://en.wikipedia.org/w/index.php?title=Device_driver&oldid=1272857603"