Я пишу драйвер ядра, который должен выполнять ioctl на другом устройстве. Я понимаю, что это не лучший способ обработки кода, но пока это временное исправление. Я получаю код ошибки -22 (неверный аргумент) из моего вызова ioctl в функции, но я не вижу, что может быть не так с аргументами. Вот соответствующие разделы кода.
#define GPIO74 "/dev/gpio/74"
struct file* gpio74FD;
.
.
.
gpio74FD = filp_open(GPIO74,O_RDWR,0)
.
.
.
int device_ioctl(struct inode* inode,struct file *file, unsigned int ioctl_num,unsigned long ioctl_param)
{
.
.
.
ret_val = gpio74FD->f_op->ioctl(inode, gpio74FD, GPIO_CONFIG_AS_INP, 0); //returns error code -22 (Invlaid Argument)
.
.
.
return ret_val;
}
Я подозреваю, что это может быть связано с передачей неверного inode, но я даже не уверен, как получить правильный inode, если он не передан ioctl из пространства пользователя.