Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Обзор системы ввода/вывода Точки входа для драйверов символьных устройств

Точки входа для драйверов символьных устройств

Драйвер устройства для символьного устройства определяется его элементами в структуре cdevsw.

Open Открывает устройство при подготовке к операциям ввода/вывода. Точка входа open устройства будет вызываться для каждого системного вызова open для файла специального устройства или внутренне, когда устройство готовится для монтирования файловой системы с помощью системного вызова mount. Процедура ореп() обычно проверяет целостность соответствующего устройства. Например, она проверит, что устройство было идентифицировано во время фазы автоконфигурирования (для дисковых приводов - что носитель присутствует и готов к приему команд).

Close Закрывает устройство. Процедура close() вызывается после завершения последнего клиента, заинтересованного в использовании устройства. Эта семантика определена средствами ввода/вывода более высокого уровня. Дисковые устройства ничего не должны делать, когда устройство закрывается, поэтому они используют пустую процедуру close(). Устройства, поддерживающие доступ лишь одного клиента, должны пометить устройство как снова доступное.

Read Прочесть данные с устройства. Для непосредственных устройств эта точка входа обычно просто вызывает процедуру physio() со специфическими для устройства параметрами. Для ориентированных на терминал устройств запрос чтения немедленно передается драйверу терминала. Для других устройств запрос чтения требует, чтобы указанные данные были скопированы в адресное пространство ядра, обычно посредством процедуры uio-move(), а затем переданы устройству.

Write Записать данные в устройство. Эта точка входа является прямым аналогом точки входа чтения: непосредственные устройства используют physio(), ориентированные на терминал устройства вызывают для выполнения этой операции драйвер терминала, а другие устройства обрабатывают запрос внутренне.

Ioctl Выполнение операции, отличной от чтения или записи. Эта точка входа первоначально предоставляла механизм для получения и установки параметров устройства для устройств терминалов; ее использование было распространено также и на другие виды устройств. Исторически операции ioctl() широко варьировались от устройства к устройству.

Poll Проверить, готовы ли в устройстве данные для чтения, или доступно ли пространство для записи данных. Точка входа poll используется системными вызовами select и poll при проверке дескрипторов файлов, связанных со специальными файлами устройств. Для непосредственных устройств операция poll бессмысленна, поскольку данные не буферируются. Здесь в качестве точки входа устанавливается seltruef), процедура, которая возвращает true в ответ на любой запрос poll. Для устройств, использующихся с драйвером терминала, в качестве этой точки входа устанавливается ttselect().

mmap Отображает смещение устройства в адрес памяти. Эта точка входа вызывается системой виртуальной памяти для преобразования логического отображения в физический адрес. Например, она преобразует смещение в /dev/mem в адрес ядра.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 65 гостей онлайн

Реклама на сайте: