logo
Лекции_по_ОС / ТОС_11_п_вв_выв_слайды

Встраивание драйверов в ядро

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

Традиционно для встраивания драйвера в ядро UNIX требуется перекомпиляции

ядра и перезапуск системы. Принципиально эта процедура не

отличается от компиляции обычной программы, все компоненты ядра яв-

ляются модулями и редактор связей объединяет их с объект-

тным модулемдрайвера для получения исполняемого файла. В этом случае

драйвер встраивается в ядро статически, т. е. независимо от фактического

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

Однако тенденция развития современных версии операционной системы LINUX заключается в предоставлении возможности динамического расширения функциональности ядра. Это, в частности, относится к файловой системе драйверам устройств и сетевым протоколам (точнее, драйверам системы STREAMS). Возможность работы с новыми периферийными устройствами без необходимости перекомпиляции ядра обеспечивается служебными драйверами. Вместо того чтобы встраивать модуль драйвера, основываясь на статических таблицах и интерфейсах, ядро содержит набор функций, позволяющих загрузить необходимые драйверы и, соответственно выгрузить их, когда необходимость работы с данным устройством от­падает. При этом структуры данных для доступа к драйверам устройств также являются динамическими.

Динамическая установка драйвера в ядро операционной системы требует

выполнения следующих операций:

Естественно, код динамически загружаемых драйверов сложнее, и содержит

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

дополнительных функций и структур данных, которые должны быть

определены в динамически загружаемом драйвере операционной системы

SOLARIS 2.5, приведен в табл. 5.2.

Помимо этого Solaris 2.5 предоставляет ряд функций ядра для работы с динамически загружаемыми драйверами: mod_install (9FJ, mod remove и mod_info(9F).