Я пишу драйвер ядра, которому нужно выполнить 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;
}
Я подозреваю, что это может быть как-то связано с передачей здесь неправильного индекса, но я даже не уверен, как получить правильный индекс, если он не тот, который передан в ioctl из пользовательского пространства.