Что такое драйвер?

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

Идеология построения драйверов

Операционная система управляет некоторым «виртуальным устройством», которое понимает стандартный набор команд. Драйвер переводит эти команды в команды, которые понимает непосредственно устройство. Эта идеология называется «абстрагирование от аппаратного обеспечения». Впервые в отечественной вычислительной технике подобный подход появился в серии ЕС ЭВМ, а такого рода управляющие программы назывались канальными программами.

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

  • загрузка драйвера. Тут драйвер регистрируется в системе, производит первичную инициализацию и т. п.;
  • выгрузка. Драйвер освобождает захваченные ресурсы — память, файлы, устройства и т. п.;
  • открытие драйвера. Начало основной работы. Обычно драйвер открывается программой как файл, функциями CreateFile() в Win32 или fopen() в UNIX-образных системах;
  • чтение;
  • запись: программа читает или записывает данные из/в устройство, обслуживаемое драйвером;
  • закрытие;
  • IOCTL. Зачастую драйвер поддерживает интерфейс ввода-вывода, специфичный для данного устройства. С помощью этого интерфейса программа может послать специальную команду, которую поддерживает данное устройство. Например, для SCSI устройств можно послать команду GET_INQUERY, чтобы получить описание устройства. В Win32 системах управление осуществляется через API-фунцию DeviceIoControl(). В UNIX-подобных — ioctl()

Загрузка драйвера

Загрузка и установка современных драйверов достаточно проста в обращении, как правило файлы пакуют в инсталятор, и мастер установки драйверов всё делает автоматически. Но такая простота, как пправило в WINDOWS системах. Даже в наши дни, легко найти людей которые пользуются ОС DOS. И производители новых устройств не всегда разрабатывают официальные версии драйверов под DOS и другие OS. Поэтому частные разработчики и программисты разрабатывает такие драйвера под свои нужды. Существуют, так называемые Driver Packs, это модифицированные driver brand другими программистами, как правило это делают для того чтобы получить все возможности управления устройством, так как стандартные драйвера пишутся для пользователей и "лишние" настройки и возможности для них недоступны. Driver packs увеличивают риск корректной работы устройства и даже могут его загубить, поэтому мы не рекомендуем использовать driver packs если вы не специалист.

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

Windows драйвер

В операционных системах Microsoft Windows driver состоит из нескольких файлов, хранящихся обычно в каталогах SYSTEM32 SYSTEM, и его подкаталогах. Ядро драйвера хранится в файлах с расширениями .VXD, .DRV, .SYS и некоторых других, а дополнительные процедуры собраны в динамические библиотеки .DLL. Кроме того, в состав driver могут входить файлы утилиты, справки, модули деинсталляции и т.д.

Последовательность операций по установке и удалению driver хранится в специальном информационном файле .INF. С его помощью Windows определяет тип, производителя, модель устройства, класс драйвера, необходимые файлы и ресурсы. В этом файле также описываются операции распаковки, копирования, запуска, переименования файлов, добавления и удаления ключей в реестре и т.д. Все .INF-файлы хранятся в каталоге INF, причем устанавливаемые драйверы не-Microsoft'овского происхождения (не поставляемые в комплекте с операционной системой) откладываются в отдельный подкаталог INF/OTHER.

Windows умеет автоматически находить driver devices. Для этого она использует технологию Plug&Play, точнее, ее часть, отвечающую за самоидентификацию устройства. В частности, PCI-устройства обнаруживаются BIOS и заносятся в виде списка в специальную область ESCD сокращенно от "Extended System Configuration Data". Windows может использовать ее, а может и самостоятельно опросить шину PCI и узнать у каждого устройства коды его производителя, модели и версии, необходимые ресурсы и другую информацию. Далее проверяется база данных файлы DRVIDX.BIN и DRVDATA.BIN по всем известным устройствам и находится необходимый .INF-файл. Если в каталоге .INF имеются новые файлы, они будут автоматически проиндексированы и внесены в базу данных.

Следует также помнить, что операционные системы Windows 98 SE и Windows 2000, равно как и их потомки, поддерживают новую модель драйверов, получившую название WDM сокращенно от Windows Driver Model. Это – попытка реализовать полную поддержку ACPI и Plug&Play, то есть дать возможность download driver и выгружать drivers "на горячую", без перезагрузки системы, подключать их в виде фильтров-расширений к стандартным драйверам Microsoft, более гибко управлять конфигурацией устройств и энергосбережением устройств. WDM-драйверы хранятся в каталоге SYSTEM32/DRIVERS. В частности, интерфейсы USB и IEEE-1394 FireWire работают только под управлением WDM-драйверов.