Процесс пользовательского пространства можно использовать ioctl()
вызовы на файл устройства, созданного с помощью mknod
. Драйвер устройства может использовать аргументы из системного вызова ioctl
, чтобы найти аргументы для вызова wait_for_completion()
. Например, пользовательский процесс может использовать ioctl()
, чтобы передать структуру, содержащую какой-либо код, чтобы определить, что он хочет, указатель на буфер пространства пользователя и поле размера, содержащее размер буфера. Затем поток ядра, обрабатывающий ioctl()
, блокируется на wait_for_complete()
, а затем заполняет буфер пользовательского пространства данными.
См this web page для примера ioctl()
обработки:
Представляя IOCTL()
Input/Output Control (У, короче) является обычной операцией, или системного вызова, доступным в большинстве категорий драйверов. Это системный вызов с одним счетом для всех типов: . Если нет другой системы вызов, соответствующий конкретному требованию, то ioctl() используется для использования .
Практические примеры включают регулировку громкости для звукового устройства, дисплей конфигурацию видеоустройства, чтение регистров устройств и так далее - в принципе, ничего общего с входом устройства/вывода, или операций конкретного устройства, но достаточно универсальный для любого вида операции (например, для отладки драйвера путем запроса данных драйвера ).
...
Конечно, почему нет? Является ли эта функция ненормальной? –
+ Мартин: это нормально, но ограничено ядром, не так ли? – CyrIng