Задать вопрос
@Kamikadze1024

Почему не проходит системный вызов ioctl?

Если зарегистрировать обработчик ioctl в поле unlocked_ioctl структуры file_operations, то обработчик ioctl вызывается, если пользовательский процесс подключился к драйверу через ноды 0,1, ...
Если же пользовательский процесс подключается через конфигурационный нод 0хff, то обработчик ioctl не вызывается ядром. Пользователю возвращается -1. Но операции open, close, mmap и другие исполняются корректно.

Регистрация ioctl в поле compat_ioctl приводит к тому, что работа через любые ноды не получается. Обработчик не вызывается, а пользователю возвращается -1.

Как сделать возможной работу обработчика через все ноды?
  • Вопрос задан
  • 2633 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Вы бы показали код всех структурок от девайса до файловых операций и код регистрации девайса в ядре.
И заодно код вашего приложения, отправляющего ioctl.
Ответ написан
fzfx
@fzfx
18,5 дм
@Kamikadze1024 Автор вопроса
Кидаю ссылку на исходники драйвера. Нужный обработчик находится в файле dispatc.c

https://yadi.sk/d/17TR71PKdupem
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы