Драйвер — это программа или часть программного кода, предназначенная для управления некоторым устройством. Драйвер является связующим звеном между командами аппаратной части устройства и приложениями, использующими это устройство.
Драйверы являются частью ядра, а не пользовательскими процессами, но доступ к драйверу возможен как из ядра, так и со стороны команд пользовательского уровня. В последнем случае создаются специальные файлы устройств , хранящихся в каталоге /dev. Ядро преобразует операции над этими файлами в вызовы функций драйвера.
В Linux выделяют драйверы трех типов:
1. Драйверы первого типа. Являются частью программного кода ядра. Устройства автоматически обнаруживаются системой и становятся доступны для приложений. Драйверы этого типа относятся к устройствам, необходимым для монтирования корневой файловой системы и запуска компьютера. Примеры устройств с драйверами этого типа: стандартный видеоконтроллер VGA, контроллеры IDE-дисков, материнская плата, последовательные и параллельные порты.
2. Драйверы второго типа. Являются модулями ядра. Оформлены в виде отдельных файлов с расширением .o или .ko, обычно хранящихся в /lib/modules. Для подключения устройства необходимо выполнить отдельную команду. При необходимости модуль можно отключить, что обеспечивает гибкость, т.к. каждый такой драйвер может быть переконфигурирован без остановки системы. Используются, например, для звуковых и сетевых карт. Список всех загруженных в текущий момент модулей можно посмотреть командой lsmod. Список автоматически загружаемых модулей хранится в файле /etc/modules, в файле /etc/modules.conf находится перечень опций для модулей.
3. Драйверы третьего типа. Программный код драйвера поделен между ядром и специальной утилитой управления устройством. Например, для принтера ядро отвечает за взаимодействие с портами, а формирование управляющих сигналов осуществляет демон печати lpd. Другие примеры: драйверы модемов и видеоадаптеров.
Для всех трех типов драйверов взаимодействие аппаратной части компьютера и приложений осуществляется по схеме:
Устройство
Ядро
Специальный файл
устройства
Программа пользователя
Такая схема обеспечивает единый подход ко всем устройствам, которые с точки зрения приложений являются файлами.