Драйвер устройства
Операционные системы |
---|
Общие особенности |
В контексте операционной системы драйвер устройства — это компьютерная программа , которая управляет или управляет определенным типом устройства , подключенного к компьютеру или автомату . [1] Драйвер обеспечивает программный интерфейс для аппаратных устройств, позволяя операционным системам и другим компьютерным программам получать доступ к функциям оборудования без необходимости знать точные сведения об используемом оборудовании.
Драйвер связывается с устройством через компьютерную шину или подсистему связи, к которой подключается оборудование. Когда вызывающая программа вызывает подпрограмму в драйвере, драйвер передает команды устройству (управляет им). Как только устройство отправляет данные обратно драйверу, драйвер может вызывать процедуры исходной вызывающей программы.
Драйверы зависят от оборудования и операционной системы. Обычно они обеспечивают обработку прерываний , необходимую для любого необходимого асинхронного аппаратного интерфейса, зависящего от времени. [2]
Цель [ править ]
Основная цель драйверов устройств — обеспечить абстракцию, действуя в качестве переводчика между аппаратным устройством и приложениями или операционными системами , которые его используют. [1] Программисты могут писать код приложения более высокого уровня независимо от того, какое конкретное оборудование использует конечный пользователь.Например, приложение высокого уровня для взаимодействия с последовательным портом может просто иметь две функции: «отправка данных» и «получение данных». На более низком уровне драйвер устройства, реализующий эти функции, будет взаимодействовать с конкретным контроллером последовательного порта, установленным на компьютере пользователя. Команды, необходимые для управления UART 16550, сильно отличаются от команд, необходимых для управления преобразователем последовательного порта FTDI , но каждый драйвер устройства, специфичный для конкретного оборудования, абстрагирует эти детали в один и тот же (или аналогичный) программный интерфейс.
Развитие [ править ]
Написание драйвера устройства требует глубокого понимания того, как аппаратное и программное обеспечение работает для конкретной функции платформы . Поскольку для работы драйверам требуется низкоуровневый доступ к функциям оборудования, драйверы обычно работают в среде с высокими привилегиями и могут вызвать проблемы в работе системы, если что-то пойдет не так. Напротив, большую часть программного обеспечения пользовательского уровня в современных операционных системах можно остановить, не оказывая существенного влияния на остальную часть системы. Даже драйверы, работающие в пользовательском режиме, могут привести к сбою системы, если устройство запрограммировано ошибочно . Эти факторы делают диагностику проблем более трудной и опасной. [3]
Таким образом, задача написания драйверов обычно ложится на плечи инженеров-программистов или компьютерных инженеров , работающих в компаниях, занимающихся разработкой аппаратного обеспечения. Это потому, что они имеют лучшую информацию о конструкции своего оборудования, чем большинство посторонних. Более того, традиционно считалось, что в интересах производителя оборудования гарантировать, что его клиенты смогут использовать свое оборудование оптимальным образом. Обычно драйвер логического устройства (LDD) пишется поставщиком операционной системы, а драйвер физического устройства (PDD) реализуется поставщиком устройства. Однако в последние годы производители, не являющиеся поставщиками, написали множество драйверов для проприетарных устройств, в основном для использования со свободными операционными системами и операционными системами с открытым исходным кодом . В таких случаях важно, чтобы производитель оборудования предоставил информацию о том, как устройство обменивается данными. Хотя вместо этого эту информацию можно получить путем реверс-инжиниринга , с аппаратным обеспечением это гораздо сложнее, чем с программным обеспечением.
Microsoft попыталась снизить нестабильность системы из-за плохо написанных драйверов устройств, создав новую среду для разработки драйверов, называемую Windows Driver Frameworks (WDF). Сюда входит платформа драйверов пользовательского режима (UMDF), которая поощряет разработку определенных типов драйверов — в первую очередь тех, которые реализуют протокол на основе сообщений для связи со своими устройствами — в качестве драйверов пользовательского режима. Если такие драйверы работают неправильно, они не вызывают нестабильности системы. Модель Kernel -Mode Driver Framework (KMDF) по-прежнему позволяет разрабатывать драйверы устройств режима ядра, но пытается предоставить стандартные реализации функций, которые, как известно, вызывают проблемы, включая отмену операций ввода-вывода, управление питанием, а также подключение и подключение. поддержка игровых устройств.
У Apple есть платформа с открытым исходным кодом для разработки драйверов для macOS , которая называется I/O Kit.
В средах Linux программисты могут создавать драйверы устройств как части ядра , отдельно как загружаемые модули или как драйверы пользовательского режима (для определенных типов устройств, где существуют интерфейсы ядра, например для устройств USB). Makedev включает список устройств в Linux, включая ttyS (терминал), lp ( параллельный порт ), hd (диск), цикл и звук (к ним относятся микшер , секвенсор , dsp и аудио). [4]
Файлы Microsoft Windows .sys и файлы Linux .ko могут содержать загружаемые драйверы устройств. Преимущество загружаемых драйверов устройств состоит в том, что их можно загружать только при необходимости, а затем выгружать, что позволяет экономить память ядра.
Уровни привилегий [ править ]
В зависимости от операционной системы драйверам устройств может быть разрешен запуск с различными уровнями привилегий . Выбор уровня привилегий, на котором находятся драйверы, во многом определяется типом ядра, которое использует операционная система. Операционная система, использующая монолитное ядро , например ядро Linux , обычно запускает драйверы устройств с теми же привилегиями, что и все другие объекты ядра. Напротив, системы, разработанные на основе микроядра , такие как Minix , будут размещать драйверы как процессы, независимые от ядра, но использующие его для основных функций ввода-вывода и для передачи сообщений между пользовательскими программами и друг другом. [5] В Windows NT , системе с гибридным ядром , драйверы устройств обычно работают либо в режиме ядра , либо в режиме пользователя . [6]
Наиболее распространенным механизмом разделения памяти на различные уровни привилегий является использование защитных колец . Во многих системах, например, с процессорами x86 и ARM , переключение между кольцами приводит к снижению производительности — фактор, который разработчики операционных систем и инженеры встроенного программного обеспечения учитывают при создании драйверов для устройств, которые предпочитают работать с низкой задержкой, таких как сетевые устройства. интерфейсные карты . Основным преимуществом запуска драйвера в пользовательском режиме является повышение стабильности, поскольку плохо написанный драйвер устройства пользовательского режима не может привести к сбою системы из-за перезаписи памяти ядра. [7]
Приложения [ править ]
Из-за разнообразия современных [update] аппаратного обеспечения и операционных систем, драйверы работают в самых разных средах. [8] Драйверы могут взаимодействовать с:
- Принтеры
- Видеоадаптеры
- Сетевые карты
- Звуковые карты
- чипсеты для ПК
- Местные автобусы различных типов — в частности, для освоения автобусов на современных системах.
- с низкой пропускной способностью Шины ввода-вывода различных типов (для указывающих устройств, таких как мыши , клавиатуры и т. д.)
- Компьютерные устройства хранения данных, такие как жесткий диск , CD-ROM и шины гибких дисков ( ATA , SATA , SCSI , SAS )
- Реализация поддержки различных файловых систем.
- Сканеры изображений
- Цифровые фотоаппараты
- Тюнеры цифрового эфирного телевидения
- Адаптеры приемопередатчиков радиочастотной связи для беспроводных персональных сетей , используемые для беспроводной связи на коротких расстояниях и с низкой скоростью в домашней автоматизации (например, Bluetooth Low Energy (BLE) , Thread , Zigbee и Z-Wave ).
- ИК- адаптеры
Общие уровни абстракции для драйверов устройств включают:
- Для аппаратного обеспечения:
- Прямое взаимодействие
- Запись или чтение из регистра управления устройством
- Использование какого-либо интерфейса более высокого уровня (например, Video BIOS )
- Использование другого драйвера устройства более низкого уровня (например, драйверов файловой системы, использующих драйверы диска)
- Имитируем работу с железом, делая при этом совсем другое [9]
- Для программного обеспечения:
- Разрешение операционной системе прямого доступа к аппаратным ресурсам
- Реализация только примитивов
- Реализация интерфейса для программного обеспечения без драйверов (например, TWAIN ).
- Реализация языка, иногда довольно высокоуровневого (например, PostScript )
Поэтому выбор и установка правильных драйверов устройств для данного оборудования часто является ключевым компонентом конфигурации компьютерной системы. [10]
Драйверы виртуальных устройств [ править ]
Драйверы виртуальных устройств представляют собой особый вариант драйверов устройств. Они используются для эмуляции аппаратного устройства, особенно в средах виртуализации , например, когда программа DOS запускается на компьютере Microsoft Windows или когда гостевая операционная система запускается, например, на хосте Xen . Вместо того, чтобы позволить гостевой операционной системе взаимодействовать с оборудованием, драйверы виртуальных устройств берут на себя противоположную роль и эмулируют часть оборудования, так что гостевая операционная система и ее драйверы, работающие внутри виртуальной машины, могут создать иллюзию доступа к реальному оборудованию. Попытки гостевой операционной системы получить доступ к оборудованию направляются драйверу виртуального устройства в хостовой операционной системе, например, в виде вызовов функций . Драйвер виртуального устройства также может отправлять моделируемые события уровня процессора, такие как прерывания в виртуальную машину .
Виртуальные устройства также могут работать в невиртуализированной среде. Например, виртуальный сетевой адаптер используется с виртуальной частной сетью , а устройство виртуального диска используется с iSCSI . Хорошим примером драйверов виртуальных устройств могут быть Daemon Tools .
Существует несколько вариантов драйверов виртуальных устройств, таких как VxD , VLM и VDD.
Драйверы с открытым исходным кодом [ править ]
- Драйвер графического устройства
- Принтеры: ЧАШКИ
- Рейды: CCISS [11] (Командный интерфейс Compaq для поддержки SCSI-3 [12] )
- Сканеры: SANE
- Видео: Vidix , инфраструктура прямого рендеринга
Solaris Описания наиболее часто используемых драйверов устройств :
- fas: быстрый/широкий SCSI-контроллер.
- hme: быстрый (10/100 Мбит/с) Ethernet
- isp: Дифференциальные контроллеры SCSI и карта SunSwift.
- glm: (Модуль Gigabaud Link [13] ) Контроллеры UltraSCSI
- scsi: устройства последовательного интерфейса малых компьютеров (SCSI).
- sf: soc+ или Social Arbitrated Loop Fibre Channel (FCAL)
- soc: Контроллеры SPARC Storage Array (SSA) и устройство управления
- Social: Последовательные оптические контроллеры для FCAL (soc+)
API [ править ]
- Модель драйвера дисплея Windows (WDDM) — архитектура драйвера графического дисплея для Windows Vista и более поздних версий.
- Единая аудиомодель (UAM) [14]
- Фонд драйверов Windows (WDF)
- Декларативное компонентное оборудование (DCH) — универсальной платформы Windows драйвер [15]
- Модель драйвера Windows (WDM)
- Спецификация интерфейса сетевого драйвера (NDIS) – стандартный сетевой карты . API драйвера
- Advanced Linux Sound Architecture (ALSA) — стандартный интерфейс звуковых драйверов Linux.
- Scanner Access Now Easy (SANE) – общедоступный интерфейс для аппаратного обеспечения сканера растровых изображений.
- Устанавливаемая файловая система (IFS) — API файловой системы для IBM OS/2 и Microsoft Windows NT.
- Открытый интерфейс передачи данных (ODI) — API сетевой карты, аналогичный NDIS.
- Uniform Driver Interface (UDI) - проект кроссплатформенного интерфейса драйверов.
- Dynax Driver Framework (dxd) — кроссплатформенная платформа драйверов C++ с открытым исходным кодом для KMDF и IOKit. [16]
Идентификаторы [ править ]
Устройство на шине PCI или USB идентифицируется двумя идентификаторами, каждый из которых состоит из 4 шестнадцатеричных чисел. Идентификатор поставщика идентифицирует поставщика устройства. Идентификатор устройства идентифицирует конкретное устройство от этого производителя/поставщика.
Устройство PCI часто имеет пару идентификаторов для основного чипа устройства, а также пару идентификаторов подсистемы, которая идентифицирует поставщика, который может отличаться от производителя чипа.
Безопасность [ править ]
Устройства часто имеют большое количество разнообразных и настраиваемых драйверов устройств, работающих в ядре операционной системы (ОС), и часто содержат различные ошибки и уязвимости , что делает их мишенью для эксплойтов . [17] «Принесите свой собственный уязвимый драйвер» (BYOVD) использует подписанные старые драйверы, содержащие недостатки, которые позволяют хакерам вставлять вредоносный код в ядро. [18]
Не хватает эффективных инструментов обнаружения уязвимостей ядра, особенно для операционных систем с закрытым исходным кодом, таких как Microsoft Windows. [19] где исходный код драйверов устройств в основном не является общедоступным (с открытым исходным кодом) [20] и у водителей часто тоже есть много привилегий. [21] [22] [23] [24]
Подобные уязвимости существуют и в драйверах ноутбуков. [25] драйвера для Wi-Fi и Bluetooth, [26] [27] игровые/графические драйверы, [28] и драйверы в принтерах. [29]
Группа исследователей безопасности считает отсутствие изоляции одним из основных факторов, подрывающих безопасность ядра . [30] и опубликовали структуру изоляции для защиты ядер операционной системы, в первую очередь монолитного ядра Linux , которое, по их словам, получает около 80 000 коммитов в год для своих драйверов. [31] [32]
Важным фактором при проектировании ядра является поддержка, которую оно обеспечивает для защиты от ошибок ( отказоустойчивость ) и от вредоносного поведения ( безопасность ). Эти два аспекта обычно четко не разграничиваются, и принятие этого разграничения при проектировании ядра приводит к отказу от иерархической структуры защиты . [33]
Механизмы или политики, предоставляемые ядром, можно классифицировать по нескольким критериям, включая: статические (применяются во время компиляции ) или динамические (применяются во время выполнения ); упреждающее или постобнаружение; в соответствии с принципами защиты, которым они удовлетворяют (например, Деннинг [34] [35] ); поддерживаются ли они аппаратно или на основе языка; являются ли они скорее открытым механизмом или обязательной политикой; и многое другое.См. также [ править ]
- Драйвер (программное обеспечение)
- Классный водитель
- Синтез и проверка драйверов устройств
- Оболочка драйвера
- Бесплатное программное обеспечение
- Прошивка
- Загружаемый модуль ядра
- Македев
- Микроконтроллер
- Аппаратное обеспечение с открытым исходным кодом
- Драйвер принтера
- Репликант (операционная система)
- udev (пространство пользователя /dev)
Ссылки [ править ]
- ↑ Перейти обратно: Перейти обратно: а б «Что такое драйвер устройства?» . WhatIs.com . ТехТаржет. Архивировано из оригинала 13 февраля 2021 года . Проверено 19 марта 2018 г.
- ^ Образовательные услуги EMC (2010 г.). Хранение информации и управление ею: хранение, управление и защита цифровой информации . Джон Уайли и сыновья. ISBN 9780470618332 . Архивировано из оригинала 13 февраля 2021 г. Проверено 10 ноября 2020 г.
- ^ Берк, Тимоти (1995). Написание драйверов устройств: учебное пособие и справочник . Цифровая пресса. ISBN 9781555581411 . Архивировано из оригинала 26 января 2021 г. Проверено 5 августа 2016 г.
- ^ «MAKEDEV — Команда Linux — Команда Unix» . Linux.about.com. 11 сентября 2009 г. Архивировано из оригинала 30 апреля 2009 г. Проверено 17 сентября 2009 г.
- ^ Таненбаум, Эндрю; Вудхалл, Альберт (2006). Операционные системы, проектирование и внедрение (3-е изд.). Река Аппер-Сэддл, Нью-Джерси: Притворный зал Пирсона. п. 256. ИСБН 0-13-142938-8 .
- ^ Иосифович Павел; Ионеску, Алекс; Руссинович, Марк; Соломон, Дэвид (2017). Внутреннее устройство Windows, часть 1 (Седьмое изд.). Редмонд, Вашингтон: Microsoft Press. ISBN 978-0-7356-8418-8 .
- ^ «Введение в структуру драйверов пользовательского режима (UMDF)» . Майкрософт . 10 октября 2006 г. Архивировано из оригинала 7 января 2010 г. Проверено 4 марта 2008 г.
- ^ Дебора Морли (2009). Понимание компьютеров 2009: сегодня и завтра . Cengage Обучение. ISBN 9780324830132 . Архивировано из оригинала 9 июня 2021 г. Проверено 10 ноября 2020 г.
- ^ Компьютерная периферия и интерфейсы . Технические публикации Пуна. Январь 2008 г. стр. 5–8. ISBN 978-8184314748 . Проверено 3 мая 2016 г. [ постоянная мертвая ссылка ]
- ^ «Что такое драйверы устройств и зачем они нам нужны?» . Drivers.com . 17 апреля 2015 года. Архивировано из оригинала 20 ноября 2016 года . Проверено 19 марта 2018 г.
- ^ «ЦИСС» . СоурсФордж . 2010. Архивировано из оригинала 21 августа 2010 г. Проверено 11 августа 2010 г.
Драйверы для контроллеров HP (ранее Compaq) Smart Array, которые обеспечивают возможность аппаратного RAID.
- ^ Рассел, Стив; и др. (21 октября 2003 г.). Аббревиатуры и акронимы . Международная организация технической поддержки IBM. п. 207. ИСБН 0-7384-2684-9 . Проверено 14 августа 2011 г.
{{cite book}}
:|work=
игнорируется ( помогите ) [ постоянная мертвая ссылка ] - ^ «Патент США 5969841 — Модуль связи Gigabaud с принимаемым сигналом определения мощности» . ООО ПатентСторм. Архивировано из оригинала 12 июня 2011 г. Проверено 8 сентября 2009 г.
Улучшенный модуль Gigabaud Link (GLM) предназначен для двунаправленной передачи данных между хост-устройством и последовательной средой передачи.
- ^ «Унифицированная аудиомодель (Windows CE 5.0)» . Сеть разработчиков Microsoft . Архивировано из оригинала 22 июня 2017 г. Проверено 19 сентября 2016 г.
- ^ Делл США. «Что такое драйверы DCH и почему вам нужно о них знать? | Dell США» . www.dell.com . Проверено 29 октября 2020 г.
- ^ «dxd — платформа драйверов dynax: главная страница» . dxd.dynax.at . Архивировано из оригинала 29 мая 2016 г. Проверено 19 сентября 2016 г.
- ^ Талеби, Сейед Мохаммаджавад Сейед; Таваколи, Хамид; Чжан, Ханг; Чжан, Чжэн; Сани, Ардалан Амири; Цянь, Чжиюнь (2018). Charm: облегчение динамического анализа драйверов устройств мобильных систем . стр. 291–307. ISBN 9781939133045 . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ Гудин, Дэн (14 октября 2022 г.). «Как ошибка Microsoft открыла миллионы компьютеров для мощных атак вредоносного ПО» . Арс Техника . Архивировано из оригинала 8 ноября 2022 года . Проверено 8 ноября 2022 г.
- ^ Пан, Цзяньфэн; Ян, Гуанлу; Фань, Сяокао (2017). Digtool: {основанная на виртуализации} платформа для обнаружения уязвимостей ядра . стр. 149–165. ISBN 9781931971409 . Проверено 5 ноября 2022 г.
- ^ Кинг, Бертель (18 июня 2022 г.). «Драйверы оборудования с закрытым исходным кодом и с открытым исходным кодом: почему это важно» . МУО . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ Бранскомб, Мэри (7 апреля 2022 г.). «Как Microsoft блокирует уязвимые и вредоносные драйверы в Защитнике, сторонних инструментах безопасности и в Windows 11» . Техреспублика . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ Гудин, Дэн (5 октября 2022 г.). «Не видно решения лазейки шириной в милю, которая годами преследовала ключевую защиту Windows» . Арс Техника . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ Давенпорт, Корбин. « Атаки типа «Принеси свой собственный уязвимый драйвер» ломают Windows» . Как компьютерщик . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ «Предупреждение безопасности Windows 10: уязвимости обнаружены в более чем 40 драйверах» . Мигающий компьютер . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ Гудин, Дэн (13 июля 2022 г.). «Уязвимости, которые могут привести к необнаружимому заражению, затрагивают 70 моделей ноутбуков Lenovo» . Арс Техника . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ Ридли, Джейкоб (9 февраля 2022 г.). «Сегодня вам понадобится обновить драйверы Wi-Fi и Bluetooth» . ПК-геймер . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ «Беспроводная сеть BlueBorne атакует миллиарды устройств Bluetooth» . Threatpost.com . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ Спадафора, Энтони (12 января 2022 г.). «Установка игровых драйверов может сделать ваш компьютер уязвимым для кибератак» . ТехРадар . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ «HP исправляет уязвимый драйвер, скрывавшийся в принтерах 16 лет» . ЗДНЕТ . Архивировано из оригинала 5 ноября 2022 года . Проверено 5 ноября 2022 г.
- ^ «Тонкая изоляция ядра» . Марс-research.github.io . Архивировано из оригинала 15 сентября 2022 года . Проверено 15 сентября 2022 г.
- ^ Фетцер, Мэри. «Автоматическая изоляция драйверов устройств защищает от ошибок в операционных системах» . Университет штата Пенсильвания через techxplore.com . Архивировано из оригинала 15 сентября 2022 года . Проверено 15 сентября 2022 г.
- ^ Хуан, Юнчжэ; Нараянан, Викрам; Детвейлер, Дэвид; Хуан, Кайминг; Тан, Банда; Джагер, Трент; Бурцев, Антон (2022). «KSplit: автоматизация изоляции драйверов устройств» (PDF) . Архивировано (PDF) из оригинала 15 сентября 2022 года . Проверено 15 сентября 2022 г.
- ^ Вульф 1974, стр. 337–345.
- ^ Деннинг 1976
- ^ Swift 2005, стр. 29, цитата: «изоляция, контроль ресурсов, проверка решений (проверка) и восстановление ошибок».