Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): 3.1. Проектирование scull
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
3.1. Проектирование scull victor8632 11.11.10 в 12:22 |
|
|
Первым шагом написания драйвера является определение возможностей (механизмов), которые драйвер будет предоставлять пользовательским программам. Так как наше "устройство" является частью оперативной памяти компьютера, мы можем делать с ним, что хотим. Оно может стать устройством последовательного или случайного доступа, одним устройством или несколькими и т.п. victor8632 11.11.10 в 12:25 |
||
|
Чтобы сделать scull полезным в качестве шаблона написания реальных драйверов для реальных устройств, мы покажем, как реализовать различные абстракции устройств в верхней части памяти компьютера, каждую со своей индивидуальностью. victor8632 11.11.10 в 12:32 |
||
|
Исходные коды scull реализуют описанные ниже устройства. Каждый вид устройства обслуживается модулем названного типа. victor8632 11.11.10 в 12:50 |
||
|
cull0 to scull3 hardorsoft 28.10.10 в 11:41 scull0 до scull3 victor8632 11.11.10 в 12:56 |
+1 | |
|
Четыре устройства каждое из которых состоит из глобальной и постоянной области памяти. Глобальная обозначает, что если устройство открыто несколько раз, данные, содержащиеся в устройстве, являются общими для всех файловых дискрипторов, которые открыли его. Постоянная обозначает, что если устройство будет закрыто или открыто вновь, данные не пропадут. С этим устройством может быть интересно работать, потому что оно может быть доступно и протестировано с использованием обычных команд, таких как cp, cat, и оболочки перенаправления ввода/вывода. victor8632 11.11.10 в 12:53 |
||
|
scullpipe0 to scullpipe3 hardorsoft 28.10.10 в 11:42 |
||
|
Четыре FIFO (first-in-first-out - первый внутрь - первый наружу) устройства, которые работают как каналы. Один процесс читает то, что написал другой. Если несколько процессов читают одно и то же устройство, они начинают соперничать за данные. Внутренности scullpipe покажут, как может быть реализовано блокирующее и неблокирующее чтение без необходимости прибегать к прерываниям. И хотя реальные драйвера синхронизируются со своими устройствами при помощи аппаратных прерываний, тема блокирующих и неблокирующих операций важна сама по себе отдельно от рассмотрения обработки прерываний (рассматривается в главе 10). victor8632 12.11.10 в 06:51 |
||
|
scullsingle hardorsoft 28.10.10 в 11:42 |
||
|
Эти устройства похожи на scull0, но имеют некоторые ограничения по правам открытия. Первое (scullsingle) позволяет только одному процессу одномоментно использовать драйвер, в то время как scullpriv является выделенным для каждой виртуальной консоли (или X-терминальной сессии), потому что каждая консоль/терминал получает свои области памяти. Sculluid and scullwuid могут быть открыты многократно, но только одним пользователем одновременно; первое возвращает ошибку "Устройство занято", если устройство блокировано другим пользователем, в то время как второе реализует блокирующее открытие. Эти варианты scull представляются довольно запутанными в смысле политики и механизмов действия, но это стоит того, потому что некоторые реальные устройства требуют такого рода управления. victor8632 12.11.10 в 07:03 |
||
|
Каждое из устройств scull демонстрирует различные возможности драйвера и существующие трудности. Эта глава посвящена внутреннему устройству scull0 to scull3; более продвинутые устройства рассматриваются в главе 6. scullpipe описывается в разделе 3.4, остальные - в разделе 6.6. victor8632 12.11.10 в 15:46 |
