Знатоки, нужна ваша помощь. Некоторое время назад написал свой первый драйвер ядра, для версии ядра 4.15. Использовал функции ioctl (чтение системного времени из ядра) в пользовательском интерфейсе все запускалось. Сейчас поставил новую систему с ядром версии 4.18 и возникла проблема. При попытке вызова функции возникал kernelpanic. Изменил unlocked_ioctl на compat_ioctl, kernelpanic пропал, но в функция ioctl не запускается. С чем это может быть связано или как протестировать, чтобы понять в чем проблема? Если написал не туда прошу простить и сильно не ругаться.
// Файловые операции поддерживаемые устройством
static struct file_operations fops = {
.owner = THIS_MODULE,
.read = device_read,
.write = device_write,
.compat_ioctl = device_ioctl,
.open = device_open,
.release = device_release
};
static long device_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
{/* ... */
switch (cmd) {
/* ... */
case TIME_IOCREAD:
ret = read_time((struct my_date *)arg);
break;
}
return ret;
}
// Вызов функции пользователем
void time_device::read_time_from_dev(struct my_date *user_date)
{
qDebug() << "READ_TIME";
if (!is_Open()) {
qDebug() << "device not open";
return;
}
ioctl(_devHandel,TIME_IOCREAD, user_date);
}
Перемещено tailgunner из general