Какие существуют драйверы устройств в unix
Как уже говорилось выше, одной из основных задач операционной системы является управление аппаратной частью. Ту программу или тот кусок программного кода, который предназначен для управления конкретным устройством, и называют обычно драйвером устройства. Необходимость драйверов устройств в операционной системе объясняется тем, что каждое отдельное устройство воспринимает только свой строго фиксированный набор специализированных команд, с помощью которых этим устройством можно управлять. Причем команды эти чаще всего предназначены для выполнения каких-то простых элементарных операций. Если бы каждое приложение вынуждено было использовать только эти команды, писать приложения было бы очень сложно, да и размер их был бы очень велик. Поэтому приложения обычно используют какие-то команды высокого уровня (типа "записать файл на диск"), а о преобразовании этих команд в управляющие последовательности для конкретного устройства заботится драйвер этого устройства. Поэтому каждое отдельное устройство, будь то дисковод, клавиатура или принтер, должно иметь свой программный драйвер, который выполняет роль транслятора или связующего звена между аппаратной частью устройства и программными приложениями, использующими это устройство.
В Linux драйверы устройств бывают трех типов.
Драйверы первого типа являются частью программного кода ядра (встроены в ядро). Соответствующие устройства автоматически обнаруживаются системой и становятся доступны для приложений. Обычно таким образом обеспечивается поддержка тех устройств, которые необходимы для монтирования корневой файловой системы и запуска компьютера. Примерами таких устройств являются стандартный видеоконтроллер VGA, контроллеры IDE-дисков, материнская плата, последовательные и параллельные порты.
Драйверы второго типа представлены модулями ядра. Они оформлены в виде отдельных файлов и для их подключения (на этапе загрузки или впоследствии) необходимо выполнить отдельную команду подключения модуля, после чего будет обеспечено управление соответствующим устройством. Если необходимость в использовании устройства отпала, модуль можно выгрузить из памяти (отключить). Поэтому использование модулей обеспечивает большую гибкость, так как каждый такой драйвер может быть переконфигурирован без остановки системы. Модули часто используются для управления такими устройствами как SCSI-адаптеры, звуковые и сетевые карты.
Файлы модулей ядра располагаются в подкаталогах каталога /lib/modules. Обычно при инсталляции системы задается перечень модулей, которые будут автоматически подключаться на этапе загрузки. Список загружаемых модулей хранится в файле /etc/modules. А в файле /etc/modules.conf находится перечень опций для таких модулей. Редактировать этот файл "вручную" не рекомендуется, для этого существуют специальные скрипты (типа update-modules).
Для подключения или отключения модулей в работающей системе имеются специальные утилиты.
• lsmod - выдает список загруженных в данный момент модулей.
• insmod - служит для загрузки или "установки" модуля из командной строки.
• rmmod - служит для выгрузки или "удаления" модуля.
• modprobe - автоматически загружает модули. Для того, чтобы отобразить текущую конфигурацию всех модулей можно воспользоваться командой: modprobe -c.
Примечание
Хотя файлы модулей имеют суффикс.o, при использовании этих команд ссылки на модули указываются без упоминания этого суффикса. Например: при упоминании модуля, файл которого называется "joystick.o", вы должны использовать в командной строке просто "joystick".
И, наконец, для третьего типа драйверов устройств программный код драйвера поделен между ядром и специальной утилитой, предназначенной для управления данным устройством. Например, для драйвера принтера ядро отвечает за взаимодействие с параллельным портом, а формирование управляющих сигналов для принтера осуществляет демон печати lpd (который использует для этого специальную программу-фильтр, о чем подробнее будет рассказано ниже, в разд. 9.6). Другие примеры драйверов этого типа - драйверы модемов и X-сервер (драйвер видеоадаптера), о котором шла речь в главе 7.
Но надо специально отметить, что во всех трех случаях непосредственное взаимодействие с устройством осуществляет ядро или какой-то модуль ядра. А пользовательские программы взаимодействуют с драйверами устройств через специальные файлы, расположенные в каталоге /dev и его подкаталогах. То есть взаимодействие прикладных программ с аппаратной частью компьютера в ОС Linux осуществляется по следующей схеме:
устройство ‹-› ядро ‹-› специальный файл устройства ‹-› программа пользователя
Такая схема обеспечивает единый подход ко всем устройствам, которые с точки зрения приложений выглядят как обычные файлы.
10.2 ДИСКОВЫЕ ДРАЙВЕРЫ
10.2 ДИСКОВЫЕ ДРАЙВЕРЫ Так сложилось исторически, что дисковые устройства в системах UNIX разбивались на разделы, содержащие различные файловые системы, что означало "деление [дискового] пакета на несколько управляемых по-своему частей" (см. [System V 84b]). Например, если на диске
10.3 ТЕРМИНАЛЬНЫЕ ДРАЙВЕРЫ
10.3 ТЕРМИНАЛЬНЫЕ ДРАЙВЕРЫ Терминальные драйверы выполняют ту же функцию, что и остальные драйверы: управление передачей данных от и на терминалы. Однако, терминалы имеют одну особенность, связанную с тем, что они обеспечивают интерфейс пользователя с системой.
12.3.3.3 Драйверы
12.3.3.3 Драйверы В многопроцессорной реализации вычислительной системы на базе компьютеров AT&T 3B20 семафоры в структуру загрузочного кода драйверов не включаются, а операции типа P и V выполняются в точках входа в каждый драйвер (см. [Bach 84]). В главе 10 мы говорили о том, что
Драйверы, встроенные в ядро, и драйверы, реализуемые в виде модулей
Драйверы, встроенные в ядро, и драйверы, реализуемые в виде модулей Как вы уже знаете, при настройке ядра можно включить или отключить некоторые свойства ядра, например, вы можете разрешить или запретить использование конкретного Ethernet-адаптера. На рис. 1.1 видно, что
9.1. Драйверы устройств
9.1. Драйверы устройств Как уже говорилось выше, одной из основных задач операционной системы является управление аппаратной частью. Ту программу или тот кусок программного кода, который предназначен для управления конкретным устройством, и называют обычно драйвером
Драйверы телефонии Zapata
Драйверы телефонии Zapata Компиляция драйверов телефонии Zapata для использования с оборудованием Digium проста; однако из-за различия сред сборки в версиях 1.2 и 1.4 для этого применяются немного разные методы. Сначала необходимо выполнить команду . /configu re, чтобы определить, какие
Драйверы
Драйверы Поговорим об очередном преимуществе Ubuntu Linux.Если вспомнить момент установки Windows, когда установка прошла, но осталось поставить драйвера, то я уверен, что каждый может вспомнить копание по полкам и шкафам в поисках дров к нашему ненаглядному компьютеру. Ubuntu
24.2 Драйверы
24.2 Драйверы Вообще говоря, в Ubuntu по умолчанию присутствуют все необходимые драйверы для всего поддерживаемого оборудования. Однако для некоторых устройств существуют также проприетарные драйверы от производителя, которые из-за забористых лицензий необходимо
Драйверы
Драйверы Драйверы — это специальные программы, управляющие работой оборудования, для которого они были написаны. Сейчас практически каждое устройство — от оптической мыши до видеокамеры — требует для своего взаимодействия с компьютером отдельный драйвер. Конечно, не
УСТАНАВЛИВАЕМ ДРАЙВЕРЫ
5.2.8. Условия и драйверы
5.2.8. Условия и драйверы Некоторые условия могут требовать специфической обработки. Эти условия могут касаться ошибок или общего управления потоком данных внутри
Глава 13. Драйверы
Глава 13. Драйверы Как известно, для управления устройствами, входящими в состав компьютера, служат небольшие программы — драйверы. Для нормальной работы сканера также необходим драйвер, причем для каждой модели эта программа разрабатывается отдельно. Но «услуги»
Глава 11 Установка новых устройств. Драйверы
Глава 11 Установка новых устройств. Драйверы 11.1. Установка нового устройства в ваш компьютер В этом разделе мы поговорим о физическом подключении устройства к компьютеру. Любой пользователь рано или поздно столкнется с установкой новых устройств в свой компьютер. Вот
Ввиду существенных различий в работе с символьными и с блочными устройствами, в UNIX различаются два основных типа драйверов: символьные и блочные.
Для символьных устройств используются только символьные драйверы. Для каждого блочного устройства обычно имеется два разных драйвера: блочный и символьный. Блочный драйвер позволяет выполнять операции только с целым числом блоков, как и положено работать с блочными устройствами. Символьный драйвер блочного устройства является более высокоуровневой программой, которая имитирует выполнение операций чтения и записи произвольного количества байт, на самом деле используя обращения к блочному драйверу.
Помимо драйверов реальных физических устройств, система может включать драйверы «псевдоустройств». Примером может служить драйвер, обеспечивающий обращение программ к содержимому системной памяти.
При загрузке системы формируются две таблицы, для символьных и для блочных драйверов. Строки таблицы соответствуют конкретным драйверам, а столбцы – функциям, которые должен уметь выполнять драйвер, так что в ячейках таблицы содержатся адреса, по которым вызываются функции драйвера. Набор функций для символьных и для блочных драйверов слегка разнится, поэтому используются две разных таблицы.
К наиболее важным функциям драйвера относятся следующие.
· Открытие устройства. Как минимум, при этом увеличивается счетчик текущих обращений к устройству, что позволяет ставить обращения в очередь, если устройство занято. Некоторые устройства при открытии могут выполнять еще какие-то начальные действия.
· Закрытие устройства – операция, противоположная открытию.
· Обработка прерывания – выполняет ввод или вывод очередной порции данных, когда устройство переходит в состояние готовности.
· Опрос устройства – эта функция выполняется для тех устройств, которые не генерируют прерываний, или если при разработке драйвера почему-либо решено не использовать прерывания от устройств. Опрос выполняется не постоянно, а с некоторым периодом, по прерыванию от таймера.
· Чтение данных с устройства.
· Запись данных на устройство.
· Вызов стратегии. Это способ выполнения операций ввода/вывода, характерный для блочных устройств. При этом запрос может быть поставлен в очередь. Запрос в ряде случаев может быть удовлетворен путем обращения к дисковому кэшу, без выполнения чтения или записи на устройство.
· Выполнение специальных функций. Набор этих функций зависит от конкретного устройства. Это может быть, например, опрос или установка текущего режима работы устройства, форматирование дорожек диска, перемотка ленты и т.п.
Интересной отличительной особенностью UNIX является то, что для работы с периферийными устройствами прикладные программы могут и должны использовать те же средства, что для работы с файлами. Вообще, устройства в UNIX представлены как специальные файлы, вписанные в каталог файловой системы наравне с обычными файлами. Каждому драйверу устройства соответствует отдельный специальный файл, символьный или блочный, в зависимости от типа драйвера. Как правило, все специальные файлы размещаются в каталоге /dev. Чтобы начать работу с устройством, программа должна вызвать функцию открытия файла, указав ей имя специального файла. При этом происходит обращение к функции открытия из драйвера соответствующего устройства.
С каждым специальным файлом связаны два числа, называемые старшим и младшим номерами устройства. Старший номер определяет номер строки в таблице символьных либо блочных драйверов. Младший номер передается драйверу как дополнительный параметр. Он может означать, например, номер конкретного дискового устройства.
Особенность UNIX- все устройства обслуживаются в системе виде файлов.
С точки зрения внутренней организации системы, как и в подавляющем большинстве других операционных систем, работа с внешними устройствами осуществляется посредством использования иерархии драйверов, которые позволяют организовывать взаимодействие ядра ОС с конкретными устройствами. В системе Unix существует единый интерфейс организации взаимодействия с внешними устройствами, для этих целей используются специальные файлы устройств, размещенные в каталоге /dev. Файл устройства позволяет ассоциировать некоторое имя (имя файла устройства) с драйвером того или иного устройства. Следует отметить, что здесь мы несколько замещаем понятие устройства понятием драйвер устройства, так как несмотря на то, что мы используем термин специальные файлы устройств, на практике, мы используем ассоциированный с данным специальным файлом драйвер устройства, и таких драйверов у одного устройства может быть произвольное число. Возможно, более удачным было бы использовать специальный файл-драйвер устройства.
В системе существуют два типа специальных файлов устройств:
- файлы байториентированных устройств (драйверы обеспечивают возможность побайтного обмена данными и, обычно, не используют централизованной внутрисистемной кэш-буферизации );
- файлы блокориентированных устройств (обмен с данными устройствами осуществляется фиксированными блоками данных, обмен осуществляется с использованием специального внутрисистемного буферного кэша).
Следует отметить, файловая система может быть создана только на блокориентированных устройствах.
В общем случае тип файла определяется свойствами конкретного устройства и организацией драйвера. Конкретное физическое устройство может иметь, как байториентированные драйверы драйверы, так и блокориентированные. Например, если рассмотреть физическое устройство Оперативная память , для него можно реализовать, как байториентированный интерфейс обмена (и соответствующий байториентированный драйвер), так и блокориентированный.
Содержимое файлов устройств размещается исключительно в соответствующем индексном дескрипторе, структура которого для фалов данного типа, отличается от структуры индексных дескрипторов других типов файлов.
Итак индексный дескриптор файла устройства содержит:
- тип файла устройства – байториентированный или блокориентированный;
- «старший номер» (major number) устройства - номер драйвера в соответствующей таблице драйверов устройств;
- «младший номер» (minor number) устройства – служебная информация, передающаяся драйверу устройства.
Система поддерживает две таблицы драйверов устройств.
bdevsw – таблица драйверов блокориентированных устройств.
cdevsw - таблица байториентированных устройств. Выбор конкретной таблицы определяется типом файла устройства. Соответственно, поле старший номер определяет строку таблицы с которой ассоциирован драйвер устройства. Драйверу устройства может быть передана дополнительная информация через поле младший номер это может быть, например, номер конкретного однотипного устройства или некоторая информация, определяющая дополнительные функции драйвера
Каждая запись этих таблиц содержит так называемый коммутатор устройства – структуру, в которой размещены указатели на соответствующие точки входа (функции) драйвера. Таким образом, в системе определяется базовый уровень взаимодействия с драйвером устройства (конкретный состав точек входа определяется конкретной версией системы). В случае, если конкретный драйвер устройства не поддерживает работу с той или иной точкой входа, на ее место устанавливается специальная ссылка-заглушка на точку ядра.
В качестве примера, рассмотрим типовой набор точек входа в драйвер (b - префикс точки входа, характеризующий конкретный драйвер):
- bopen()открытие устройства, обеспечивается инициализация устройства и внутренних структур данных драйвера;
- bclose()закрытие драйвера устройства, например в том случае, если ни один из процессов не работает с драйвером;
- bread()чтение данных;
- bwrite() запись данных;
- bioctl()управление устройством, задание режимов работы драйвера, определение набора внутренних операций/команд драйвера;
- bintr()– обработка прерывания, вызывается ядром при возникновении прерывания в устройстве с которым ассоциирован драйвер;
- bstrategy() управление стратегией организации блокориентированного обмена (некоторые функции оптимизации организации обмена, обработка специальных ситуаций, связанных с функционированием конкретного устройства и т.п.).
Так в некоторых реализациях системы возможно отсутствие точек входа чтения и записи для блокориентированнх устройств. В этом случае блокориентированный обмен реализуются путем передачи управления на точу bstrategy().
В системе возможно обращение к функциям драйвера в следующих ситуациях:
1. старт системы, определение ядром состава доступных устройств.
2. обработка запроса ввода/вывода (запрос может быть инициирован, любыми процессами, в том числе и ядром);
3. обработка прерывания, связанного с данным устройством, в этом случае ядро вызывает специальную функцию драйвера;
4. выполнение специальных команд управления (например, остановка устройства, приведение устройства в некоторое начальное состояние и т.п.).
Существует два, традиционных способа включения драйверов новых устройств в систему:
путем «жесткого», статического встраивания драйвера в код ядра, требующего перекомпиляцию исходных текстов ядра или пересборку объектных модулей ядра.
за счет динамического включения драйвера в систему.
Динамическое включение драйверов в системупредполагает выполнение следующей последовательности действий:
- загрузка и динамическое связывание драйвера с кодом ядра (выполняется специальным загрузчиком);
- инициализация драйвера и соответствующего ему устройства (создание специальных структур данных драйвера,
формирование данных коммутатора устройства, связывание обработчика прерываний ядра с данным драйвером).
Для обеспечения динамического включения/выключения драйверов предоставляется набор системных вызовов, обеспечивающий установку и удаление драйверов в систему.
На практике, наиболее часто мы имеем дело с обменами, связанными с доступом к содержимому обыкновенных файлов. Рассмотрим обобщенную схему организации обмена данными с файлами, т.е. внутреннюю организацию программ и данных, обеспечивающих доступ к содержимому файловой системы (файловая система может быть создана исключительно на блокориентированных устройствах).
Рассмотрим ряд информационных структур и таблиц, используемых системой для организации интерфейса работы с файлами.
Для организации интерфейса работы с файлами ОС использует информационные структуры и таблицы двух типов:
- ассоциированные с процессом;
- ассоциированные с ядром операционной системой.
Таблица индексных дескрипторов открытых файлов.
Для каждого открытого в рамках системы файла формируется запись в таблице ТИДОФ, содержащая:
копия индексного дескриптора (ИД) открытого файла;
кратность - счетчик открытых в системе файлов, связанных с данным ИД.
Вся работа с содержимым открытых файлов происходит посредством использования копии ИД, размещенной в таблице ТИДОФ. Данная таблица размещается в памяти ядра ОС. Если один и тот же файл открыт неоднократно, то запись в ТИДОФ создается одна, но каждое дополнительное открытие этого файла увеличивает счетчик на единицу
Драйверы в ОС UNIX довольно точно соответствуют стандартной схеме драйвера, приведенной в п. 2.7. Тем не менее, ввиду существенных различий в работе с символьными и с блочными устройствами, в UNIX различаются два основных типа драйверов: символьные и блочные.
Для символьных устройств используются только символьные драйверы. Для каждого блочного устройства обычно имеется два разных драйвера: блочный и символьный. Блочный драйвер позволяет выполнять операции только с целым числом блоков, как и положено работать с блочными устройствами. Символьный драйвер блочного устройства является более высокоуровневой программой, которая имитирует выполнение операций чтения и записи произвольного количества байт, на самом деле используя обращения к блочному драйверу.
Помимо драйверов реальных физических устройств, система может включать драйверы «псевдоустройств». Примером может служить драйвер, обеспечивающий обращение программ к содержимому системной памяти.
При загрузке системы формируются две таблицы, для символьных и для блочных драйверов. Строки таблицы соответствуют конкретным драйверам, а столбцы – функциям, которые должен уметь выполнять драйвер, так что в ячейках таблицы содержатся адреса, по которым вызываются функции драйвера. Набор функций для символьных и для блочных драйверов слегка разнится, поэтому используются две разных таблицы.
К наиболее важным функциям драйвера относятся следующие.
· Открытие устройства. Как минимум, при этом увеличивается счетчик текущих обращений к устройству, что позволяет ставить обращения в очередь, если устройство занято. Некоторые устройства при открытии могут выполнять еще какие-то начальные действия.
· Закрытие устройства – операция, противоположная открытию.
· Обработка прерывания – выполняет ввод или вывод очередной порции данных, когда устройство переходит в состояние готовности.
· Опрос устройства – эта функция выполняется для тех устройств, которые не генерируют прерываний, или если при разработке драйвера почему-либо решено не использовать прерывания от устройств. Опрос выполняется не постоянно, а с некоторым периодом, по прерыванию от таймера.
· Чтение данных с устройства.
· Запись данных на устройство.
· Вызов стратегии. Это способ выполнения операций ввода/вывода, характерный для блочных устройств. При этом запрос может быть поставлен в очередь. Запрос в ряде случаев может быть удовлетворен путем обращения к дисковому кэшу (см. п. 2.6.6), без выполнения чтения или записи на устройство.
· Выполнение специальных функций. Набор этих функций зависит от конкретного устройства. Это может быть, например, опрос или установка текущего режима работы устройства, форматирование дорожек диска, перемотка ленты и т.п.
Драйверы устройств обеспечивают интерфейс между ядром UNIX и аппаратной частью компьютера. Благодаря этому от остальной части ядра скрыты архитектурные особенности компьютера, что значительно упрощает перенос системы и поддержку работы различных периферийных устройств.
В UNIX существует большое количество драйверов. Часть из них обеспечивает доступ к физическим устройствам, например, жесткому диску, принтеру или терминалу, другие предоставляют аппаратно-независимые услуги. Примером последних могут служить драйверы /dev/kmem для работы с виртуальной памятью ядра /dev/null, представляющий "нулевое" устройство.
Данный текст является ознакомительным фрагментом.
Продолжение на ЛитРес
10.2 ДИСКОВЫЕ ДРАЙВЕРЫ
10.2 ДИСКОВЫЕ ДРАЙВЕРЫ Так сложилось исторически, что дисковые устройства в системах UNIX разбивались на разделы, содержащие различные файловые системы, что означало "деление [дискового] пакета на несколько управляемых по-своему частей" (см. [System V 84b]). Например, если на диске
10.3 ТЕРМИНАЛЬНЫЕ ДРАЙВЕРЫ
10.3 ТЕРМИНАЛЬНЫЕ ДРАЙВЕРЫ Терминальные драйверы выполняют ту же функцию, что и остальные драйверы: управление передачей данных от и на терминалы. Однако, терминалы имеют одну особенность, связанную с тем, что они обеспечивают интерфейс пользователя с системой.
12.3.3.3 Драйверы
12.3.3.3 Драйверы В многопроцессорной реализации вычислительной системы на базе компьютеров AT&T 3B20 семафоры в структуру загрузочного кода драйверов не включаются, а операции типа P и V выполняются в точках входа в каждый драйвер (см. [Bach 84]). В главе 10 мы говорили о том, что
Драйверы, встроенные в ядро, и драйверы, реализуемые в виде модулей
Драйверы, встроенные в ядро, и драйверы, реализуемые в виде модулей Как вы уже знаете, при настройке ядра можно включить или отключить некоторые свойства ядра, например, вы можете разрешить или запретить использование конкретного Ethernet-адаптера. На рис. 1.1 видно, что
9.1. Драйверы устройств
9.1. Драйверы устройств Как уже говорилось выше, одной из основных задач операционной системы является управление аппаратной частью. Ту программу или тот кусок программного кода, который предназначен для управления конкретным устройством, и называют обычно драйвером
Драйверы телефонии Zapata
Драйверы телефонии Zapata Компиляция драйверов телефонии Zapata для использования с оборудованием Digium проста; однако из-за различия сред сборки в версиях 1.2 и 1.4 для этого применяются немного разные методы. Сначала необходимо выполнить команду . /configu re, чтобы определить, какие
Драйверы
Драйверы Поговорим об очередном преимуществе Ubuntu Linux.Если вспомнить момент установки Windows, когда установка прошла, но осталось поставить драйвера, то я уверен, что каждый может вспомнить копание по полкам и шкафам в поисках дров к нашему ненаглядному компьютеру. Ubuntu
24.2 Драйверы
24.2 Драйверы Вообще говоря, в Ubuntu по умолчанию присутствуют все необходимые драйверы для всего поддерживаемого оборудования. Однако для некоторых устройств существуют также проприетарные драйверы от производителя, которые из-за забористых лицензий необходимо
Драйверы
Драйверы Драйверы — это специальные программы, управляющие работой оборудования, для которого они были написаны. Сейчас практически каждое устройство — от оптической мыши до видеокамеры — требует для своего взаимодействия с компьютером отдельный драйвер. Конечно, не
УСТАНАВЛИВАЕМ ДРАЙВЕРЫ
5.2.8. Условия и драйверы
5.2.8. Условия и драйверы Некоторые условия могут требовать специфической обработки. Эти условия могут касаться ошибок или общего управления потоком данных внутри
Глава 13. Драйверы
Глава 13. Драйверы Как известно, для управления устройствами, входящими в состав компьютера, служат небольшие программы — драйверы. Для нормальной работы сканера также необходим драйвер, причем для каждой модели эта программа разрабатывается отдельно. Но «услуги»
Глава 11 Установка новых устройств. Драйверы
Глава 11 Установка новых устройств. Драйверы 11.1. Установка нового устройства в ваш компьютер В этом разделе мы поговорим о физическом подключении устройства к компьютеру. Любой пользователь рано или поздно столкнется с установкой новых устройств в свой компьютер. Вот
Читайте также: