Справочник программиста на персональном компьютере фирмы IBM. Ввод/вывод
Страница 16. Создание драйвера устройства


     Раздел 2. Создание драйвера устройства.


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

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

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

   3. Создать драйвер устройства как отдельную программу, которая
указывается в командном файле, выполняемом при загрузке  системы.
Программа  запускается  и  устанавливает  драйвер  устройства как
программу обработки прерывания.  После этого программа завершает-
ся, но остается резидентной в  памяти,  как  объяснено в [1.3.4].
Впоследствии наша программа использует этот драйвер через  вектор
прерывания.

   4. Создать полноценный драйвер  устройства, который будет заг-
ружаться при старте с помощью файла CONFIG.SYS.  MS DOS поддержи-
вает такой тип драйверов устройств и однажды загруженный он может
использовать все возможности команд DOS, включая проверку ошибок.
Специальная команда IOCTL (Контроль ввода/вывода) позволяет прог-
рамме  узнать статус драйвера и послать ему  управляющую  строку,
помимо обычного потока данных.

   Первые три стратегии легко  реализуются  с помощью информации,
приведенной  в остальных частях данной книги.  Но устанавливаемые
драйверы устройств очень сложны.  Зато когда он есть, то он очень
мощен.   В этом случае система будет работать с устройством  нас-
только же тесно, как  с  клавиатурой  или  дисковым  накопителем.
Устройству может быть присвоено имя, например, SERIALPR для  пос-
ледовательного принтера, и затем это устройство может быть откры-
то  для  доступа из любого языка.  В Бейсике оператор  OPEN  "SE-
RIALPR" FOR OUTPUT AS #2 подготовит  последовательный принтер для
вывода.  В языке ассемблера Вы сможете получить доступ к принтеру
как с помощью  метода  управляющего  блока файла, так и с помощью
метода дескриптора файла, включая очень мощную функцию IOCTL. При
этом пользователь имеет возможность доступа к устройству на уров-
не  операционной системы и может просто ввести команду COPY A:MY-
FILE SERIALPR:, чтобы скопировать содержимое файла на принтер.
   Устанавливаемые драйверы устройств  могут быть написаны только
на  языке ассемблера.  Они могут обслуживать два типа  устройств:
символьные и блочные. Эти имена  описывают единицы, которыми уст-

ройство  обрабатывает данные.  Обычно драйверы блочных  устройств
обслуживают  дисковые  накопители,  а  драйверы  символьных - все
остальное, начиная от последовательных принтеров и кончая робота-
ми.  Блочные устройства  обмениваются блоками данных, поэтому они
занимаются накоплением данных. Символьные устройства обмениваются
данными побайтно,  поэтому  они  лучше  подходят  для управляющих
устройств,  а  также для устройств, которые не  могут  обеспечить
высокую скорость обмена данными. Драйверы блочных устройств очень
сложны  и здесь нет достаточно места, чтобы объяснить их структу-
ру.  Очень редко кому требуется написать такой драйвер. Техничес-
кое  руководство по MS DOS предоставляет всю необходимую информа-
цию и содержит полный пример драйвера виртуального диска в опера-
тивной  памяти.  Вы можете просмотреть эту информацию после  того
как изучите обсуждение драйверов  символьных устройств, приведен-
ное здесь.
   Устанавливаемые  драйверы устройств беспощадны к программистс-
ким ошибкам.  Поскольку драйверы автоматически загружаются систе-
мой  при загрузке, то невозможно использовать отладчики для выяв-
ления причин неполадок.  Поэтому будьте предельно внимательны при
их написании.
   Программа драйвера устройства разбивается на три части, каждая
из которых обсуждается  отдельно  в  следующих разделах.  Это (1)
заголовок драйвера, который именует устройство и содержит  инфор-
мацию об остальных частях драйвера, (2) стратегия драйвера, кото-
рая  хранит  информацию  об области данных, создаваемой  MS  DOS,
которая называетя заголовком запроса, и (3) обработчик прерывания
устройства, который и содержит код, управляющий устройством.


 
« Предыдущая статья   Следующая статья »