Драйверы устройств образуют интерфейс между API-интерфейсом устройства ОС и реальными аппаратными регистрами.
Модель API устройства Linux является продолжением более широкой концепции Linux, согласно которой все является файлом, и что приложение может выполнить все, что ему нужно, с помощью функций open(), read(), write(), ioctl() и close( ) интерфейс. Под капотом есть процедура install(), но ОС решает, когда ее вызывать.
Другая сторона медали — аппаратное обеспечение. ЦП обращается к регистрам устройства либо с помощью специальных инструкций ввода-вывода, либо с помощью обычного доступа к памяти в специальных ячейках памяти, подключенных к оборудованию. Хотя аппаратные регистры могут действовать как память, они могут делать то, чего память не может. Довольно часто запись в один из регистров устройства может изменить значения некоторых других его регистров, и, в частности, может измениться или быть изменена электрической активностью в подключенном оборудовании.
Драйверы устройств восполняют этот пробел. Поскольку возможности для типов устройств практически безграничны, трудно сделать обобщение о том, как функции отображаются, кроме нескольких моментов. Процедура install() вызывается во время запуска системы, настраивает регистры для правильной работы, обычно это включает в себя настройку службы прерывания и обработку; подпрограмма open() предоставляет приложению логическое соединение с устройством; обычно предпринимаются попытки заставить read() и write() перемещать данные каким-то разумным образом, хотя иногда вы видите, что они реализованы как no-ops; а оперативные настройки устройства выполняются через ioctl(). И, конечно же, основная задача close() состоит в том, чтобы отменить работу open(), уделяя особое внимание высвобождению любых системных ресурсов, захваченных open().
Ну, в любом случае, это ориентированный на Linux подход. Модель Windows, по крайней мере, та, с которой я знаком (вероятно, устаревшая), имеет тенденцию предлагать библиотеки вызовов функций для конкретных устройств.
person
Community
schedule
22.05.2010