Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): 3.1. Проектирование scull

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

3.1. Проектирование scull

victor8632 11.11.10 в 12:22

1

Первым шагом написания драйвера является определение возможностей (механизмов), которые драйвер будет предоставлять пользовательским программам. Так как наше "устройство" является частью оперативной памяти компьютера, мы можем делать с ним, что хотим. Оно может стать устройством последовательного или случайного доступа, одним устройством или несколькими и т.п.

victor8632 11.11.10 в 12:25

0

Чтобы сделать scull полезным в качестве шаблона написания реальных драйверов для реальных устройств, мы покажем, как реализовать различные абстракции устройств в верхней части памяти компьютера, каждую со своей индивидуальностью.

victor8632 11.11.10 в 12:32

0

Исходные коды scull реализуют описанные ниже устройства. Каждый вид устройства обслуживается модулем названного типа.

victor8632 11.11.10 в 12:50

0

cull0 to scull3

hardorsoft 28.10.10 в 11:41

0

scull0 до scull3

victor8632 11.11.10 в 12:56

0
+1

Четыре устройства каждое из которых состоит из глобальной и постоянной области памяти. Глобальная обозначает, что если устройство открыто несколько раз, данные, содержащиеся в устройстве, являются общими для всех файловых дискрипторов, которые открыли его. Постоянная обозначает, что если устройство будет закрыто или открыто вновь, данные не пропадут. С этим устройством может быть интересно работать, потому что оно может быть доступно и протестировано с использованием обычных команд, таких как cp, cat, и оболочки перенаправления ввода/вывода.

victor8632 11.11.10 в 12:53

0

scullpipe0 to scullpipe3

hardorsoft 28.10.10 в 11:42

0

Четыре FIFO (first-in-first-out - первый внутрь - первый наружу) устройства, которые работают как каналы. Один процесс читает то, что написал другой. Если несколько процессов читают одно и то же устройство, они начинают соперничать за данные. Внутренности scullpipe покажут, как может быть реализовано блокирующее и неблокирующее чтение без необходимости прибегать к прерываниям. И хотя реальные драйвера синхронизируются со своими устройствами при помощи аппаратных прерываний, тема блокирующих и неблокирующих операций важна сама по себе отдельно от рассмотрения обработки прерываний (рассматривается в главе 10).

victor8632 12.11.10 в 06:51

0

scullsingle
scullpriv
sculluid
scullwuid

hardorsoft 28.10.10 в 11:42

0

Эти устройства похожи на scull0, но имеют некоторые ограничения по правам открытия. Первое (scullsingle) позволяет только одному процессу одномоментно использовать драйвер, в то время как scullpriv является выделенным для каждой виртуальной консоли (или X-терминальной сессии), потому что каждая консоль/терминал получает свои области памяти. Sculluid and scullwuid могут быть открыты многократно, но только одним пользователем одновременно; первое возвращает ошибку "Устройство занято", если устройство блокировано другим пользователем, в то время как второе реализует блокирующее открытие. Эти варианты scull представляются довольно запутанными в смысле политики и механизмов действия, но это стоит того, потому что некоторые реальные устройства требуют такого рода управления.

victor8632 12.11.10 в 07:03

0

Каждое из устройств scull демонстрирует различные возможности драйвера и существующие трудности. Эта глава посвящена внутреннему устройству scull0 to scull3; более продвинутые устройства рассматриваются в главе 6. scullpipe описывается в разделе 3.4, остальные - в разделе 6.6.

victor8632 12.11.10 в 15:46

0
Минутку...