Если зарегистрировать обработчик ioctl в поле unlocked_ioctl структуры file_operations, то обработчик ioctl вызывается, если пользовательский процесс подключился к драйверу через ноды 0,1, ...
Если же пользовательский процесс подключается через конфигурационный нод 0хff, то обработчик ioctl не вызывается ядром. Пользователю возвращается -1. Но операции open, close, mmap и другие исполняются корректно.
Регистрация ioctl в поле compat_ioctl приводит к тому, что работа через любые ноды не получается. Обработчик не вызывается, а пользователю возвращается -1.
Как сделать возможной работу обработчика через все ноды?
Вы бы показали код всех структурок от девайса до файловых операций и код регистрации девайса в ядре.
И заодно код вашего приложения, отправляющего ioctl.
Kamikadze1024: и при вызове ioctl для остальных файлов вы видите вывод, так?
Я предлагаю заменить pdx = NULL; на return -EINVAL; в ветке if (iminor(filp->f_dentry->d_inode) == PLX_MNGMT_INTERFACE) и посмотреть что будет.
Kamikadze1024: смысл в том, что у вас в этой ветке -- неопределённое поведение, и компилятор волен делать что угодно на пути заканчивающемся в этой ветке. Я предлагаю для начала пофиксить неопределённое поведение, а потом уже смотреть дальше.