Глава 6, Расширенные операции символьного драйвера

Предыдущая  Содержание  Следующая V*D*V

Глава 6

 

В Главе 3 мы построили завершённый драйвер устройства, пользователь может писать в него и читать из него. Но реальное устройство обычно предоставляет больше возможностей, чем синхронные read и write. Теперь, когда мы оснащены средствами отладки на случай, если что-то пойдёт наперекосяк и твёрдым пониманием вопросов конкуренции, чтобы избегать проблем, мы можем смело идти вперед и создать более совершенный драйвер. В этой главе рассматриваются несколько концепций, которые вам необходимо понять, чтобы писать полнофункциональные драйверы символьных устройств. Мы начинаем с реализации системного вызова ioctl, который является общим интерфейсом, используемым для управления устройством. Затем мы разберём различные способам синхронизации с пользовательским пространством; к концу этой главы вы будете иметь хорошую идею, как помещать процессы в сон (и будить их), реализовывать неблокирующей ввод/вывод, а также информировать пользовательское пространство, когда ваши устройства доступны для чтения или записи. Мы заканчиваем просмотром, как в рамках драйверов реализовать несколько различных политик доступа к устройству. Идеи, обсуждаемые здесь, демонстрируются несколькими модифицированными версиями драйвера scull. Напомним ещё раз, всё осуществляется с использованием находящегося в памяти виртуального устройства, так что вы можете опробовать этот код самостоятельно без необходимости иметь какое-либо особенное аппаратное обеспечение. К настоящему времени вы, возможно, хотите запачкать ваши руки, работая с реальным оборудованием, но этого придётся подождать до Главы 9.

Предыдущая  Содержание  Следующая