Метаответ: Весь необработанный материал, происходящий с ядром Linux, проходит lkml (список рассылки ядра Linux). Для объяснительных сводок считайте или ищите lwn (Linux еженедельные новости).
Ответ: От нового способа ioctl () Jonathan Corbet:
ioctl()
одна из остающихся частей ядра, которое работает под Большой блокировкой ядра (BKL). В прошлом использование BKL позволило продолжительномуioctl()
методы для создания длинных задержек для несвязанных процессов.
Следует за объяснением патча, который представил unlocked_ioctl
и compat_ioctl
в 2.6.11. Удаление ioctl
поле произошло намного позже, в 2.6.36.
Объяснение: когда ioctl
выполнялся, это взяло Большую блокировку ядра (BKL), таким образом, ничто иное не могло выполниться одновременно. Это очень плохо на многопроцессорной машине, таким образом, было большое усилие избавиться от BKL. Во-первых, unlocked_ioctl
был представлен. Это позволяет каждому устройству записи драйвера выбрать что блокировку использовать вместо этого. Это может быть трудно, таким образом, был период перехода, во время которого все еще работали старые драйверы (использование ioctl
) но новые драйверы могли использовать улучшенный интерфейс (unlocked_ioctl
). В конечном счете все драйверы были преобразованы и ioctl
мог быть удален.
compat_ioctl
на самом деле не связано, даже при том, что это было добавлено одновременно. Его цель состоит в том, чтобы позволить 32-разрядным программам пространства пользователя делать ioctl
запросы к 64-разрядному ядру. Значение последнего аргумента ioctl
зависит от драйвера, таким образом, нет никакого способа сделать независимое от драйвера преобразование.
Существуют случаи, когда замена (include/linux/fs.h) структуры file_operations метод ioctl () к compat_ioctl () в ядре 2.6.36 не работает (например, для некоторых драйверов устройств), и unlocked_ioctl () должен использоваться.
unlocked_ioctl
то, что это происходит? То, что указатель функции используется на файл (в этом случае astruct file
) кажется, что я могу быть близким.unlocked_ioctl
зарегистрированный для символьных файлов на инициализации драйвера послеmknod
? – sherrellbc 05.01.2017, 11:59unlocked_ioctl
в astruct file_ops
когда это запускается, и они заполняются отstruct file_ops
в объект файла, когда файл открыт.mknod
не играет роли в этом. – Gilles 'SO- stop being evil' 05.01.2017, 16:06mknod
выставить его интерфейс через устройство посимвольного ввода-вывода прежде, чем перенаправить связанные операции файла к себе (черезunlocked_ioctl
). – sherrellbc 05.01.2017, 16:09